chore(i18n): refresh uk translations
This commit is contained in:
parent
6bbe94b1e9
commit
f3d4db9194
@ -1,28 +1,28 @@
|
||||
---
|
||||
read_when:
|
||||
- Робота над поведінкою каналу WhatsApp/веб або маршрутизацією вхідних повідомлень
|
||||
summary: Підтримка каналу WhatsApp, контроль доступу, поведінка доставки та експлуатація
|
||||
- Робота над поведінкою каналу WhatsApp/web або маршрутизацією вхідних повідомлень
|
||||
summary: Підтримка каналу WhatsApp, засоби контролю доступу, поведінка доставки та експлуатація
|
||||
title: WhatsApp
|
||||
x-i18n:
|
||||
generated_at: "2026-04-29T23:07:38Z"
|
||||
generated_at: "2026-04-30T02:42:22Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: bf363ec2cc7100635ee6b0a7b0e7bb956521d0203b445fd38b5a75a13e8918a6
|
||||
source_hash: 5d0268e068de0001a11a6ed87fe70df8e685d1dcc87c8142ee5b3c77d7a727f3
|
||||
source_path: channels/whatsapp.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Стан: готовий до production через WhatsApp Web (Baileys). Gateway володіє пов’язаними сеансами.
|
||||
Стан: готовий до продакшену через WhatsApp Web (`Baileys`). Gateway керує пов’язаними сеансами.
|
||||
|
||||
## Встановлення (за потреби)
|
||||
## Встановлення (на вимогу)
|
||||
|
||||
- Onboarding (`openclaw onboard`) і `openclaw channels add --channel whatsapp`
|
||||
пропонують встановити WhatsApp plugin під час першого вибору.
|
||||
- Онбординг (`openclaw onboard`) і `openclaw channels add --channel whatsapp`
|
||||
пропонують встановити Plugin WhatsApp під час першого вибору.
|
||||
- `openclaw channels login --channel whatsapp` також пропонує процес встановлення, коли
|
||||
plugin ще не встановлено.
|
||||
- Dev-канал + git checkout: типово використовує локальний шлях plugin.
|
||||
- Stable/Beta: використовує npm-пакет `@openclaw/whatsapp`, коли опубліковано
|
||||
поточний пакет.
|
||||
Plugin ще відсутній.
|
||||
- Канал розробки + git checkout: типово використовує локальний шлях Plugin.
|
||||
- Stable/Beta: використовує npm-пакет `@openclaw/whatsapp`, коли актуальний пакет
|
||||
опубліковано.
|
||||
|
||||
Ручне встановлення залишається доступним:
|
||||
|
||||
@ -30,26 +30,26 @@ x-i18n:
|
||||
openclaw plugins install @openclaw/whatsapp
|
||||
```
|
||||
|
||||
Якщо npm повідомляє, що пакет, який належить OpenClaw, застарілий або відсутній, використовуйте
|
||||
поточну пакетовану збірку OpenClaw або локальний checkout, доки черга npm-пакетів
|
||||
не наздожене.
|
||||
Якщо npm повідомляє, що пакет, яким володіє OpenClaw, застарілий або відсутній, використовуйте
|
||||
актуальну упаковану збірку OpenClaw або локальний checkout, доки черга npm-пакетів
|
||||
не наздожене зміни.
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="Зв’язування" icon="link" href="/uk/channels/pairing">
|
||||
Стандартна політика DM — зв’язування для невідомих відправників.
|
||||
<Card title="Pairing" icon="link" href="/uk/channels/pairing">
|
||||
Стандартна політика DM — сполучення для невідомих відправників.
|
||||
</Card>
|
||||
<Card title="Усунення проблем каналу" icon="wrench" href="/uk/channels/troubleshooting">
|
||||
Міжканальна діагностика та інструкції з відновлення.
|
||||
<Card title="Channel troubleshooting" icon="wrench" href="/uk/channels/troubleshooting">
|
||||
Діагностика між каналами та інструкції з відновлення.
|
||||
</Card>
|
||||
<Card title="Конфігурація Gateway" icon="settings" href="/uk/gateway/configuration">
|
||||
Повні шаблони та приклади конфігурації каналу.
|
||||
<Card title="Gateway configuration" icon="settings" href="/uk/gateway/configuration">
|
||||
Повні шаблони конфігурації каналів і приклади.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## Швидке налаштування
|
||||
|
||||
<Steps>
|
||||
<Step title="Налаштуйте політику доступу WhatsApp">
|
||||
<Step title="Configure WhatsApp access policy">
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -66,7 +66,7 @@ openclaw plugins install @openclaw/whatsapp
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Зв’яжіть WhatsApp (QR)">
|
||||
<Step title="Link WhatsApp (QR)">
|
||||
|
||||
```bash
|
||||
openclaw channels login --channel whatsapp
|
||||
@ -78,7 +78,7 @@ openclaw channels login --channel whatsapp
|
||||
openclaw channels login --channel whatsapp --account work
|
||||
```
|
||||
|
||||
Щоб під’єднати наявний/користувацький каталог автентифікації WhatsApp Web перед входом:
|
||||
Щоб під’єднати наявний/власний каталог автентифікації WhatsApp Web перед входом:
|
||||
|
||||
```bash
|
||||
openclaw channels add --channel whatsapp --account work --auth-dir /path/to/wa-auth
|
||||
@ -87,7 +87,7 @@ openclaw channels login --channel whatsapp --account work
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Запустіть gateway">
|
||||
<Step title="Start the gateway">
|
||||
|
||||
```bash
|
||||
openclaw gateway
|
||||
@ -95,31 +95,31 @@ openclaw gateway
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Схваліть перший запит на зв’язування (якщо використовується режим зв’язування)">
|
||||
<Step title="Approve first pairing request (if using pairing mode)">
|
||||
|
||||
```bash
|
||||
openclaw pairing list whatsapp
|
||||
openclaw pairing approve whatsapp <CODE>
|
||||
```
|
||||
|
||||
Запити на зв’язування спливають через 1 годину. Очікувані запити обмежені 3 на канал.
|
||||
Запити на сполучення спливають через 1 годину. Кількість очікуваних запитів обмежена 3 на канал.
|
||||
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Note>
|
||||
OpenClaw рекомендує за можливості запускати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого налаштування, але налаштування з особистим номером також підтримуються.)
|
||||
OpenClaw рекомендує за можливості запускати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такої схеми, але налаштування з особистим номером також підтримуються.)
|
||||
</Note>
|
||||
|
||||
## Шаблони розгортання
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Виділений номер (рекомендовано)">
|
||||
<Accordion title="Dedicated number (recommended)">
|
||||
Це найчистіший операційний режим:
|
||||
|
||||
- окрема ідентичність WhatsApp для OpenClaw
|
||||
- зрозуміліші списки дозволів DM і межі маршрутизації
|
||||
- нижча ймовірність плутанини із self-chat
|
||||
- зрозуміліші allowlist DM і межі маршрутизації
|
||||
- нижча ймовірність плутанини із чатом із самим собою
|
||||
|
||||
Мінімальний шаблон політики:
|
||||
|
||||
@ -136,18 +136,18 @@ OpenClaw рекомендує за можливості запускати Whats
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Резервний варіант з особистим номером">
|
||||
Onboarding підтримує режим особистого номера й записує базову конфігурацію, дружню до self-chat:
|
||||
<Accordion title="Personal-number fallback">
|
||||
Онбординг підтримує режим особистого номера та записує базову конфігурацію, зручну для чату із самим собою:
|
||||
|
||||
- `dmPolicy: "allowlist"`
|
||||
- `allowFrom` містить ваш особистий номер
|
||||
- `selfChatMode: true`
|
||||
|
||||
Під час виконання захисти self-chat спираються на пов’язаний власний номер і `allowFrom`.
|
||||
Під час виконання захисти для чату із самим собою спираються на пов’язаний власний номер і `allowFrom`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Область каналу лише WhatsApp Web">
|
||||
<Accordion title="WhatsApp Web-only channel scope">
|
||||
Канал платформи обміну повідомленнями базується на WhatsApp Web (`Baileys`) у поточній архітектурі каналів OpenClaw.
|
||||
|
||||
У вбудованому реєстрі чат-каналів немає окремого каналу обміну повідомленнями Twilio WhatsApp.
|
||||
@ -157,22 +157,22 @@ OpenClaw рекомендує за можливості запускати Whats
|
||||
|
||||
## Модель виконання
|
||||
|
||||
- Gateway володіє сокетом WhatsApp і циклом повторного підключення.
|
||||
- Сторож повторного підключення використовує активність транспорту WhatsApp Web, а не лише обсяг вхідних повідомлень застосунку, тому тихий сеанс пов’язаного пристрою не перезапускається тільки через те, що останнім часом ніхто не надсилав повідомлень. Довше обмеження тиші застосунку все ще примусово запускає повторне підключення, якщо транспортні кадри продовжують надходити, але повідомлення застосунку не обробляються протягом вікна сторожа; після тимчасового повторного підключення для нещодавно активного сеансу ця перевірка тиші застосунку використовує звичайний тайм-аут повідомлень для першого вікна відновлення.
|
||||
- Таймінги сокета Baileys явно задаються в `web.whatsapp.*`: `keepAliveIntervalMs` керує ping-повідомленнями застосунку WhatsApp Web, `connectTimeoutMs` керує тайм-аутом початкового рукостискання, а `defaultQueryTimeoutMs` керує тайм-аутами запитів Baileys.
|
||||
- Gateway керує сокетом WhatsApp і циклом повторного підключення.
|
||||
- Watchdog повторного підключення використовує активність транспорту WhatsApp Web, а не лише обсяг вхідних повідомлень застосунку, тому тихий сеанс пов’язаного пристрою не перезапускається лише через те, що останнім часом ніхто не надсилав повідомлень. Довший ліміт тиші застосунку все одно примусово виконує повторне підключення, якщо транспортні кадри продовжують надходити, але повідомлення застосунку не обробляються протягом вікна watchdog; після тимчасового повторного підключення для нещодавно активного сеансу ця перевірка тиші застосунку використовує звичайний тайм-аут повідомлень для першого вікна відновлення.
|
||||
- Таймінги сокета Baileys явно задаються в `web.whatsapp.*`: `keepAliveIntervalMs` керує ping-запитами застосунку WhatsApp Web, `connectTimeoutMs` керує тайм-аутом початкового handshake, а `defaultQueryTimeoutMs` керує тайм-аутами запитів Baileys.
|
||||
- Вихідні надсилання потребують активного слухача WhatsApp для цільового облікового запису.
|
||||
- Чати статусу й трансляцій ігноруються (`@status`, `@broadcast`).
|
||||
- Сторож повторного підключення відстежує активність транспорту WhatsApp Web, а не лише обсяг вхідних повідомлень застосунку: тихі сеанси пов’язаних пристроїв залишаються активними, доки транспортні кадри продовжують надходити, але зупинка транспорту примусово запускає повторне підключення задовго до пізнішого шляху віддаленого від’єднання.
|
||||
- Прямі чати використовують правила DM-сеансів (`session.dmScope`; типове `main` згортає DM до головного сеансу агента).
|
||||
- Статусні та broadcast-чати ігноруються (`@status`, `@broadcast`).
|
||||
- Watchdog повторного підключення відстежує активність транспорту WhatsApp Web, а не лише обсяг вхідних повідомлень застосунку: тихі сеанси пов’язаних пристроїв залишаються активними, доки транспортні кадри продовжують надходити, але зупинка транспорту примушує повторне підключення задовго до пізнішого шляху віддаленого від’єднання.
|
||||
- Прямі чати використовують правила сеансів DM (`session.dmScope`; типове значення `main` згортає DM до головного сеансу агента).
|
||||
- Групові сеанси ізольовані (`agent:<agentId>:whatsapp:group:<jid>`).
|
||||
- Транспорт WhatsApp Web враховує стандартні змінні середовища proxy на хості gateway (`HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` / варіанти в нижньому регістрі). Надавайте перевагу конфігурації proxy на рівні хоста замість специфічних для каналу налаштувань proxy WhatsApp.
|
||||
- Коли `messages.removeAckAfterReply` увімкнено, OpenClaw очищає ack-реакцію WhatsApp після доставлення видимої відповіді.
|
||||
- Транспорт WhatsApp Web поважає стандартні змінні середовища проксі на хості Gateway (`HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` / варіанти в нижньому регістрі). Надавайте перевагу конфігурації проксі на рівні хоста над налаштуваннями проксі WhatsApp для окремого каналу.
|
||||
- Коли `messages.removeAckAfterReply` увімкнено, OpenClaw очищає реакцію підтвердження WhatsApp після доставки видимої відповіді.
|
||||
|
||||
## Хуки Plugin і приватність
|
||||
|
||||
Вхідні повідомлення WhatsApp можуть містити особистий вміст повідомлень, номери телефонів,
|
||||
ідентифікатори груп, імена відправників і поля кореляції сеансів. Через це
|
||||
WhatsApp не транслює вхідні payload-и хуку `message_received` до plugins,
|
||||
ідентифікатори груп, імена відправників і поля кореляції сеансів. З цієї причини
|
||||
WhatsApp не транслює вхідні payload хуків `message_received` до plugins,
|
||||
якщо ви явно не погодитеся:
|
||||
|
||||
```json5
|
||||
@ -187,7 +187,7 @@ WhatsApp не транслює вхідні payload-и хуку `message_receive
|
||||
}
|
||||
```
|
||||
|
||||
Ви можете обмежити згоду одним обліковим записом:
|
||||
Можна обмежити згоду одним обліковим записом:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -205,13 +205,13 @@ WhatsApp не транслює вхідні payload-и хуку `message_receive
|
||||
}
|
||||
```
|
||||
|
||||
Увімкніть це лише для plugins, яким ви довіряєте отримання вхідного вмісту повідомлень
|
||||
WhatsApp та ідентифікаторів.
|
||||
Увімкніть це лише для plugins, яким ви довіряєте отримувати вміст вхідних повідомлень
|
||||
WhatsApp та ідентифікатори.
|
||||
|
||||
## Контроль доступу й активація
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Політика DM">
|
||||
<Tab title="DM policy">
|
||||
`channels.whatsapp.dmPolicy` керує доступом до прямих чатів:
|
||||
|
||||
- `pairing` (типово)
|
||||
@ -221,77 +221,77 @@ WhatsApp та ідентифікаторів.
|
||||
|
||||
`allowFrom` приймає номери у стилі E.164 (нормалізуються внутрішньо).
|
||||
|
||||
Перевизначення для кількох облікових записів: `channels.whatsapp.accounts.<id>.dmPolicy` (і `allowFrom`) мають пріоритет над типовими значеннями рівня каналу для цього облікового запису.
|
||||
Перевизначення для кількох облікових записів: `channels.whatsapp.accounts.<id>.dmPolicy` (і `allowFrom`) мають пріоритет над типовими налаштуваннями рівня каналу для цього облікового запису.
|
||||
|
||||
Подробиці поведінки під час виконання:
|
||||
Деталі поведінки під час виконання:
|
||||
|
||||
- зв’язування зберігаються в allow-store каналу й об’єднуються з налаштованим `allowFrom`
|
||||
- якщо allowlist не налаштовано, пов’язаний власний номер дозволено типово
|
||||
- OpenClaw ніколи автоматично не зв’язує вихідні DM `fromMe` (повідомлення, які ви надсилаєте собі з пов’язаного пристрою)
|
||||
- сполучення зберігаються в allow-store каналу та об’єднуються з налаштованим `allowFrom`
|
||||
- якщо allowlist не налаштовано, зв’язаний власний номер дозволено за замовчуванням
|
||||
- OpenClaw ніколи автоматично не сполучає вихідні DM `fromMe` (повідомлення, які ви надсилаєте собі зі зв’язаного пристрою)
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="Політика груп + списки дозволів">
|
||||
<Tab title="Політика груп + allowlists">
|
||||
Доступ до груп має два рівні:
|
||||
|
||||
1. **Список дозволених учасників груп** (`channels.whatsapp.groups`)
|
||||
- якщо `groups` пропущено, усі групи підходять
|
||||
- якщо `groups` присутній, він діє як список дозволених груп (`"*"` дозволено)
|
||||
1. **Allowlist членства в групах** (`channels.whatsapp.groups`)
|
||||
- якщо `groups` пропущено, придатні всі групи
|
||||
- якщо `groups` присутній, він діє як allowlist груп (`"*"` дозволено)
|
||||
|
||||
2. **Політика відправників групи** (`channels.whatsapp.groupPolicy` + `groupAllowFrom`)
|
||||
- `open`: список дозволів відправників обходиться
|
||||
- `open`: allowlist відправників обходиться
|
||||
- `allowlist`: відправник має відповідати `groupAllowFrom` (або `*`)
|
||||
- `disabled`: блокувати всі групові вхідні повідомлення
|
||||
- `disabled`: блокує всі вхідні повідомлення груп
|
||||
|
||||
Резервний список дозволів відправників:
|
||||
Резервний варіант allowlist відправників:
|
||||
|
||||
- якщо `groupAllowFrom` не задано, під час виконання використовується `allowFrom`, коли він доступний
|
||||
- списки дозволів відправників оцінюються перед активацією через згадку/відповідь
|
||||
- якщо `groupAllowFrom` не задано, runtime повертається до `allowFrom`, коли він доступний
|
||||
- allowlists відправників оцінюються перед активацією за згадкою/відповіддю
|
||||
|
||||
Примітка: якщо блок `channels.whatsapp` взагалі відсутній, резервна політика груп під час виконання — `allowlist` (із журналом-попередженням), навіть якщо задано `channels.defaults.groupPolicy`.
|
||||
Примітка: якщо блоку `channels.whatsapp` взагалі немає, резервна групова політика runtime — `allowlist` (із журналюванням попередження), навіть якщо `channels.defaults.groupPolicy` задано.
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="Згадки + /activation">
|
||||
Відповіді в групах типово потребують згадки.
|
||||
Групові відповіді за замовчуванням потребують згадки.
|
||||
|
||||
Виявлення згадок включає:
|
||||
Виявлення згадок охоплює:
|
||||
|
||||
- явні згадки WhatsApp ідентичності бота
|
||||
- налаштовані regex-шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`)
|
||||
- налаштовані regex-шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервний варіант `messages.groupChat.mentionPatterns`)
|
||||
- транскрипти вхідних голосових нотаток для авторизованих групових повідомлень
|
||||
- неявне виявлення відповіді боту (відправник відповіді збігається з ідентичністю бота)
|
||||
- неявне виявлення відповіді боту (відправник відповіді відповідає ідентичності бота)
|
||||
|
||||
Примітка з безпеки:
|
||||
|
||||
- цитата/відповідь лише задовольняє шлюз згадки; вона **не** надає авторизацію відправника
|
||||
- з `groupPolicy: "allowlist"` відправники не з allowlist усе одно блокуються, навіть якщо вони відповідають на повідомлення користувача з allowlist
|
||||
- цитата/відповідь лише задовольняє перевірку згадки; вона **не** надає авторизацію відправнику
|
||||
- з `groupPolicy: "allowlist"` відправники поза allowlist усе одно блокуються, навіть якщо вони відповідають на повідомлення користувача з allowlist
|
||||
|
||||
Команда активації на рівні сеансу:
|
||||
Команда активації рівня сесії:
|
||||
|
||||
- `/activation mention`
|
||||
- `/activation always`
|
||||
|
||||
`activation` оновлює стан сеансу (не глобальну конфігурацію). Доступ обмежено власником.
|
||||
`activation` оновлює стан сесії (не глобальну конфігурацію). Вона обмежена власником.
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Поведінка особистого номера й self-chat
|
||||
## Поведінка особистого номера та чату із собою
|
||||
|
||||
Коли пов’язаний власний номер також присутній у `allowFrom`, активуються захисти self-chat WhatsApp:
|
||||
Коли зв’язаний власний номер також присутній у `allowFrom`, активуються запобіжники WhatsApp для чату із собою:
|
||||
|
||||
- пропускати сповіщення про прочитання для ходів self-chat
|
||||
- ігнорувати поведінку автоматичного запуску через mention-JID, яка інакше ping-нула б вас
|
||||
- якщо `messages.responsePrefix` не задано, відповіді self-chat типово мають вигляд `[{identity.name}]` або `[openclaw]`
|
||||
- пропускати сповіщення про прочитання для ходів чату із собою
|
||||
- ігнорувати поведінку автозапуску за mention-JID, яка інакше пінгувала б вас самих
|
||||
- якщо `messages.responsePrefix` не задано, відповіді в чаті із собою за замовчуванням мають формат `[{identity.name}]` або `[openclaw]`
|
||||
|
||||
## Нормалізація повідомлень і контекст
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Вхідний конверт + контекст відповіді">
|
||||
Вхідні повідомлення WhatsApp обгортаються у спільний вхідний конверт.
|
||||
<Accordion title="Вхідний envelope + контекст відповіді">
|
||||
Вхідні повідомлення WhatsApp обгортаються у спільний вхідний envelope.
|
||||
|
||||
Якщо існує цитована відповідь, контекст додається в такому форматі:
|
||||
Якщо існує цитована відповідь, контекст додається в такій формі:
|
||||
|
||||
```text
|
||||
[Replying to <sender> id:<stanzaId>]
|
||||
@ -303,8 +303,8 @@ WhatsApp та ідентифікаторів.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Плейсхолдери медіа та витягування локації/контакту">
|
||||
Вхідні повідомлення лише з медіа нормалізуються з плейсхолдерами, такими як:
|
||||
<Accordion title="Плейсхолдери медіа та витягування місцезнаходження/контактів">
|
||||
Вхідні повідомлення лише з медіа нормалізуються з плейсхолдерами, як-от:
|
||||
|
||||
- `<media:image>`
|
||||
- `<media:video>`
|
||||
@ -312,21 +312,21 @@ WhatsApp та ідентифікаторів.
|
||||
- `<media:document>`
|
||||
- `<media:sticker>`
|
||||
|
||||
Авторизовані групові голосові нотатки транскрибуються перед шлюзом згадки, коли
|
||||
тіло містить лише `<media:audio>`, тому промовляння згадки бота в голосовій нотатці може
|
||||
запустити відповідь. Якщо транскрипт усе ще не згадує бота,
|
||||
транскрипт зберігається в очікуваній історії групи замість сирого плейсхолдера.
|
||||
Авторизовані групові голосові нотатки транскрибуються перед перевіркою згадки, коли
|
||||
тіло містить лише `<media:audio>`, тож промовлена згадка бота в голосовій нотатці може
|
||||
запустити відповідь. Якщо транскрипт усе одно не згадує бота, він
|
||||
зберігається в очікуваній історії групи замість сирого плейсхолдера.
|
||||
|
||||
Тіла локацій використовують стислий текст координат. Мітки/коментарі локацій і деталі контакту/vCard відображаються як fenced недовірені метадані, а не як inline-текст prompt.
|
||||
Тіла місцезнаходження використовують стислий текст координат. Мітки/коментарі місцезнаходження та дані контакту/vCard відтворюються як fenced ненадійні метадані, а не як вбудований текст промпта.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Вставлення очікуваної історії групи">
|
||||
Для груп необроблені повідомлення можуть буферизуватися й вставлятися як контекст, коли бот зрештою запускається.
|
||||
Для груп необроблені повідомлення можуть буферизуватися та вставлятися як контекст, коли бот нарешті запускається.
|
||||
|
||||
- типове обмеження: `50`
|
||||
- типовий ліміт: `50`
|
||||
- конфігурація: `channels.whatsapp.historyLimit`
|
||||
- резерв: `messages.groupChat.historyLimit`
|
||||
- резервний варіант: `messages.groupChat.historyLimit`
|
||||
- `0` вимикає
|
||||
|
||||
Маркери вставлення:
|
||||
@ -337,7 +337,7 @@ WhatsApp та ідентифікаторів.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Сповіщення про прочитання">
|
||||
Сповіщення про прочитання типово ввімкнені для прийнятих вхідних повідомлень WhatsApp.
|
||||
Сповіщення про прочитання ввімкнені за замовчуванням для прийнятих вхідних повідомлень WhatsApp.
|
||||
|
||||
Вимкнути глобально:
|
||||
|
||||
@ -351,7 +351,7 @@ WhatsApp та ідентифікаторів.
|
||||
}
|
||||
```
|
||||
|
||||
Перевизначення для облікового запису:
|
||||
Перевизначення для окремого облікового запису:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -367,56 +367,56 @@ WhatsApp та ідентифікаторів.
|
||||
}
|
||||
```
|
||||
|
||||
Ходи self-chat пропускають сповіщення про прочитання, навіть коли вони глобально ввімкнені.
|
||||
Ходи чату із собою пропускають сповіщення про прочитання, навіть коли вони ввімкнені глобально.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Доставлення, поділ на фрагменти та медіа
|
||||
## Доставка, поділ на фрагменти та медіа
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Поділ тексту на фрагменти">
|
||||
- типове обмеження фрагмента: `channels.whatsapp.textChunkLimit = 4000`
|
||||
- типовий ліміт фрагмента: `channels.whatsapp.textChunkLimit = 4000`
|
||||
- `channels.whatsapp.chunkMode = "length" | "newline"`
|
||||
- режим `newline` віддає перевагу межам абзаців (порожнім рядкам), потім переходить до безпечного за довжиною поділу
|
||||
- режим `newline` віддає перевагу межам абзаців (порожнім рядкам), а потім повертається до безпечного за довжиною поділу на фрагменти
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Outbound media behavior">
|
||||
- підтримує зображення, відео, аудіо (голосову нотатку PTT) і document payloads
|
||||
- аудіомедіа надсилається через Baileys `audio` payload з `ptt: true`, тому клієнти WhatsApp відображають його як голосову нотатку push-to-talk
|
||||
- reply payloads зберігають `audioAsVoice`; вивід голосової нотатки TTS для WhatsApp залишається на цьому шляху PTT, навіть коли provider повертає MP3 або WebM
|
||||
<Accordion title="Поведінка вихідних медіа">
|
||||
- підтримує зображення, відео, аудіо (голосову нотатку PTT) і документи
|
||||
- аудіомедіа надсилаються через payload Baileys `audio` з `ptt: true`, тому клієнти WhatsApp відображають їх як голосову нотатку push-to-talk
|
||||
- payload відповідей зберігає `audioAsVoice`; вихід голосових нотаток TTS для WhatsApp лишається на цьому шляху PTT, навіть коли провайдер повертає MP3 або WebM
|
||||
- нативне аудіо Ogg/Opus надсилається як `audio/ogg; codecs=opus` для сумісності з голосовими нотатками
|
||||
- аудіо не у форматі Ogg, зокрема вивід Microsoft Edge TTS MP3/WebM, перекодовується за допомогою `ffmpeg` у моно Ogg/Opus 48 кГц перед доставкою PTT
|
||||
- `/tts latest` надсилає останню відповідь асистента як одну голосову нотатку та пригнічує повторні надсилання для тієї самої відповіді; `/tts chat on|off|default` керує auto-TTS для поточного чату WhatsApp
|
||||
- аудіо не в Ogg, зокрема вихід Microsoft Edge TTS MP3/WebM, транскодується за допомогою `ffmpeg` у моно Ogg/Opus 48 кГц перед доставкою PTT
|
||||
- `/tts latest` надсилає останню відповідь асистента як одну голосову нотатку й запобігає повторному надсиланню тієї самої відповіді; `/tts chat on|off|default` керує автоматичним TTS для поточного чату WhatsApp
|
||||
- відтворення анімованих GIF підтримується через `gifPlayback: true` під час надсилання відео
|
||||
- captions застосовуються до першого медіаелемента під час надсилання multi-media reply payloads, окрім голосових нотаток PTT: вони надсилають аудіо першим, а видимий текст окремо, бо клієнти WhatsApp не відображають captions голосових нотаток стабільно
|
||||
- підписи застосовуються до першого медіаелемента під час надсилання payload відповідей із кількома медіа, але голосові нотатки PTT надсилають спочатку аудіо, а видимий текст окремо, оскільки клієнти WhatsApp не відображають підписи голосових нотаток стабільно
|
||||
- джерелом медіа може бути HTTP(S), `file://` або локальні шляхи
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Media size limits and fallback behavior">
|
||||
- обмеження збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
|
||||
- обмеження надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
|
||||
- перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts.<accountId>.mediaMaxMb`
|
||||
- зображення автоматично оптимізуються (зміна розміру/підбір якості), щоб уміститися в обмеження
|
||||
<Accordion title="Обмеження розміру медіа та поведінка fallback">
|
||||
- ліміт збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (за замовчуванням `50`)
|
||||
- ліміт надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (за замовчуванням `50`)
|
||||
- перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts.<accountId>.mediaMaxMb`
|
||||
- зображення автоматично оптимізуються (зміна розміру/перебирання якості), щоб укластися в ліміти
|
||||
- у разі помилки надсилання медіа fallback для першого елемента надсилає текстове попередження замість тихого відкидання відповіді
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Цитування відповіді
|
||||
## Цитування відповідей
|
||||
|
||||
WhatsApp підтримує нативне цитування відповідей, коли вихідні відповіді видимо цитують вхідне повідомлення. Керуйте цим за допомогою `channels.whatsapp.replyToMode`.
|
||||
WhatsApp підтримує нативне цитування відповідей, коли вихідні відповіді видимо цитують вхідне повідомлення. Керуйте ним за допомогою `channels.whatsapp.replyToMode`.
|
||||
|
||||
| Значення | Поведінка |
|
||||
| ----------- | --------------------------------------------------------------------- |
|
||||
| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення |
|
||||
| `"first"` | Цитувати лише перший фрагмент вихідної відповіді |
|
||||
| `"all"` | Цитувати кожен фрагмент вихідної відповіді |
|
||||
| `"batched"` | Цитувати поставлені в чергу batched replies, залишаючи негайні відповіді без цитування |
|
||||
| `"batched"` | Цитувати відповіді в черзі, залишаючи негайні відповіді без цитування |
|
||||
|
||||
Типове значення — `"off"`. Перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts.<id>.replyToMode`.
|
||||
За замовчуванням `"off"`. Перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts.<id>.replyToMode`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -430,18 +430,18 @@ WhatsApp підтримує нативне цитування відповіде
|
||||
|
||||
## Рівень реакцій
|
||||
|
||||
`channels.whatsapp.reactionLevel` керує тим, наскільки широко агент використовує emoji reactions у WhatsApp:
|
||||
`channels.whatsapp.reactionLevel` керує тим, наскільки широко агент використовує емодзі-реакції у WhatsApp:
|
||||
|
||||
| Рівень | Ack reactions | Реакції, ініційовані агентом | Опис |
|
||||
| ------------- | ------------- | ---------------------------- | ------------------------------------------------ |
|
||||
| `"off"` | Ні | Ні | Жодних реакцій |
|
||||
| `"ack"` | Так | Ні | Лише ack reactions (підтвердження перед відповіддю) |
|
||||
| `"minimal"` | Так | Так (консервативно) | Ack + реакції агента з консервативними настановами |
|
||||
| `"extensive"` | Так | Так (заохочується) | Ack + реакції агента із заохочувальними настановами |
|
||||
| Рівень | Ack-реакції | Реакції, ініційовані агентом | Опис |
|
||||
| ------------- | ----------- | ---------------------------- | ------------------------------------------------ |
|
||||
| `"off"` | Ні | Ні | Жодних реакцій |
|
||||
| `"ack"` | Так | Ні | Лише Ack-реакції (підтвердження перед відповіддю) |
|
||||
| `"minimal"` | Так | Так (обережно) | Ack + реакції агента з обережними вказівками |
|
||||
| `"extensive"` | Так | Так (заохочується) | Ack + реакції агента із заохочувальними вказівками |
|
||||
|
||||
Типово: `"minimal"`.
|
||||
За замовчуванням: `"minimal"`.
|
||||
|
||||
Перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts.<id>.reactionLevel`.
|
||||
Перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts.<id>.reactionLevel`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -455,8 +455,8 @@ WhatsApp підтримує нативне цитування відповіде
|
||||
|
||||
## Реакції підтвердження
|
||||
|
||||
WhatsApp підтримує негайні ack reactions після отримання вхідного повідомлення через `channels.whatsapp.ackReaction`.
|
||||
Ack reactions обмежуються `reactionLevel` — вони пригнічуються, коли `reactionLevel` має значення `"off"`.
|
||||
WhatsApp підтримує негайні Ack-реакції під час отримання вхідного повідомлення через `channels.whatsapp.ackReaction`.
|
||||
Ack-реакції обмежуються `reactionLevel` — вони пригнічуються, коли `reactionLevel` має значення `"off"`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -474,32 +474,32 @@ Ack reactions обмежуються `reactionLevel` — вони пригніч
|
||||
|
||||
Нотатки щодо поведінки:
|
||||
|
||||
- надсилається негайно після прийняття вхідного повідомлення (перед відповіддю)
|
||||
- помилки журналюються, але не блокують звичайну доставку відповіді
|
||||
- режим групи `mentions` реагує на звернення, запущені згадкою; активація групи `always` працює як обхід цієї перевірки
|
||||
- WhatsApp використовує `channels.whatsapp.ackReaction` (legacy `messages.ackReaction` тут не використовується)
|
||||
- надсилаються негайно після прийняття вхідного повідомлення (перед відповіддю)
|
||||
- помилки записуються в журнал, але не блокують звичайну доставку відповіді
|
||||
- режим групи `mentions` реагує на звернення, спричинені згадкою; активація групи `always` діє як обхід цієї перевірки
|
||||
- WhatsApp використовує `channels.whatsapp.ackReaction` (застарілий `messages.ackReaction` тут не використовується)
|
||||
|
||||
## Кілька облікових записів і облікові дані
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Account selection and defaults">
|
||||
- ідентифікатори облікових записів походять із `channels.whatsapp.accounts`
|
||||
- типовий вибір облікового запису: `default`, якщо він є, інакше перший налаштований ідентифікатор облікового запису (відсортовано)
|
||||
- ідентифікатори облікових записів внутрішньо нормалізуються для пошуку
|
||||
<Accordion title="Вибір облікового запису та значення за замовчуванням">
|
||||
- ідентифікатори облікових записів беруться з `channels.whatsapp.accounts`
|
||||
- вибір облікового запису за замовчуванням: `default`, якщо він присутній, інакше перший налаштований ідентифікатор облікового запису (відсортований)
|
||||
- ідентифікатори облікових записів нормалізуються внутрішньо для пошуку
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Credential paths and legacy compatibility">
|
||||
<Accordion title="Шляхи облікових даних і сумісність зі старими версіями">
|
||||
- поточний шлях автентифікації: `~/.openclaw/credentials/whatsapp/<accountId>/creds.json`
|
||||
- файл резервної копії: `creds.json.bak`
|
||||
- legacy default auth у `~/.openclaw/credentials/` досі розпізнається/мігрується для потоків default-account
|
||||
- застаріла автентифікація за замовчуванням у `~/.openclaw/credentials/` досі розпізнається/мігрується для потоків облікового запису за замовчуванням
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Logout behavior">
|
||||
`openclaw channels logout --channel whatsapp [--account <id>]` очищує стан автентифікації WhatsApp для цього облікового запису.
|
||||
<Accordion title="Поведінка виходу">
|
||||
`openclaw channels logout --channel whatsapp [--account <id>]` очищає стан автентифікації WhatsApp для цього облікового запису.
|
||||
|
||||
У legacy auth directories `oauth.json` зберігається, а auth-файли Baileys видаляються.
|
||||
У застарілих каталогах автентифікації `oauth.json` зберігається, тоді як файли автентифікації Baileys видаляються.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
@ -510,12 +510,12 @@ Ack reactions обмежуються `reactionLevel` — вони пригніч
|
||||
- Обмеження дій:
|
||||
- `channels.whatsapp.actions.reactions`
|
||||
- `channels.whatsapp.actions.polls`
|
||||
- Записи конфігурації, ініційовані каналом, увімкнені типово (вимкнути через `channels.whatsapp.configWrites=false`).
|
||||
- Записи конфігурації, ініційовані каналом, увімкнені за замовчуванням (вимкнення через `channels.whatsapp.configWrites=false`).
|
||||
|
||||
## Усунення несправностей
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Not linked (QR required)">
|
||||
<Accordion title="Не прив’язано (потрібен QR)">
|
||||
Симптом: стан каналу повідомляє, що його не прив’язано.
|
||||
|
||||
Виправлення:
|
||||
@ -527,16 +527,16 @@ Ack reactions обмежуються `reactionLevel` — вони пригніч
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Linked but disconnected / reconnect loop">
|
||||
<Accordion title="Прив’язано, але від’єднано / цикл повторного підключення">
|
||||
Симптом: прив’язаний обліковий запис із повторними від’єднаннями або спробами повторного підключення.
|
||||
|
||||
Тихі облікові записи можуть залишатися підключеними довше за звичайний таймаут повідомлень; watchdog
|
||||
перезапускається, коли активність транспорту WhatsApp Web зупиняється, socket закривається або
|
||||
активність на рівні застосунку залишається тихою довше за довше захисне вікно.
|
||||
Тихі облікові записи можуть залишатися підключеними після звичайного таймауту повідомлень; watchdog
|
||||
перезапускається, коли транспортна активність WhatsApp Web зупиняється, сокет закривається або
|
||||
активність на рівні застосунку лишається бездіяльною довше за подовжене безпечне вікно.
|
||||
|
||||
Якщо журнали показують повторюване `status=408 Request Time-out Connection was lost`, налаштуйте
|
||||
таймінги socket Baileys у `web.whatsapp`. Почніть зі скорочення
|
||||
`keepAliveIntervalMs` нижче за idle timeout вашої мережі та збільшення
|
||||
таймінги сокета Baileys у `web.whatsapp`. Почніть зі скорочення
|
||||
`keepAliveIntervalMs` нижче таймауту простою вашої мережі та збільшення
|
||||
`connectTimeoutMs` на повільних або нестабільних з’єднаннях:
|
||||
|
||||
```json5
|
||||
@ -558,70 +558,79 @@ Ack reactions обмежуються `reactionLevel` — вони пригніч
|
||||
openclaw logs --follow
|
||||
```
|
||||
|
||||
За потреби повторно прив’яжіть за допомогою `channels login`.
|
||||
За потреби повторно прив’яжіть через `channels login`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="QR login times out behind a proxy">
|
||||
Симптом: `openclaw channels login --channel whatsapp` завершується помилкою до показу придатного QR-коду з `status=408 Request Time-out` або від’єднанням TLS socket.
|
||||
<Accordion title="Вхід за QR спливає за проксі">
|
||||
Симптом: `openclaw channels login --channel whatsapp` завершується помилкою до показу придатного QR-коду з `status=408 Request Time-out` або розривом TLS-сокета.
|
||||
|
||||
Вхід у WhatsApp Web використовує стандартне proxy-середовище Gateway-хоста (`HTTPS_PROXY`, `HTTP_PROXY`, варіанти в нижньому регістрі та `NO_PROXY`). Перевірте, що процес Gateway успадковує proxy env і що `NO_PROXY` не збігається з `mmg.whatsapp.net`.
|
||||
Вхід у WhatsApp Web використовує стандартне проксі-середовище хоста gateway (`HTTPS_PROXY`, `HTTP_PROXY`, варіанти в нижньому регістрі та `NO_PROXY`). Переконайтеся, що процес gateway успадковує env проксі та що `NO_PROXY` не збігається з `mmg.whatsapp.net`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="No active listener when sending">
|
||||
Вихідні надсилання швидко завершуються помилкою, коли для цільового облікового запису немає активного listener Gateway.
|
||||
<Accordion title="Немає активного слухача під час надсилання">
|
||||
Вихідне надсилання швидко завершується помилкою, коли для цільового облікового запису немає активного слухача gateway.
|
||||
|
||||
Переконайтеся, що Gateway запущено, а обліковий запис прив’язано.
|
||||
Переконайтеся, що gateway запущено й обліковий запис прив’язано.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Group messages unexpectedly ignored">
|
||||
<Accordion title="Відповідь з’являється в транскрипті, але не у WhatsApp">
|
||||
Рядки транскрипту записують те, що згенерував агент. Доставка WhatsApp перевіряється окремо: OpenClaw вважає автоматичну відповідь надісланою лише після того, як Baileys повертає ідентифікатор вихідного повідомлення принаймні для одного видимого тексту або медіанадсилання.
|
||||
|
||||
Ack-реакції є незалежними підтвердженнями перед відповіддю. Успішна реакція не доводить, що пізнішу текстову або медіавідповідь було прийнято WhatsApp.
|
||||
|
||||
Перевірте журнали gateway на `auto-reply delivery failed` або `auto-reply was not accepted by WhatsApp provider`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Повідомлення групи неочікувано ігноруються">
|
||||
Перевіряйте в такому порядку:
|
||||
|
||||
- `groupPolicy`
|
||||
- `groupAllowFrom` / `allowFrom`
|
||||
- записи allowlist у `groups`
|
||||
- mention gating (`requireMention` + mention patterns)
|
||||
- дубльовані ключі в `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тому тримайте один `groupPolicy` на scope
|
||||
- обмеження згадками (`requireMention` + шаблони згадок)
|
||||
- дублікати ключів у `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тому тримайте один `groupPolicy` для кожної області
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Bun runtime warning">
|
||||
Runtime Gateway для WhatsApp має використовувати Node. Bun позначено як несумісний для стабільної роботи Gateway WhatsApp/Telegram.
|
||||
<Accordion title="Попередження середовища виконання Bun">
|
||||
Середовище виконання gateway WhatsApp має використовувати Node. Bun позначено як несумісний для стабільної роботи gateway WhatsApp/Telegram.
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Системні prompts
|
||||
## Системні промпти
|
||||
|
||||
WhatsApp підтримує системні prompts у стилі Telegram для груп і прямих чатів через maps `groups` і `direct`.
|
||||
WhatsApp підтримує системні промпти в стилі Telegram для груп і прямих чатів через мапи `groups` і `direct`.
|
||||
|
||||
Ієрархія розв’язання для групових повідомлень:
|
||||
Ієрархія вирішення для групових повідомлень:
|
||||
|
||||
Ефективний map `groups` визначається першим: якщо обліковий запис визначає власний `groups`, він повністю замінює кореневий map `groups` (без deep merge). Потім пошук prompt виконується в отриманому єдиному map:
|
||||
Ефективна мапа `groups` визначається першою: якщо обліковий запис визначає власну `groups`, вона повністю замінює кореневу мапу `groups` (без глибокого злиття). Потім пошук промпта виконується на отриманій єдиній мапі:
|
||||
|
||||
1. **Системний prompt для конкретної групи** (`groups["<groupId>"].systemPrompt`): використовується, коли конкретний запис групи існує в map **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується і системний prompt не застосовується.
|
||||
2. **Wildcard системний prompt групи** (`groups["*"].systemPrompt`): використовується, коли конкретний запис групи повністю відсутній у map або коли він існує, але не визначає ключ `systemPrompt`.
|
||||
1. **Системний промпт для конкретної групи** (`groups["<groupId>"].systemPrompt`): використовується, коли конкретний запис групи існує в мапі **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується й системний промпт не застосовується.
|
||||
2. **Системний промпт wildcard для групи** (`groups["*"].systemPrompt`): використовується, коли конкретного запису групи в мапі взагалі немає або коли він існує, але не визначає ключ `systemPrompt`.
|
||||
|
||||
Ієрархія розв’язання для прямих повідомлень:
|
||||
Ієрархія вирішення для прямих повідомлень:
|
||||
|
||||
Ефективний map `direct` визначається першим: якщо обліковий запис визначає власний `direct`, він повністю замінює кореневий map `direct` (без deep merge). Потім пошук prompt виконується в отриманому єдиному map:
|
||||
Ефективна мапа `direct` визначається першою: якщо обліковий запис визначає власну `direct`, вона повністю замінює кореневу мапу `direct` (без глибокого злиття). Потім пошук промпта виконується на отриманій єдиній мапі:
|
||||
|
||||
1. **Системний prompt для конкретного direct** (`direct["<peerId>"].systemPrompt`): використовується, коли конкретний запис peer існує в map **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується і системний prompt не застосовується.
|
||||
2. **Wildcard системний prompt direct** (`direct["*"].systemPrompt`): використовується, коли конкретний запис peer повністю відсутній у map або коли він існує, але не визначає ключ `systemPrompt`.
|
||||
1. **Системний промпт для конкретного прямого чату** (`direct["<peerId>"].systemPrompt`): використовується, коли конкретний запис peer існує в мапі **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується й системний промпт не застосовується.
|
||||
2. **Системний промпт wildcard для прямих чатів** (`direct["*"].systemPrompt`): використовується, коли конкретного запису peer у мапі взагалі немає або коли він існує, але не визначає ключ `systemPrompt`.
|
||||
|
||||
<Note>
|
||||
`dms` залишається легким bucket перевизначення історії для окремих DM (`dms.<id>.historyLimit`). Перевизначення prompt живуть у `direct`.
|
||||
`dms` лишається легким bucket перевизначення історії для окремих DM (`dms.<id>.historyLimit`). Перевизначення промптів розміщуються в `direct`.
|
||||
</Note>
|
||||
|
||||
**Відмінність від поведінки кількох облікових записів у Telegram:** У Telegram кореневий `groups` навмисно пригнічується для всіх облікових записів у конфігурації з кількома обліковими записами — навіть для облікових записів, які не визначають власний `groups`, — щоб не дати боту отримувати групові повідомлення для груп, до яких він не належить. WhatsApp не застосовує цей захист: кореневі `groups` і `direct` завжди успадковуються обліковими записами, які не визначають перевизначення на рівні облікового запису, незалежно від кількості налаштованих облікових записів. У конфігурації WhatsApp з кількома обліковими записами, якщо вам потрібні групові або direct prompts для кожного облікового запису, явно визначте повний map під кожним обліковим записом замість покладання на root-level defaults.
|
||||
**Відмінність від поведінки кількох облікових записів Telegram:** У Telegram коренева `groups` навмисно пригнічується для всіх облікових записів у конфігурації з кількома обліковими записами — навіть для облікових записів, які не визначають власної `groups`, — щоб запобігти отриманню ботом групових повідомлень для груп, до яких він не належить. WhatsApp не застосовує цей запобіжник: кореневі `groups` і коренева `direct` завжди успадковуються обліковими записами, які не визначають перевизначення на рівні облікового запису, незалежно від кількості налаштованих облікових записів. У конфігурації WhatsApp з кількома обліковими записами, якщо вам потрібні промпти для груп або прямих чатів на рівні окремого облікового запису, явно визначте повну мапу в кожному обліковому записі, а не покладайтеся на кореневі значення за замовчуванням.
|
||||
|
||||
Важлива поведінка:
|
||||
|
||||
- `channels.whatsapp.groups` є водночас map конфігурації для окремих груп і allowlist груп на рівні чату. На кореневому scope або scope облікового запису `groups["*"]` означає "усі групи допускаються" для цього scope.
|
||||
- Додавайте wildcard group `systemPrompt` лише тоді, коли ви вже хочете, щоб цей scope допускав усі групи. Якщо ви все ще хочете, щоб лише фіксований набір group IDs був придатним, не використовуйте `groups["*"]` для prompt default. Натомість повторіть prompt у кожному явно внесеному до allowlist записі групи.
|
||||
- Допуск групи й авторизація відправника — це окремі перевірки. `groups["*"]` розширює набір груп, які можуть потрапити до group handling, але сам собою не авторизує кожного відправника в цих групах. Доступ відправника все ще окремо контролюється `channels.whatsapp.groupPolicy` і `channels.whatsapp.groupAllowFrom`.
|
||||
- `channels.whatsapp.direct` не має такого самого побічного ефекту для DM. `direct["*"]` лише надає типову конфігурацію direct-chat після того, як DM вже допущено правилами `dmPolicy` плюс `allowFrom` або pairing-store.
|
||||
- `channels.whatsapp.groups` є одночасно картою конфігурації для окремих груп і списком дозволених груп на рівні чату. На рівні кореня або акаунта `groups["*"]` означає, що "усі групи допускаються" для цієї області.
|
||||
- Додавайте груповий wildcard `systemPrompt` лише тоді, коли ви вже хочете, щоб ця область допускала всі групи. Якщо ви й надалі хочете, щоб допустимим був лише фіксований набір ID груп, не використовуйте `groups["*"]` для типового промпта. Натомість повторіть промпт у кожному явно дозволеному записі групи.
|
||||
- Допуск групи та авторизація відправника є окремими перевірками. `groups["*"]` розширює набір груп, які можуть перейти до обробки груп, але сам собою не авторизує кожного відправника в цих групах. Доступ відправників і надалі окремо контролюється через `channels.whatsapp.groupPolicy` і `channels.whatsapp.groupAllowFrom`.
|
||||
- `channels.whatsapp.direct` не має такого самого побічного ефекту для приватних повідомлень. `direct["*"]` лише надає типову конфігурацію прямого чату після того, як приватне повідомлення вже допущено через `dmPolicy` разом із правилами `allowFrom` або сховища сполучення.
|
||||
|
||||
Приклад:
|
||||
|
||||
@ -663,20 +672,20 @@ WhatsApp підтримує системні prompts у стилі Telegram дл
|
||||
}
|
||||
```
|
||||
|
||||
## Посилання на довідник конфігурації
|
||||
## Вказівники довідника конфігурації
|
||||
|
||||
Основний довідник:
|
||||
|
||||
- [Довідник конфігурації - WhatsApp](/uk/gateway/config-channels#whatsapp)
|
||||
|
||||
Ключові поля WhatsApp:
|
||||
Високосигнальні поля WhatsApp:
|
||||
|
||||
- доступ: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`
|
||||
- доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `sendReadReceipts`, `ackReaction`, `reactionLevel`
|
||||
- кілька облікових записів: `accounts.<id>.enabled`, `accounts.<id>.authDir`, перевизначення на рівні облікового запису
|
||||
- кілька акаунтів: `accounts.<id>.enabled`, `accounts.<id>.authDir`, перевизначення на рівні акаунта
|
||||
- операції: `configWrites`, `debounceMs`, `web.enabled`, `web.heartbeatSeconds`, `web.reconnect.*`, `web.whatsapp.*`
|
||||
- поведінка сеансу: `session.dmScope`, `historyLimit`, `dmHistoryLimit`, `dms.<id>.historyLimit`
|
||||
- підказки: `groups.<id>.systemPrompt`, `groups["*"].systemPrompt`, `direct.<id>.systemPrompt`, `direct["*"].systemPrompt`
|
||||
- поведінка сесії: `session.dmScope`, `historyLimit`, `dmHistoryLimit`, `dms.<id>.historyLimit`
|
||||
- промпти: `groups.<id>.systemPrompt`, `groups["*"].systemPrompt`, `direct.<id>.systemPrompt`, `direct["*"].systemPrompt`
|
||||
|
||||
## Пов’язане
|
||||
|
||||
@ -684,5 +693,5 @@ WhatsApp підтримує системні prompts у стилі Telegram дл
|
||||
- [Групи](/uk/channels/groups)
|
||||
- [Безпека](/uk/gateway/security)
|
||||
- [Маршрутизація каналів](/uk/channels/channel-routing)
|
||||
- [Маршрутизація кількох агентів](/uk/concepts/multi-agent)
|
||||
- [Маршрутизація між кількома агентами](/uk/concepts/multi-agent)
|
||||
- [Усунення несправностей](/uk/channels/troubleshooting)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user