Configuration
Повідомлення груп WhatsApp
Для моделі груп між каналами (Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo) див. Групи. Ця сторінка описує специфічну для WhatsApp поведінку поверх цієї моделі: активацію, списки дозволених груп, сеансові ключі для кожної групи та додавання контексту з очікуваних повідомлень.
Мета: дозволити OpenClaw перебувати в групах WhatsApp, активуватися лише після звернення та тримати цей тред окремо від особистого сеансу приватних повідомлень.
Поведінка
- Режими активації:
mention(типово) абоalways.mentionпотребує звернення (справжні WhatsApp @-згадки черезmentionedJids, безпечні regex-шаблони або E.164 бота будь-де в тексті).alwaysактивує агента на кожне повідомлення, але він має відповідати лише тоді, коли може додати змістовну цінність; інакше він повертає точний тихий токенNO_REPLY/no_reply. Типові значення можна задати в конфігурації (channels.whatsapp.groups) і перевизначити для окремої групи через/activation. Коли заданоchannels.whatsapp.groups, це також працює як список дозволених груп (додайте"*", щоб дозволити всі). - Політика груп:
channels.whatsapp.groupPolicyкерує тим, чи приймаються групові повідомлення (open|disabled|allowlist).allowlistвикористовуєchannels.whatsapp.groupAllowFrom(запасний варіант: явнийchannels.whatsapp.allowFrom). Типово використовуєтьсяallowlist(заблоковано, доки ви не додасте відправників). - Сеанси для кожної групи: сеансові ключі мають вигляд
agent:<agentId>:whatsapp:group:<jid>, тож команди на кшталт/verbose on,/trace onабо/think high(надіслані як окремі повідомлення) обмежуються цією групою; особистий стан приватних повідомлень не змінюється. Heartbeat пропускаються для групових тредів. - Додавання контексту: лише очікувані групові повідомлення (типово 50), які не запустили виконання, додаються з префіксом під
[Chat messages since your last reply - for context], а повідомлення-тригер розміщується під[Current message - respond to this]. Повідомлення, які вже є в сеансі, не додаються повторно. - Відображення відправника: кожен груповий пакет тепер завершується
[from: Sender Name (+E164)], щоб OpenClaw знав, хто говорить. - Ефемерні/одноразові для перегляду повідомлення: ми розгортаємо їх перед видобуванням тексту/згадок, тож звернення всередині них усе одно спрацьовують.
- Системний промпт групи: на першому кроці групового сеансу (і щоразу, коли
/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 прибирає візуальний @ у тілі тексту:
{ channels: { whatsapp: { groups: { "*": { requireMention: true }, }, }, }, agents: { list: [ { id: "main", groupChat: { historyLimit: 50, mentionPatterns: ["@?openclaw", "\\+?15555550123"], }, }, ], },}Примітки:
- Regex не враховують регістр і використовують ті самі запобіжники safe-regex, що й інші конфігураційні regex-поверхні; недійсні шаблони та небезпечні вкладені повторення ігноруються.
- WhatsApp усе ще надсилає канонічні згадки через
mentionedJids, коли хтось торкається контакту, тому запасний варіант із номером рідко потрібен, але це корисна додаткова страховка.
Команда активації (лише власник)
Використовуйте команду групового чату:
/activation mention/activation always
Змінити це може лише номер власника (з channels.whatsapp.allowFrom або власний E.164 бота, якщо не задано). Надішліть /status як окреме повідомлення в групі, щоб побачити поточний режим активації.
Як використовувати
- Додайте свій обліковий запис WhatsApp (той, на якому працює OpenClaw) до групи.
- Напишіть
@openclaw …(або додайте номер). Запустити його можуть лише дозволені відправники, якщо ви не задастеgroupPolicy: "open". - Промпт агента міститиме нещодавній контекст групи та кінцевий маркер
[from: …], щоб він міг звернутися до потрібної людини. - Директиви рівня сеансу (
/verbose on,/trace on,/think high,/newабо/reset,/compact) застосовуються лише до сеансу цієї групи; надсилайте їх як окремі повідомлення, щоб вони зареєструвалися. Ваш особистий сеанс приватних повідомлень залишається незалежним.
Тестування / перевірка
- Ручна димова перевірка:
- Надішліть звернення
@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-tool-only, набір типово починається негайно, щоб учасники групи бачили, що агент працює, навіть якщо автоматична фінальна відповідь не буде опублікована. Явна конфігурація режиму набору все одно має пріоритет.