Групові повідомлення (канал WhatsApp web)
Мета: дати змогу Clawd бути в групах WhatsApp, прокидатися лише коли його згадують, і тримати цей тред окремо від особистої DM-сесії. Примітка:agents.list[].groupChat.mentionPatterns тепер також використовується в Telegram/Discord/Slack/iMessage; цей документ зосереджений на поведінці, специфічній для WhatsApp. Для конфігурацій із кількома агентами задавайте agents.list[].groupChat.mentionPatterns для кожного агента окремо (або використовуйте messages.groupChat.mentionPatterns як глобальний резервний варіант).
Поточна реалізація (2025-12-03)
- Режими активації:
mention(типово) абоalways.mentionвимагає згадки (справжні @-згадки WhatsApp черезmentionedJids, безпечні regex-шаблони або E.164 номер бота будь-де в тексті).alwaysпробуджує агента на кожне повідомлення, але він має відповідати лише тоді, коли може додати справді корисну цінність; інакше він повертає точний тихий токенNO_REPLY/no_reply. Типові значення можна задати в конфігурації (channels.whatsapp.groups) і перевизначити для кожної групи через/activation. Якщо заданоchannels.whatsapp.groups, це також працює як allowlist груп (включіть"*", щоб дозволити всі). - Політика для груп:
channels.whatsapp.groupPolicyвизначає, чи приймаються групові повідомлення (open|disabled|allowlist). Дляallowlistвикористовуєтьсяchannels.whatsapp.groupAllowFrom(резервно: явнийchannels.whatsapp.allowFrom). Типове значення —allowlist(заблоковано, доки ви не додасте відправників). - Сесії для кожної групи: ключі сесій мають вигляд
agent:<agentId>:whatsapp:group:<jid>, тому команди на кшталт/verbose onабо/think high(надіслані як окремі повідомлення) застосовуються лише до цієї групи; стан особистих DM не змінюється. Heartbeat для групових тредів пропускаються. - Ін’єкція контексту: групові повідомлення зі статусом pending-only (типово 50), які не запустили виконання, додаються на початок у блоці
[Chat messages since your last reply - for context], а повідомлення-тригер — у блоці[Current message - respond to this]. Повідомлення, які вже є в сесії, не додаються повторно. - Відображення відправника: кожна групова партія тепер завершується рядком
[from: Ім’я відправника (+E164)], щоб Pi знав, хто говорить. - Ephemeral/view-once: ми розгортаємо їх перед витягуванням тексту/згадок, тож згадки всередині них теж запускають спрацювання.
- Системний промпт групи: на першому ході групової сесії (і щоразу, коли
/activationзмінює режим) ми додаємо короткий фрагмент до системного промпта, наприкладYou are replying inside the WhatsApp group "<subject>". Group members: Alice (+44...), Bob (+43...), … Activation: trigger-only … Address the specific sender noted in the message context.Якщо метадані недоступні, ми все одно повідомляємо агенту, що це груповий чат.
Приклад конфігурації (WhatsApp)
Додайте блокgroupChat до ~/.openclaw/openclaw.json, щоб згадки за відображуваним іменем працювали навіть тоді, коли WhatsApp прибирає візуальний @ із тексту повідомлення:
- Ці regex нечутливі до регістру та використовують ті самі захисні обмеження safe-regex, що й інші поверхні конфігурації regex; недійсні шаблони та небезпечні вкладені повторення ігноруються.
- WhatsApp усе ще надсилає канонічні згадки через
mentionedJids, коли хтось торкається контакту, тож резервний варіант із номером рідко потрібен, але є корисною страховкою.
Команда активації (лише для власника)
Використовуйте команду групового чату:/activation mention/activation always
channels.whatsapp.allowFrom, або власний E.164 номер бота, якщо не задано). Надішліть /status як окреме повідомлення в групі, щоб побачити поточний режим активації.
Як використовувати
- Додайте свій обліковий запис WhatsApp (той, на якому працює OpenClaw) до групи.
- Напишіть
@openclaw …(або вкажіть номер). Лише відправники з allowlist можуть його запускати, якщо ви не встановилиgroupPolicy: "open". - Промпт агента включатиме нещодавній груповий контекст і завершальний маркер
[from: …], щоб він міг звернутися до правильної людини. - Директиви рівня сесії (
/verbose on,/think high,/newабо/reset,/compact) застосовуються лише до сесії цієї групи; надсилайте їх як окремі повідомлення, щоб вони зареєструвалися. Ваша особиста DM-сесія залишається незалежною.
Тестування / перевірка
- Ручна перевірка:
- Надішліть згадку
@openclawу групі й переконайтеся, що відповідь посилається на ім’я відправника. - Надішліть другу згадку й перевірте, що блок історії включається, а потім очищується на наступному ході.
- Надішліть згадку
- Перевірте журнали gateway (запустіть із
--verbose), щоб побачити записиinbound web message, які показуютьfrom: <groupJid>і суфікс[from: …].
Відомі особливості
- Heartbeat навмисно пропускаються для груп, щоб уникнути шумних широкомовних повідомлень.
- Придушення ехо використовує об’єднаний рядок партії; якщо ви двічі надсилаєте однаковий текст без згадок, відповідь буде лише на перше повідомлення.
- Записи в сховищі сесій матимуть вигляд
agent:<agentId>:whatsapp:group:<jid>у сховищі сесій (типово~/.openclaw/agents/<agentId>/sessions/sessions.json); відсутній запис просто означає, що група ще не запускала виконання. - Індикатори набору в групах дотримуються
agents.defaults.typingMode(типово:message, коли немає згадки).