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 прибирає візуальний @ у тілі тексту:

json5
{  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 як окреме повідомлення в групі, щоб побачити поточний режим активації.

Як використовувати

  1. Додайте свій обліковий запис WhatsApp (той, на якому працює OpenClaw) до групи.
  2. Напишіть @openclaw … (або додайте номер). Запустити його можуть лише дозволені відправники, якщо ви не задасте groupPolicy: "open".
  3. Промпт агента міститиме нещодавній контекст групи та кінцевий маркер [from: …], щоб він міг звернутися до потрібної людини.
  4. Директиви рівня сеансу (/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, набір типово починається негайно, щоб учасники групи бачили, що агент працює, навіть якщо автоматична фінальна відповідь не буде опублікована. Явна конфігурація режиму набору все одно має пріоритет.

Пов’язане

Was this useful?
On this page

On this page