diff --git a/docs/uk/channels/groups.md b/docs/uk/channels/groups.md index 0528d8af5..5e3c08152 100644 --- a/docs/uk/channels/groups.md +++ b/docs/uk/channels/groups.md @@ -1,20 +1,20 @@ --- read_when: - - Зміна поведінки групового чату або керування згадуваннями + - Зміна поведінки групового чату або керування згадками summary: Поведінка групового чату на різних поверхнях (Discord/iMessage/Matrix/Microsoft Teams/Signal/Slack/Telegram/WhatsApp/Zalo) title: Групи x-i18n: - generated_at: "2026-04-20T18:29:28Z" + generated_at: "2026-04-21T23:42:05Z" model: gpt-5.4 provider: openai - source_hash: bbcdebd340a2ebb5898fe1eaf52258f65ba434bcf3be010d81b0e74af728aad4 + source_hash: a86e202c7e990e040eb092aaef46bc856ee8d39b2e5fe1c733e24f1b35faa824 source_path: channels/groups.md workflow: 15 --- # Групи -OpenClaw однаково обробляє групові чати на різних поверхнях: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo. +OpenClaw узгоджено обробляє групові чати на різних поверхнях: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo. ## Вступ для початківців (2 хвилини) @@ -24,57 +24,57 @@ OpenClaw «живе» у ваших власних облікових запис Поведінка за замовчуванням: - Групи обмежені (`groupPolicy: "allowlist"`). -- Для відповідей потрібне згадування, якщо ви явно не вимкнете керування згадуваннями. +- Для відповідей потрібна згадка, якщо ви явно не вимкнули керування згадками. -Переклад: відправники з allowlist можуть активувати OpenClaw, згадавши його. +Переклад простою мовою: відправники з allowlist можуть активувати OpenClaw, згадавши його. -> Коротко +> TL;DR > > - **Доступ до DM** контролюється через `*.allowFrom`. -> - **Доступ до груп** контролюється через `*.groupPolicy` + allowlist (`*.groups`, `*.groupAllowFrom`). -> - **Запуск відповіді** контролюється керуванням згадуваннями (`requireMention`, `/activation`). +> - **Доступ до груп** контролюється через `*.groupPolicy` + allowlist-и (`*.groups`, `*.groupAllowFrom`). +> - **Запуск відповіді** контролюється через керування згадками (`requireMention`, `/activation`). -Швидкий сценарій (що відбувається з повідомленням у групі): +Швидка схема (що відбувається з повідомленням у групі): ``` -groupPolicy? disabled -> відхилити -groupPolicy? allowlist -> групу дозволено? ні -> відхилити -requireMention? yes -> згадано? ні -> зберегти лише для контексту -інакше -> відповісти +groupPolicy? disabled -> drop +groupPolicy? allowlist -> group allowed? no -> drop +requireMention? yes -> mentioned? no -> store for context only +otherwise -> reply ``` -## Видимість контексту та allowlist +## Видимість контексту та allowlist-и -У безпеці груп беруть участь два різні механізми керування: +У безпеці груп беруть участь два різні механізми контролю: -- **Авторизація запуску**: хто може активувати агента (`groupPolicy`, `groups`, `groupAllowFrom`, allowlist, специфічні для каналу). -- **Видимість контексту**: який додатковий контекст передається в модель (текст відповіді, цитати, історія гілки, метадані пересилання). +- **Авторизація запуску**: хто може активувати агента (`groupPolicy`, `groups`, `groupAllowFrom`, allowlist-и, специфічні для каналу). +- **Видимість контексту**: який додатковий контекст передається в модель (текст відповіді, цитати, історія треду, метадані пересилання). -За замовчуванням OpenClaw надає пріоритет звичайній поведінці чату й здебільшого зберігає контекст у тому вигляді, у якому його отримано. Це означає, що allowlist переважно визначають, хто може запускати дії, а не є універсальною межею редагування для кожного процитованого або історичного фрагмента. +За замовчуванням OpenClaw надає пріоритет звичайній поведінці чату й переважно зберігає контекст у тому вигляді, у якому він надійшов. Це означає, що allowlist-и насамперед визначають, хто може запускати дії, а не є універсальною межею редагування для кожного процитованого чи історичного фрагмента. Поточна поведінка залежить від каналу: -- Деякі канали вже застосовують фільтрацію відправників для додаткового контексту в окремих шляхах (наприклад, ініціалізація гілок Slack, пошук відповідей/гілок у Matrix). -- Інші канали все ще передають контекст цитат/відповідей/пересилань у тому вигляді, у якому він отриманий. +- У деяких каналах уже застосовується фільтрація за відправником для додаткового контексту в окремих шляхах (наприклад, ініціалізація тредів Slack, пошук відповідей/тредів у Matrix). +- Інші канали все ще передають контекст цитат/відповідей/пересилань у тому вигляді, у якому його отримано. -Напрям посилення захисту (заплановано): +Напрямок посилення захисту (заплановано): - `contextVisibility: "all"` (за замовчуванням) зберігає поточну поведінку «як отримано». - `contextVisibility: "allowlist"` фільтрує додатковий контекст до відправників з allowlist. - `contextVisibility: "allowlist_quote"` — це `allowlist` плюс один явний виняток для цитати/відповіді. -Поки цю модель посилення захисту не буде однаково реалізовано в усіх каналах, очікуйте відмінностей залежно від поверхні. +Поки цю модель посилення захисту не реалізовано узгоджено в усіх каналах, очікуйте відмінностей залежно від поверхні. ![Потік групових повідомлень](/images/groups-flow.svg) Якщо ви хочете... -| Мета | Що налаштувати | +| Ціль | Що встановити | | -------------------------------------------- | ---------------------------------------------------------- | -| Дозволити всі групи, але відповідати лише на @згадки | `groups: { "*": { requireMention: true } }` | -| Вимкнути всі відповіді в групах | `groupPolicy: "disabled"` | +| Дозволити всі групи, але відповідати лише на @mentions | `groups: { "*": { requireMention: true } }` | +| Вимкнути всі групові відповіді | `groupPolicy: "disabled"` | | Лише певні групи | `groups: { "": { ... } }` (без ключа `"*"`) | -| Лише ви можете запускати відповіді в групах | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` | +| Лише ви можете активувати відповіді в групах | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` | ## Ключі сесій @@ -87,18 +87,18 @@ requireMention? yes -> згадано? ні -> зберегти лише для ## Шаблон: особисті DM + публічні групи (один агент) -Так — це добре працює, якщо ваш «особистий» трафік — це **DM**, а «публічний» трафік — це **групи**. +Так — це добре працює, якщо ваш «особистий» трафік — це **DM**, а ваш «публічний» трафік — це **групи**. -Чому: у режимі одного агента DM зазвичай потрапляють до ключа **основної** сесії (`agent:main:main`), тоді як групи завжди використовують ключі **неосновних** сесій (`agent:main::group:`). Якщо ви ввімкнете ізоляцію через `mode: "non-main"`, ці групові сесії виконуватимуться у налаштованому бекенді sandbox, тоді як ваша основна DM-сесія залишиться на хості. Docker є бекендом за замовчуванням, якщо ви не виберете інший. +Чому: у режимі одного агента DM зазвичай потрапляють до **основного** ключа сесії (`agent:main:main`), тоді як групи завжди використовують **неосновні** ключі сесії (`agent:main::group:`). Якщо ввімкнути ізоляцію через `mode: "non-main"`, ці групові сесії працюватимуть у налаштованому backend ізоляції, а ваша основна DM-сесія залишиться на хості. Якщо ви не виберете backend явно, за замовчуванням використовується Docker. -Це дає вам один «мозок» агента (спільний робочий простір + пам’ять), але дві різні моделі виконання: +Це дає вам один «розум» агента (спільний робочий простір + пам’ять), але дві моделі виконання: - **DM**: повні інструменти (хост) -- **Групи**: sandbox + обмежені інструменти +- **Групи**: ізольоване середовище + обмежені інструменти -> Якщо вам потрібні справді окремі робочі простори/персони («особисте» й «публічне» ніколи не мають змішуватися), використайте другого агента + bindings. Див. [Багатоагентна маршрутизація](/uk/concepts/multi-agent). +> Якщо вам потрібні справді окремі робочі простори/персони («особисте» і «публічне» ніколи не мають змішуватися), використовуйте другого агента + bindings. Див. [Маршрутизація кількох агентів](/uk/concepts/multi-agent). -Приклад (DM на хості, групи в sandbox + лише інструменти для повідомлень): +Приклад (DM на хості, групи в sandbox + лише інструменти для обміну повідомленнями): ```json5 { @@ -123,7 +123,7 @@ requireMention? yes -> згадано? ні -> зберегти лише для } ``` -Хочете, щоб «групи могли бачити лише папку X» замість «без доступу до хоста»? Залиште `workspaceAccess: "none"` і змонтуйте в sandbox лише шляхи з allowlist: +Хочете, щоб «групи бачили лише теку X» замість «жодного доступу до хоста»? Залиште `workspaceAccess: "none"` і змонтуйте в sandbox лише шляхи з allowlist: ```json5 { @@ -145,20 +145,20 @@ requireMention? yes -> згадано? ні -> зберегти лише для } ``` -Пов’язане: +Пов’язано: - Ключі конфігурації та значення за замовчуванням: [Конфігурація Gateway](/uk/gateway/configuration-reference#agentsdefaultssandbox) - Налагодження причин блокування інструмента: [Sandbox vs Tool Policy vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated) -- Докладніше про bind mounts: [Sandboxing](/uk/gateway/sandboxing#custom-bind-mounts) +- Докладніше про bind mounts: [Ізоляція](/uk/gateway/sandboxing#custom-bind-mounts) ## Мітки відображення -- Мітки в UI використовують `displayName`, коли він доступний, у форматі `:`. +- Мітки інтерфейсу використовують `displayName`, коли воно доступне, у форматі `:`. - `#room` зарезервовано для кімнат/каналів; групові чати використовують `g-` (нижній регістр, пробіли -> `-`, зберігати `#@+._-`). ## Політика груп -Керуйте тим, як обробляються повідомлення в групах/кімнатах для кожного каналу: +Керує тим, як обробляються повідомлення груп/кімнат для кожного каналу: ```json5 { @@ -205,38 +205,38 @@ requireMention? yes -> згадано? ні -> зберегти лише для } ``` -| Політика | Поведінка | +| Policy | Поведінка | | ------------- | ------------------------------------------------------------ | -| `"open"` | Групи оминають allowlist; керування згадуваннями все ще діє. | -| `"disabled"` | Повністю блокувати всі групові повідомлення. | -| `"allowlist"` | Дозволяти лише групи/кімнати, що відповідають налаштованому allowlist. | +| `"open"` | Групи оминають allowlist-и; керування згадками все одно застосовується. | +| `"disabled"` | Повністю блокує всі групові повідомлення. | +| `"allowlist"` | Дозволяє лише групи/кімнати, які відповідають налаштованому allowlist. | Примітки: -- `groupPolicy` відокремлена від керування згадуваннями (яке вимагає @згадок). +- `groupPolicy` відокремлена від керування згадками (яке вимагає @mentions). - WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: використовуйте `groupAllowFrom` (резервний варіант: явний `allowFrom`). -- Підтвердження прив’язки DM (записи сховища `*-allowFrom`) застосовуються лише до доступу в DM; авторизація відправників у групах залишається явно прив’язаною до group allowlist. +- Схвалення парування для DM (записи сховища `*-allowFrom`) застосовуються лише до доступу DM; авторизація відправників у групах залишається явно прив’язаною до allowlist-ів груп. - Discord: allowlist використовує `channels.discord.guilds..channels`. - Slack: allowlist використовує `channels.slack.channels`. -- Matrix: allowlist використовує `channels.matrix.groups`. Віддавайте перевагу ID кімнат або aliases; пошук назв приєднаних кімнат виконується за принципом best-effort, а нерозв’язані назви ігноруються під час виконання. Використовуйте `channels.matrix.groupAllowFrom`, щоб обмежити відправників; також підтримуються allowlist `users` для окремих кімнат. -- Групові DM керуються окремо (`channels.discord.dm.*`, `channels.slack.dm.*`). -- Telegram allowlist може відповідати ID користувачів (`"123456789"`, `"telegram:123456789"`, `"tg:123456789"`) або іменам користувачів (`"@alice"` або `"alice"`); префікси нечутливі до регістру. -- За замовчуванням використовується `groupPolicy: "allowlist"`; якщо ваш group allowlist порожній, групові повідомлення блокуються. -- Безпека під час виконання: коли блок провайдера повністю відсутній (`channels.` відсутній), політика груп переходить у fail-closed режим (зазвичай `allowlist`) замість успадкування `channels.defaults.groupPolicy`. +- Matrix: allowlist використовує `channels.matrix.groups`. Надавайте перевагу ID кімнат або псевдонімам; пошук імен підключених кімнат виконується в режимі best-effort, а нерозв’язані імена ігноруються під час виконання. Використовуйте `channels.matrix.groupAllowFrom`, щоб обмежити відправників; також підтримуються allowlist-и `users` для окремих кімнат. +- Групові DM контролюються окремо (`channels.discord.dm.*`, `channels.slack.dm.*`). +- Telegram allowlist може збігатися з ID користувачів (`"123456789"`, `"telegram:123456789"`, `"tg:123456789"`) або іменами користувачів (`"@alice"` або `"alice"`); префікси нечутливі до регістру. +- Значення за замовчуванням — `groupPolicy: "allowlist"`; якщо ваш allowlist груп порожній, групові повідомлення блокуються. +- Безпека під час виконання: коли блок постачальника повністю відсутній (`channels.` відсутній), політика груп переходить у fail-closed режим (зазвичай `allowlist`) замість успадкування `channels.defaults.groupPolicy`. Швидка ментальна модель (порядок перевірки для групових повідомлень): 1. `groupPolicy` (open/disabled/allowlist) -2. group allowlist (`*.groups`, `*.groupAllowFrom`, allowlist, специфічний для каналу) -3. керування згадуваннями (`requireMention`, `/activation`) +2. allowlist-и груп (`*.groups`, `*.groupAllowFrom`, allowlist, специфічний для каналу) +3. керування згадками (`requireMention`, `/activation`) -## Керування згадуваннями (за замовчуванням) +## Керування згадками (за замовчуванням) -Групові повідомлення вимагають згадування, якщо це не перевизначено для конкретної групи. Значення за замовчуванням зберігаються для кожної підсистеми в `*.groups."*"`. +Для групових повідомлень потрібна згадка, якщо це не перевизначено для конкретної групи. Значення за замовчуванням задаються для кожної підсистеми в `*.groups."*"`. -Відповідь на повідомлення бота вважається неявним згадуванням, якщо канал -підтримує метадані відповіді. Цитування повідомлення бота також може вважатися неявним -згадуванням у каналах, які надають метадані цитати. Поточні вбудовані випадки включають +Відповідь на повідомлення бота вважається неявною згадкою, коли канал +підтримує метадані відповіді. Цитування повідомлення бота також може вважатися +неявною згадкою в каналах, які надають метадані цитати. Поточні вбудовані випадки включають Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser. ```json5 @@ -277,24 +277,24 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser. Примітки: -- `mentionPatterns` — це безпечні regex-патерни, нечутливі до регістру; недійсні патерни та небезпечні вкладені форми повторення ігноруються. -- Поверхні, які надають явні згадування, усе одно проходять; патерни є резервним варіантом. -- Перевизначення для агента: `agents.list[].groupChat.mentionPatterns` (корисно, коли кілька агентів використовують одну групу). -- Керування згадуваннями застосовується лише тоді, коли можливе виявлення згадування (вбудовані згадки або налаштовано `mentionPatterns`). -- Значення за замовчуванням для Discord зберігаються в `channels.discord.guilds."*"` (можна перевизначити для кожної guild/channel). -- Контекст історії групи однаково обгортається для всіх каналів і є **лише pending** (повідомлення, пропущені через керування згадуваннями); використовуйте `messages.groupChat.historyLimit` для глобального значення за замовчуванням і `channels..historyLimit` (або `channels..accounts.*.historyLimit`) для перевизначень. Встановіть `0`, щоб вимкнути. +- `mentionPatterns` — це безпечні regex-шаблони, нечутливі до регістру; некоректні шаблони та небезпечні форми з вкладеними повтореннями ігноруються. +- Поверхні, які надають явні згадки, все одно їх передають; шаблони — це резервний механізм. +- Перевизначення на рівні агента: `agents.list[].groupChat.mentionPatterns` (корисно, коли кілька агентів використовують одну групу). +- Керування згадками застосовується лише тоді, коли виявлення згадок можливе (налаштовані нативні згадки або `mentionPatterns`). +- Значення за замовчуванням для Discord містяться в `channels.discord.guilds."*"` (можна перевизначати для кожного guild/channel). +- Контекст історії груп рівномірно загортається в усіх каналах і є **лише pending** (повідомлення, пропущені через керування згадками); використовуйте `messages.groupChat.historyLimit` для глобального значення за замовчуванням і `channels..historyLimit` (або `channels..accounts.*.historyLimit`) для перевизначень. Встановіть `0`, щоб вимкнути. ## Обмеження інструментів для груп/каналів (необов’язково) -Деякі конфігурації каналів підтримують обмеження того, які інструменти доступні **всередині конкретної групи/кімнати/каналу**. +Деякі конфігурації каналів підтримують обмеження на те, які інструменти доступні **в межах конкретної групи/кімнати/каналу**. - `tools`: дозволити/заборонити інструменти для всієї групи. - `toolsBySender`: перевизначення для окремих відправників у межах групи. Використовуйте явні префікси ключів: `id:`, `e164:`, `username:`, `name:` і wildcard `"*"`. - Застарілі ключі без префікса все ще приймаються й зіставляються лише як `id:`. + Старі ключі без префікса все ще приймаються та зіставляються лише як `id:`. -Порядок розв’язання (найспецифічніший має пріоритет): +Порядок визначення (найбільш специфічний має пріоритет): 1. збіг `toolsBySender` для групи/каналу 2. `tools` для групи/каналу @@ -326,16 +326,16 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser. - Обмеження інструментів для груп/каналів застосовуються додатково до глобальної/агентської політики інструментів (заборона все одно має пріоритет). - Деякі канали використовують іншу вкладеність для кімнат/каналів (наприклад, Discord `guilds.*.channels.*`, Slack `channels.*`, Microsoft Teams `teams.*.channels.*`). -## Group allowlist +## Allowlist-и груп -Коли налаштовано `channels.whatsapp.groups`, `channels.telegram.groups` або `channels.imessage.groups`, ключі діють як group allowlist. Використовуйте `"*"` , щоб дозволити всі групи, водночас задавши стандартну поведінку згадувань. +Коли налаштовано `channels.whatsapp.groups`, `channels.telegram.groups` або `channels.imessage.groups`, ключі діють як allowlist груп. Використовуйте `"*"` щоб дозволити всі групи, водночас задавши поведінку згадок за замовчуванням. -Поширена плутанина: підтвердження прив’язки DM — це не те саме, що авторизація групи. -Для каналів, які підтримують прив’язку DM, сховище прив’язок відкриває лише DM. Команди в групах однаково вимагають явної авторизації відправника групи через allowlist у конфігурації, як-от `groupAllowFrom`, або задокументований резервний варіант конфігурації для цього каналу. +Поширена плутанина: схвалення парування DM — це не те саме, що авторизація груп. +Для каналів, які підтримують парування DM, сховище парування відкриває лише DM. Групові команди все одно потребують явної авторизації відправника групи з конфігураційних allowlist-ів, таких як `groupAllowFrom`, або задокументованого резервного варіанта конфігурації для цього каналу. -Поширені наміри (копіюйте/вставляйте): +Типові наміри (скопіювати/вставити): -1. Вимкнути всі відповіді в групах +1. Вимкнути всі групові відповіді ```json5 { @@ -358,7 +358,7 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser. } ``` -3. Дозволити всі групи, але вимагати згадування (явно) +3. Дозволити всі групи, але вимагати згадку (явно) ```json5 { @@ -370,7 +370,7 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser. } ``` -4. Лише власник може запускати відповіді в групах (WhatsApp) +4. Лише власник може активувати відповіді в групах (WhatsApp) ```json5 { @@ -391,30 +391,34 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser. - `/activation mention` - `/activation always` -Власник визначається через `channels.whatsapp.allowFrom` (або через власний E.164 бота, якщо не задано). Надсилайте команду як окреме повідомлення. Інші поверхні наразі ігнорують `/activation`. +Власник визначається через `channels.whatsapp.allowFrom` (або власний E.164 бота, якщо не задано). Надсилайте команду як окреме повідомлення. Інші поверхні наразі ігнорують `/activation`. ## Поля контексту -Вхідні payload для груп встановлюють: +Вхідні payload-и груп встановлюють: - `ChatType=group` - `GroupSubject` (якщо відомо) - `GroupMembers` (якщо відомо) -- `WasMentioned` (результат керування згадуваннями) -- Теми форуму Telegram також містять `MessageThreadId` і `IsForum`. +- `WasMentioned` (результат керування згадками) +- Теми форумів Telegram також містять `MessageThreadId` і `IsForum`. Примітки для конкретних каналів: -- BlueBubbles може за бажанням збагачувати учасників без імен у групах macOS із локальної бази Contacts перед заповненням `GroupMembers`. Це вимкнено за замовчуванням і виконується лише після проходження звичайної перевірки групових обмежень. +- BlueBubbles може за бажанням збагачувати неназваних учасників груп macOS з локальної бази Contacts перед заповненням `GroupMembers`. Це вимкнено за замовчуванням і виконується лише після проходження звичайних перевірок груп. -Системний prompt агента містить вступ для групи на першому ході нової групової сесії. Він нагадує моделі відповідати як людині, уникати Markdown-таблиць, мінімізувати порожні рядки, дотримуватися звичайних інтервалів у чаті та не вводити буквально послідовності `\n`. +Системний prompt агента містить вступ для групи на першому ході нової групової сесії. Він нагадує моделі відповідати як людині, уникати Markdown-таблиць, мінімізувати порожні рядки, дотримуватися звичайних інтервалів чату й не друкувати буквальні послідовності `\n`. ## Особливості iMessage -- Для маршрутизації або allowlist віддавайте перевагу `chat_id:`. -- Список чатів: `imsg chats --limit 20`. -- Відповіді в групах завжди повертаються до того самого `chat_id`. +- Для маршрутизації або allowlist-ів надавайте перевагу `chat_id:`. +- Переглянути чати: `imsg chats --limit 20`. +- Відповіді в групі завжди повертаються до того самого `chat_id`. + +## Системні prompt-и WhatsApp + +Див. [WhatsApp](/uk/channels/whatsapp#system-prompts) для канонічних правил системних prompt-ів WhatsApp, зокрема розв’язання prompt-ів для груп і прямих повідомлень, поведінки wildcard і семантики перевизначення облікового запису. ## Особливості WhatsApp -Див. [Групові повідомлення](/uk/channels/group-messages) щодо поведінки лише для WhatsApp (вставлення історії, деталі обробки згадувань). +Див. [Групові повідомлення](/uk/channels/group-messages) для поведінки, специфічної лише для WhatsApp (впровадження історії, деталі обробки згадок). diff --git a/docs/uk/channels/whatsapp.md b/docs/uk/channels/whatsapp.md index ad674937c..985db5d94 100644 --- a/docs/uk/channels/whatsapp.md +++ b/docs/uk/channels/whatsapp.md @@ -1,44 +1,44 @@ --- read_when: - Робота над поведінкою каналу WhatsApp/web або маршрутизацією вхідних повідомлень -summary: Підтримка каналу WhatsApp, контроль доступу, поведінка доставки та операції +summary: підтримка каналу WhatsApp, засоби контролю доступу, поведінка доставки та операції title: WhatsApp x-i18n: - generated_at: "2026-04-06T15:28:11Z" + generated_at: "2026-04-21T23:42:03Z" model: gpt-5.4 provider: openai - source_hash: 9e2ce84d869ace6c0bebd9ec17bdbbef997a5c31e5da410b02a19a0f103f7359 + source_hash: 5c527b9f7f58f4bb7272a6d1c0f9a435d7d46a9b99790243594afb5c305606b3 source_path: channels/whatsapp.md workflow: 15 --- -# WhatsApp (Web-канал) +# WhatsApp (вебканал) -Статус: готовий до production через WhatsApp Web (Baileys). Gateway керує прив’язаними сесіями. +Статус: готовий до використання в продакшені через WhatsApp Web (Baileys). Gateway керує прив’язаними сесіями. ## Встановлення (за потреби) -- Онбординг (`openclaw onboard`) і `openclaw channels add --channel whatsapp` - пропонують установити плагін WhatsApp, коли ви вперше вибираєте його. +- Під час онбордингу (`openclaw onboard`) і `openclaw channels add --channel whatsapp` + з’являється запит на встановлення plugin WhatsApp, коли ви вперше його вибираєте. - `openclaw channels login --channel whatsapp` також пропонує процес встановлення, якщо - плагін ще не присутній. -- Канал розробки + git checkout: за замовчуванням використовується локальний шлях до плагіна. + plugin ще не присутній. +- Канал розробки + git checkout: за замовчуванням використовується локальний шлях до plugin. - Stable/Beta: за замовчуванням використовується npm-пакет `@openclaw/whatsapp`. -Ручне встановлення також залишається доступним: +Ручне встановлення також доступне: ```bash openclaw plugins install @openclaw/whatsapp ``` - - Стандартна політика DM — прив’язка для невідомих відправників. + + Стандартна політика DM — прив’язування для невідомих відправників. - + Міжканальна діагностика та сценарії відновлення. - + Повні шаблони та приклади конфігурації каналу. @@ -77,7 +77,7 @@ openclaw channels login --channel whatsapp --account work - + ```bash openclaw gateway @@ -85,31 +85,31 @@ openclaw gateway - + ```bash openclaw pairing list whatsapp openclaw pairing approve whatsapp ``` - Запити на прив’язку спливають через 1 годину. Кількість запитів у стані очікування обмежена до 3 на канал. + Запити на прив’язування спливають через 1 годину. Кількість запитів у стані очікування обмежена до 3 на канал. -OpenClaw рекомендує за можливості запускати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого сценарію, але конфігурації з особистим номером також підтримуються.) +OpenClaw рекомендує, за можливості, запускати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого сценарію, але конфігурації з особистим номером також підтримуються.) -## Схеми розгортання +## Шаблони розгортання - Це найчистіший операційний режим: + Це найчистіший режим із погляду операцій: - окрема ідентичність WhatsApp для OpenClaw - - чіткіші allowlist-и DM та межі маршрутизації - - менша ймовірність плутанини з чатом із самим собою + - чіткіші списки дозволу DM і межі маршрутизації + - нижча ймовірність плутанини з чатом із самим собою Мінімальний шаблон політики: @@ -127,7 +127,7 @@ OpenClaw рекомендує за можливості запускати Whats - Онбординг підтримує режим особистого номера та записує базову конфігурацію, дружню до чату із самим собою: + Онбординг підтримує режим особистого номера і записує базову конфігурацію, зручну для чату із самим собою: - `dmPolicy: "allowlist"` - `allowFrom` містить ваш особистий номер @@ -138,9 +138,9 @@ OpenClaw рекомендує за можливості запускати Whats - Канал платформи обміну повідомленнями у поточній архітектурі каналів OpenClaw побудований на WhatsApp Web (`Baileys`). + Канал платформи повідомлень у поточній архітектурі каналів OpenClaw базується на WhatsApp Web (`Baileys`). - Окремого каналу обміну повідомленнями Twilio WhatsApp у вбудованому реєстрі чат-каналів немає. + Окремого каналу повідомлень Twilio WhatsApp у вбудованому реєстрі каналів чату немає. @@ -148,11 +148,11 @@ OpenClaw рекомендує за можливості запускати Whats ## Модель виконання - Gateway керує сокетом WhatsApp і циклом перепідключення. -- Надсилання назовні вимагає активного слухача WhatsApp для цільового облікового запису. +- Для вихідного надсилання потрібен активний слухач WhatsApp для цільового облікового запису. - Чати статусів і розсилок ігноруються (`@status`, `@broadcast`). -- Прямі чати використовують правила сесій DM (`session.dmScope`; значення за замовчуванням `main` зводить DM до основної сесії агента). -- Групові сесії ізольовані (`agent::whatsapp:group:`). -- Транспорт WhatsApp Web дотримується стандартних змінних середовища проксі на хості gateway (`HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` / варіанти в нижньому регістрі). Надавайте перевагу конфігурації проксі на рівні хоста, а не специфічним налаштуванням проксі WhatsApp для каналу. +- Для прямих чатів використовуються правила сесій DM (`session.dmScope`; значення за замовчуванням `main` згортає DM до головної сесії агента). +- Сесії груп ізольовані (`agent::whatsapp:group:`). +- Транспорт WhatsApp Web враховує стандартні змінні середовища проксі на хості Gateway (`HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` / варіанти в нижньому регістрі). Надавайте перевагу проксі-конфігурації на рівні хоста, а не специфічним налаштуванням проксі для каналу WhatsApp. ## Контроль доступу та активація @@ -162,94 +162,94 @@ OpenClaw рекомендує за можливості запускати Whats - `pairing` (за замовчуванням) - `allowlist` - - `open` (потребує, щоб `allowFrom` містив `"*"`) + - `open` (потрібно, щоб `allowFrom` містив `"*"`) - `disabled` - `allowFrom` приймає номери у стилі E.164 (внутрішньо нормалізуються). + `allowFrom` приймає номери у форматі E.164 (внутрішньо нормалізуються). - Перевизначення для кількох облікових записів: `channels.whatsapp.accounts..dmPolicy` (і `allowFrom`) мають пріоритет над значеннями канального рівня для цього облікового запису. + Перевизначення для кількох облікових записів: `channels.whatsapp.accounts..dmPolicy` (і `allowFrom`) мають пріоритет над значеннями каналу за замовчуванням для цього облікового запису. Деталі поведінки під час виконання: - - прив’язки зберігаються в channel allow-store і об’єднуються з налаштованим `allowFrom` - - якщо allowlist не налаштовано, прив’язаний власний номер дозволяється за замовчуванням - - вихідні `fromMe` DM ніколи не прив’язуються автоматично + - прив’язування зберігаються у сховищі дозволів каналу та об’єднуються з налаштованим `allowFrom` + - якщо список дозволу не налаштовано, прив’язаний власний номер дозволено за замовчуванням + - вихідні DM `fromMe` ніколи не прив’язуються автоматично - + Доступ до груп має два рівні: - 1. **Allowlist членства в групі** (`channels.whatsapp.groups`) - - якщо `groups` пропущено, усі групи є допустимими - - якщо `groups` присутній, він діє як allowlist груп (`"*"` дозволено) + 1. **Список дозволу членства в групі** (`channels.whatsapp.groups`) + - якщо `groups` пропущено, дозволеними вважаються всі групи + - якщо `groups` присутній, він діє як список дозволу груп (`"*"` дозволено) 2. **Політика відправників у групі** (`channels.whatsapp.groupPolicy` + `groupAllowFrom`) - - `open`: allowlist відправників обходиться + - `open`: список дозволу відправників обходиться - `allowlist`: відправник має відповідати `groupAllowFrom` (або `*`) - - `disabled`: блокувати всі вхідні групові повідомлення + - `disabled`: блокувати всі вхідні повідомлення з груп - Резервна логіка allowlist-а відправників: + Резервна поведінка для списку дозволу відправників: - - якщо `groupAllowFrom` не задано, під час виконання використовується `allowFrom`, якщо він доступний - - allowlist-и відправників перевіряються перед активацією за згадкою/відповіддю + - якщо `groupAllowFrom` не задано, під час виконання використовується `allowFrom`, коли він доступний + - списки дозволу відправників перевіряються перед активацією за згадкою/відповіддю - Примітка: якщо блоку `channels.whatsapp` взагалі не існує, резервна групова політика під час виконання — `allowlist` (із попередженням у журналі), навіть якщо задано `channels.defaults.groupPolicy`. + Примітка: якщо блоку `channels.whatsapp` немає взагалі, резервна політика груп під час виконання — `allowlist` (із попередженням у журналі), навіть якщо задано `channels.defaults.groupPolicy`. - Для відповідей у групі за замовчуванням потрібна згадка. + За замовчуванням відповіді в групах потребують згадки. - Виявлення згадки включає: + Виявлення згадок включає: - - явні згадки ідентичності бота у WhatsApp + - явні згадки WhatsApp ідентичності бота - налаштовані шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`) - неявне виявлення відповіді боту (відправник відповіді збігається з ідентичністю бота) Примітка щодо безпеки: - - цитування/відповідь лише задовольняє вимогу згадки; це **не** надає авторизацію відправнику - - з `groupPolicy: "allowlist"` відправники поза allowlist усе одно блокуються, навіть якщо вони відповідають на повідомлення користувача з allowlist + - цитування/відповідь лише задовольняє умову згадки; це **не** надає авторизацію відправнику + - з `groupPolicy: "allowlist"` відправники поза списком дозволу все одно блокуються, навіть якщо вони відповідають на повідомлення користувача зі списку дозволу Команда активації на рівні сесії: - `/activation mention` - `/activation always` - `activation` оновлює стан сесії (а не глобальну конфігурацію). Доступ до нього обмежений власником. + `activation` оновлює стан сесії (а не глобальну конфігурацію). Доступ до неї обмежений власником. ## Поведінка особистого номера та чату із самим собою -Коли прив’язаний власний номер також присутній у `allowFrom`, активується захист WhatsApp для чату із самим собою: +Коли прив’язаний власний номер також присутній у `allowFrom`, активуються запобіжники для чату із самим собою в WhatsApp: - пропускати підтвердження прочитання для ходів у чаті із самим собою -- ігнорувати поведінку автозапуску за JID-згадкою, яка інакше пінгувала б вас самих -- якщо `messages.responsePrefix` не задано, відповіді в чаті із самим собою за замовчуванням мають формат `[{identity.name}]` або `[openclaw]` +- ігнорувати автоматичну активацію за JID згадки, яка інакше пінгувала б вас самих +- якщо `messages.responsePrefix` не задано, відповіді в чаті із самим собою за замовчуванням мають вигляд `[{identity.name}]` або `[openclaw]` ## Нормалізація повідомлень і контекст - - Вхідні повідомлення WhatsApp загортаються у спільний вхідний конверт. + + Вхідні повідомлення WhatsApp обгортаються у спільну вхідну оболонку. - Якщо існує цитована відповідь, контекст додається в такому форматі: + Якщо існує процитована відповідь, контекст додається в такому вигляді: ```text - [Відповідь на id:] + [Replying to id:] - [/Відповідь] + [/Replying] ``` - Поля метаданих відповіді також заповнюються, коли доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, JID/E.164 відправника). + Поля метаданих відповіді також заповнюються, коли вони доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, JID/E.164 відправника). - - Вхідні повідомлення, що містять лише медіа, нормалізуються із заповнювачами, такими як: + + Вхідні повідомлення лише з медіа нормалізуються за допомогою заповнювачів, таких як: - `` - `` @@ -257,11 +257,11 @@ OpenClaw рекомендує за можливості запускати Whats - `` - `` - Дані геолокації та контактів нормалізуються в текстовий контекст перед маршрутизацією. + Дані локації та контактів нормалізуються в текстовий контекст перед маршрутизацією. - + Для груп необроблені повідомлення можуть буферизуватися і вставлятися як контекст, коли бот нарешті активується. - ліміт за замовчуванням: `50` @@ -269,17 +269,17 @@ OpenClaw рекомендує за можливості запускати Whats - резервне значення: `messages.groupChat.historyLimit` - `0` вимикає - Маркери вставки: + Маркери вставлення: - - `[Повідомлення чату з часу вашої останньої відповіді — для контексту]` - - `[Поточне повідомлення — відповідайте на нього]` + - `[Chat messages since your last reply - for context]` + - `[Current message - respond to this]` Підтвердження прочитання ввімкнені за замовчуванням для прийнятих вхідних повідомлень WhatsApp. - Вимкнути глобально: + Глобальне вимкнення: ```json5 { @@ -291,7 +291,7 @@ OpenClaw рекомендує за можливості запускати Whats } ``` - Перевизначення для кожного облікового запису: + Перевизначення для окремого облікового запису: ```json5 { @@ -316,25 +316,25 @@ OpenClaw рекомендує за можливості запускати Whats - - ліміт частини за замовчуванням: `channels.whatsapp.textChunkLimit = 4000` + - стандартний ліміт частини: `channels.whatsapp.textChunkLimit = 4000` - `channels.whatsapp.chunkMode = "length" | "newline"` - - режим `newline` надає перевагу межам абзаців (порожнім рядкам), а потім повертається до безпечного за довжиною розбиття + - режим `newline` надає перевагу межам абзаців (порожні рядки), а потім резервно використовує безпечне розбиття за довжиною - - підтримуються payload-и image, video, audio (голосове повідомлення PTT) і document - - `audio/ogg` переписується як `audio/ogg; codecs=opus` для сумісності з голосовими повідомленнями - - відтворення анімованих GIF підтримується через `gifPlayback: true` під час надсилання video - - підписи застосовуються до першого елемента медіа під час надсилання payload-ів відповіді з кількома медіа + - підтримуються зображення, відео, аудіо (голосові PTT-нотатки) і документи + - `audio/ogg` переписується в `audio/ogg; codecs=opus` для сумісності з голосовими нотатками + - відтворення анімованих GIF підтримується через `gifPlayback: true` під час надсилання відео + - підписи застосовуються до першого елемента медіа під час надсилання корисних навантажень відповіді з кількома медіа - джерелом медіа може бути HTTP(S), `file://` або локальні шляхи - - обмеження збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (за замовчуванням `50`) - - обмеження надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (за замовчуванням `50`) - - перевизначення для кожного облікового запису використовують `channels.whatsapp.accounts..mediaMaxMb` - - зображення автоматично оптимізуються (зміна розміру/підбір якості), щоб відповідати обмеженням - - у разі помилки надсилання медіа резервна логіка для першого елемента надсилає текстове попередження замість тихого пропуску відповіді + - межа збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (за замовчуванням `50`) + - межа надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (за замовчуванням `50`) + - перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts..mediaMaxMb` + - зображення автоматично оптимізуються (підбір розміру/якості), щоб вкладатися в обмеження + - у разі помилки надсилання медіа резервна поведінка для першого елемента надсилає текстове попередження замість тихого скидання відповіді @@ -342,16 +342,16 @@ OpenClaw рекомендує за можливості запускати Whats `channels.whatsapp.reactionLevel` керує тим, наскільки широко агент використовує emoji-реакції у WhatsApp: -| Рівень | Реакції-підтвердження | Реакції, ініційовані агентом | Опис | -| ------------- | --------------------- | ---------------------------- | ------------------------------------------------ | -| `"off"` | Ні | Ні | Жодних реакцій | -| `"ack"` | Так | Ні | Лише реакції-підтвердження (отримання до відповіді) | -| `"minimal"` | Так | Так (консервативно) | Підтвердження + реакції агента з консервативними вказівками | -| `"extensive"` | Так | Так (заохочуються) | Підтвердження + реакції агента із заохочувальними вказівками | +| Рівень | Реакції-підтвердження | Реакції, ініційовані агентом | Опис | +| -------------- | --------------------- | ---------------------------- | ------------------------------------------------ | +| `"off"` | Ні | Ні | Жодних реакцій | +| `"ack"` | Так | Ні | Лише реакції-підтвердження (до відповіді) | +| `"minimal"` | Так | Так (обережно) | Підтвердження + реакції агента з обережними настановами | +| `"extensive"` | Так | Так (заохочується) | Підтвердження + реакції агента із заохочувальними настановами | За замовчуванням: `"minimal"`. -Перевизначення для кожного облікового запису використовують `channels.whatsapp.accounts..reactionLevel`. +Перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts..reactionLevel`. ```json5 { @@ -365,8 +365,8 @@ OpenClaw рекомендує за можливості запускати Whats ## Реакції-підтвердження -WhatsApp підтримує миттєві реакції-підтвердження при отриманні вхідного повідомлення через `channels.whatsapp.ackReaction`. -Реакції-підтвердження залежать від `reactionLevel` — вони пригнічуються, коли `reactionLevel` дорівнює `"off"`. +WhatsApp підтримує негайні реакції-підтвердження після отримання вхідного повідомлення через `channels.whatsapp.ackReaction`. +Реакції-підтвердження залежать від `reactionLevel` — вони пригнічуються, коли `reactionLevel` має значення `"off"`. ```json5 { @@ -384,24 +384,24 @@ WhatsApp підтримує миттєві реакції-підтверджен Примітки щодо поведінки: -- надсилаються одразу після прийняття вхідного повідомлення (до відповіді) -- помилки логуються, але не блокують звичайну доставку відповіді -- у груповому режимі `mentions` реакція ставиться на ходах, активованих згадкою; групова активація `always` працює як обхід цієї перевірки +- надсилаються негайно після прийняття вхідного повідомлення (до відповіді) +- збої фіксуються в журналі, але не блокують звичайну доставку відповіді +- режим груп `mentions` реагує на ходи, активовані згадкою; групова активація `always` обходить цю перевірку - WhatsApp використовує `channels.whatsapp.ackReaction` (застарілий `messages.ackReaction` тут не використовується) ## Кілька облікових записів і облікові дані - - ідентифікатори облікових записів беруться з `channels.whatsapp.accounts` - - вибір облікового запису за замовчуванням: `default`, якщо присутній, інакше перший налаштований id облікового запису (відсортований) + - ідентифікатори облікових записів походять із `channels.whatsapp.accounts` + - вибір облікового запису за замовчуванням: `default`, якщо він присутній, інакше перший налаштований ідентифікатор облікового запису (відсортований) - ідентифікатори облікових записів внутрішньо нормалізуються для пошуку - + - поточний шлях автентифікації: `~/.openclaw/credentials/whatsapp//creds.json` - резервний файл: `creds.json.bak` - - застаріла автентифікація за замовчуванням у `~/.openclaw/credentials/` усе ще розпізнається/мігрується для сценаріїв з обліковим записом за замовчуванням + - застаріла стандартна автентифікація в `~/.openclaw/credentials/` усе ще розпізнається/мігрується для потоків стандартного облікового запису @@ -415,16 +415,16 @@ WhatsApp підтримує миттєві реакції-підтверджен ## Інструменти, дії та запис конфігурації - Підтримка інструментів агента включає дію реакції WhatsApp (`react`). -- Обмеження дій: +- Обмежувачі дій: - `channels.whatsapp.actions.reactions` - `channels.whatsapp.actions.polls` -- Запис конфігурації, ініційований каналом, увімкнений за замовчуванням (вимикається через `channels.whatsapp.configWrites=false`). +- Запис конфігурації, ініційований каналом, увімкнено за замовчуванням (вимкнення через `channels.whatsapp.configWrites=false`). -## Усунення проблем +## Усунення несправностей - Симптом: статус каналу повідомляє, що його не прив’язано. + Симптом: статус каналу показує, що його не прив’язано. Виправлення: @@ -436,7 +436,7 @@ WhatsApp підтримує миттєві реакції-підтверджен - Симптом: прив’язаний обліковий запис із повторними відключеннями або спробами перепідключення. + Симптом: прив’язаний обліковий запис із повторюваними відключеннями або спробами перепідключення. Виправлення: @@ -445,52 +445,122 @@ WhatsApp підтримує миттєві реакції-підтверджен openclaw logs --follow ``` - За потреби повторно прив’яжіть через `channels login`. + За потреби прив’яжіть повторно через `channels login`. - Вихідні надсилання одразу завершуються помилкою, коли для цільового облікового запису не існує активного слухача gateway. + Вихідні надсилання одразу завершуються помилкою, якщо для цільового облікового запису не існує активного слухача Gateway. - Переконайтеся, що gateway запущено і обліковий запис прив’язано. + Переконайтеся, що Gateway запущено і обліковий запис прив’язано. - + Перевіряйте в такому порядку: - `groupPolicy` - `groupAllowFrom` / `allowFrom` - - записи allowlist-а `groups` + - записи списку дозволу `groups` - обмеження за згадкою (`requireMention` + шаблони згадок) - дубльовані ключі в `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тому зберігайте лише один `groupPolicy` для кожної області - Середовище виконання gateway для WhatsApp має використовувати Node. Bun позначено як несумісний для стабільної роботи gateway WhatsApp/Telegram. + Середовище виконання Gateway для WhatsApp має використовувати Node. Bun позначено як несумісне для стабільної роботи Gateway WhatsApp/Telegram. +## Системні підказки + +WhatsApp підтримує системні підказки у стилі Telegram для груп і прямих чатів через мапи `groups` і `direct`. + +Ієрархія визначення для групових повідомлень: + +Спочатку визначається ефективна мапа `groups`: якщо обліковий запис задає власну `groups`, вона повністю замінює кореневу мапу `groups` (без глибокого злиття). Потім пошук підказки виконується в отриманій єдиній мапі: + +1. **Системна підказка для конкретної групи** (`groups[""].systemPrompt`): використовується, якщо запис конкретної групи задає `systemPrompt`. +2. **Системна підказка wildcard для груп** (`groups["*"].systemPrompt`): використовується, якщо запис конкретної групи відсутній або не задає `systemPrompt`. + +Ієрархія визначення для прямих повідомлень: + +Спочатку визначається ефективна мапа `direct`: якщо обліковий запис задає власну `direct`, вона повністю замінює кореневу мапу `direct` (без глибокого злиття). Потім пошук підказки виконується в отриманій єдиній мапі: + +1. **Системна підказка для конкретного прямого чату** (`direct[""].systemPrompt`): використовується, якщо запис конкретного співрозмовника задає `systemPrompt`. +2. **Системна підказка wildcard для прямих чатів** (`direct["*"].systemPrompt`): використовується, якщо запис конкретного співрозмовника відсутній або не задає `systemPrompt`. + +Примітка: `dms` залишається спрощеним контейнером перевизначення історії для окремих DM (`dms..historyLimit`); перевизначення підказок розміщуються в `direct`. + +**Відмінність від поведінки Telegram з кількома обліковими записами:** у Telegram кореневий `groups` навмисно пригнічується для всіх облікових записів у конфігурації з кількома обліковими записами — навіть для облікових записів, які не задають власного `groups`, — щоб запобігти отриманню ботом групових повідомлень із груп, до яких він не належить. WhatsApp не застосовує цей захист: кореневі `groups` і кореневий `direct` завжди успадковуються обліковими записами, які не задають перевизначення на рівні облікового запису, незалежно від того, скільки облікових записів налаштовано. У конфігурації WhatsApp із кількома обліковими записами, якщо вам потрібні підказки для груп або прямих чатів на рівні окремих облікових записів, явно задавайте повну мапу в кожному обліковому записі, а не покладайтеся на кореневі значення за замовчуванням. + +Важлива поведінка: + +- `channels.whatsapp.groups` — це і мапа конфігурації для окремих груп, і список дозволу груп на рівні чату. На кореневому рівні або в області облікового запису `groups["*"]` означає, що «усі групи допускаються» для цієї області. +- Додавайте системну підказку групи wildcard лише тоді, коли ви вже хочете, щоб ця область допускала всі групи. Якщо ви все ще хочете, щоб дозволеними були лише фіксований набір ідентифікаторів груп, не використовуйте `groups["*"]` для значення підказки за замовчуванням. Натомість повторіть підказку в кожному явно дозволеному записі групи. +- Допуск груп і авторизація відправників — це окремі перевірки. `groups["*"]` розширює набір груп, які можуть потрапити в обробку груп, але саме по собі не авторизує кожного відправника в цих групах. Доступ відправників і далі окремо контролюється через `channels.whatsapp.groupPolicy` і `channels.whatsapp.groupAllowFrom`. +- `channels.whatsapp.direct` не має такого самого побічного ефекту для DM. `direct["*"]` лише надає стандартну конфігурацію прямого чату після того, як DM уже допущено через `dmPolicy` плюс `allowFrom` або правила сховища прив’язування. + +Приклад: + +```json5 +{ + channels: { + whatsapp: { + groups: { + // Використовуйте лише якщо на кореневому рівні мають допускатися всі групи. + // Застосовується до всіх облікових записів, які не задають власну мапу groups. + "*": { systemPrompt: "Стандартна підказка для всіх груп." }, + }, + direct: { + // Застосовується до всіх облікових записів, які не задають власну мапу direct. + "*": { systemPrompt: "Стандартна підказка для всіх прямих чатів." }, + }, + accounts: { + work: { + groups: { + // Цей обліковий запис задає власну groups, тому коренева groups повністю + // замінюється. Щоб зберегти wildcard, явно задайте тут також "*". + "120363406415684625@g.us": { + requireMention: false, + systemPrompt: "Зосереджуйся на керуванні проєктами.", + }, + // Використовуйте лише якщо в цьому обліковому записі мають допускатися всі групи. + "*": { systemPrompt: "Стандартна підказка для робочих груп." }, + }, + direct: { + // Цей обліковий запис задає власну мапу direct, тому кореневі записи direct + // повністю замінюються. Щоб зберегти wildcard, явно задайте тут також "*". + "+15551234567": { systemPrompt: "Підказка для конкретного робочого прямого чату." }, + "*": { systemPrompt: "Стандартна підказка для робочих прямих чатів." }, + }, + }, + }, + }, + }, +} +``` + ## Вказівники на довідник конфігурації -Основне посилання: +Основний довідник: - [Довідник конфігурації - WhatsApp](/uk/gateway/configuration-reference#whatsapp) -Важливі поля WhatsApp: +Ключові поля WhatsApp: - доступ: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups` - доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `sendReadReceipts`, `ackReaction`, `reactionLevel` - кілька облікових записів: `accounts..enabled`, `accounts..authDir`, перевизначення на рівні облікового запису - операції: `configWrites`, `debounceMs`, `web.enabled`, `web.heartbeatSeconds`, `web.reconnect.*` - поведінка сесії: `session.dmScope`, `historyLimit`, `dmHistoryLimit`, `dms..historyLimit` +- підказки: `groups..systemPrompt`, `groups["*"].systemPrompt`, `direct..systemPrompt`, `direct["*"].systemPrompt` -## Пов’язане +## Пов’язані розділи -- [Прив’язка](/uk/channels/pairing) +- [Прив’язування](/uk/channels/pairing) - [Групи](/uk/channels/groups) - [Безпека](/uk/gateway/security) - [Маршрутизація каналів](/uk/channels/channel-routing) - [Маршрутизація кількох агентів](/uk/concepts/multi-agent) -- [Усунення проблем](/uk/channels/troubleshooting) +- [Усунення несправностей](/uk/channels/troubleshooting)