WhatsApp (Web-канал)
Статус: готовий до production через WhatsApp Web (Baileys). Gateway керує прив’язаними сесіями.Встановлення (за потреби)
- Онбординг (
openclaw onboard) іopenclaw channels add --channel whatsappпропонують установити плагін WhatsApp, коли ви вперше вибираєте його. openclaw channels login --channel whatsappтакож пропонує процес встановлення, якщо плагін ще не присутній.- Канал розробки + git checkout: за замовчуванням використовується локальний шлях до плагіна.
- Stable/Beta: за замовчуванням використовується npm-пакет
@openclaw/whatsapp.
Прив’язка
Стандартна політика DM — прив’язка для невідомих відправників.
Усунення проблем каналу
Міжканальна діагностика та сценарії відновлення.
Конфігурація Gateway
Повні шаблони та приклади конфігурації каналу.
Швидке налаштування
OpenClaw рекомендує за можливості запускати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого сценарію, але конфігурації з особистим номером також підтримуються.)
Схеми розгортання
Окремий номер (рекомендовано)
Окремий номер (рекомендовано)
Це найчистіший операційний режим:
- окрема ідентичність WhatsApp для OpenClaw
- чіткіші allowlist-и DM та межі маршрутизації
- менша ймовірність плутанини з чатом із самим собою
Резервний варіант з особистим номером
Резервний варіант з особистим номером
Онбординг підтримує режим особистого номера та записує базову конфігурацію, дружню до чату із самим собою:
dmPolicy: "allowlist"allowFromмістить ваш особистий номерselfChatMode: true
allowFrom.Область каналу лише для WhatsApp Web
Область каналу лише для WhatsApp Web
Канал платформи обміну повідомленнями у поточній архітектурі каналів OpenClaw побудований на WhatsApp Web (
Baileys).Окремого каналу обміну повідомленнями Twilio WhatsApp у вбудованому реєстрі чат-каналів немає.Модель виконання
- Gateway керує сокетом WhatsApp і циклом перепідключення.
- Надсилання назовні вимагає активного слухача WhatsApp для цільового облікового запису.
- Чати статусів і розсилок ігноруються (
@status,@broadcast). - Прямі чати використовують правила сесій DM (
session.dmScope; значення за замовчуваннямmainзводить DM до основної сесії агента). - Групові сесії ізольовані (
agent:<agentId>:whatsapp:group:<jid>). - Транспорт WhatsApp Web дотримується стандартних змінних середовища проксі на хості gateway (
HTTPS_PROXY,HTTP_PROXY,NO_PROXY/ варіанти в нижньому регістрі). Надавайте перевагу конфігурації проксі на рівні хоста, а не специфічним налаштуванням проксі WhatsApp для каналу.
Контроль доступу та активація
- Політика DM
- Групова політика + allowlist-и
- Згадки + /activation
channels.whatsapp.dmPolicy керує доступом до прямих чатів:pairing(за замовчуванням)allowlistopen(потребує, щобallowFromмістив"*")disabled
allowFrom приймає номери у стилі E.164 (внутрішньо нормалізуються).Перевизначення для кількох облікових записів: channels.whatsapp.accounts.<id>.dmPolicy (і allowFrom) мають пріоритет над значеннями канального рівня для цього облікового запису.Деталі поведінки під час виконання:- прив’язки зберігаються в channel allow-store і об’єднуються з налаштованим
allowFrom - якщо allowlist не налаштовано, прив’язаний власний номер дозволяється за замовчуванням
- вихідні
fromMeDM ніколи не прив’язуються автоматично
Поведінка особистого номера та чату із самим собою
Коли прив’язаний власний номер також присутній уallowFrom, активується захист WhatsApp для чату із самим собою:
- пропускати підтвердження прочитання для ходів у чаті із самим собою
- ігнорувати поведінку автозапуску за JID-згадкою, яка інакше пінгувала б вас самих
- якщо
messages.responsePrefixне задано, відповіді в чаті із самим собою за замовчуванням мають формат[{identity.name}]або[openclaw]
Нормалізація повідомлень і контекст
Вхідний конверт + контекст відповіді
Вхідний конверт + контекст відповіді
Вхідні повідомлення WhatsApp загортаються у спільний вхідний конверт.Якщо існує цитована відповідь, контекст додається в такому форматі:Поля метаданих відповіді також заповнюються, коли доступні (
ReplyToId, ReplyToBody, ReplyToSender, JID/E.164 відправника).Заповнювачі медіа та витягування геолокації/контактів
Заповнювачі медіа та витягування геолокації/контактів
Вхідні повідомлення, що містять лише медіа, нормалізуються із заповнювачами, такими як:
<media:image><media:video><media:audio><media:document><media:sticker>
Вставка історії очікування для груп
Вставка історії очікування для груп
Для груп необроблені повідомлення можуть буферизуватися і вставлятися як контекст, коли бот нарешті активується.
- ліміт за замовчуванням:
50 - конфігурація:
channels.whatsapp.historyLimit - резервне значення:
messages.groupChat.historyLimit 0вимикає
[Повідомлення чату з часу вашої останньої відповіді — для контексту][Поточне повідомлення — відповідайте на нього]
Підтвердження прочитання
Підтвердження прочитання
Підтвердження прочитання ввімкнені за замовчуванням для прийнятих вхідних повідомлень WhatsApp.Вимкнути глобально:Перевизначення для кожного облікового запису:Для ходів у чаті із самим собою підтвердження прочитання пропускаються, навіть якщо вони глобально ввімкнені.
Доставка, розбиття на частини та медіа
Розбиття тексту на частини
Розбиття тексту на частини
- ліміт частини за замовчуванням:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- режим
newlineнадає перевагу межам абзаців (порожнім рядкам), а потім повертається до безпечного за довжиною розбиття
Поведінка вихідних медіа
Поведінка вихідних медіа
- підтримуються payload-и image, video, audio (голосове повідомлення PTT) і document
audio/oggпереписується якaudio/ogg; codecs=opusдля сумісності з голосовими повідомленнями- відтворення анімованих GIF підтримується через
gifPlayback: trueпід час надсилання video - підписи застосовуються до першого елемента медіа під час надсилання payload-ів відповіді з кількома медіа
- джерелом медіа може бути HTTP(S),
file://або локальні шляхи
Обмеження розміру медіа та резервна поведінка
Обмеження розміру медіа та резервна поведінка
- обмеження збереження вхідних медіа:
channels.whatsapp.mediaMaxMb(за замовчуванням50) - обмеження надсилання вихідних медіа:
channels.whatsapp.mediaMaxMb(за замовчуванням50) - перевизначення для кожного облікового запису використовують
channels.whatsapp.accounts.<accountId>.mediaMaxMb - зображення автоматично оптимізуються (зміна розміру/підбір якості), щоб відповідати обмеженням
- у разі помилки надсилання медіа резервна логіка для першого елемента надсилає текстове попередження замість тихого пропуску відповіді
Рівень реакцій
channels.whatsapp.reactionLevel керує тим, наскільки широко агент використовує emoji-реакції у WhatsApp:
| Рівень | Реакції-підтвердження | Реакції, ініційовані агентом | Опис |
|---|---|---|---|
"off" | Ні | Ні | Жодних реакцій |
"ack" | Так | Ні | Лише реакції-підтвердження (отримання до відповіді) |
"minimal" | Так | Так (консервативно) | Підтвердження + реакції агента з консервативними вказівками |
"extensive" | Так | Так (заохочуються) | Підтвердження + реакції агента із заохочувальними вказівками |
"minimal".
Перевизначення для кожного облікового запису використовують channels.whatsapp.accounts.<id>.reactionLevel.
Реакції-підтвердження
WhatsApp підтримує миттєві реакції-підтвердження при отриманні вхідного повідомлення черезchannels.whatsapp.ackReaction.
Реакції-підтвердження залежать від reactionLevel — вони пригнічуються, коли reactionLevel дорівнює "off".
- надсилаються одразу після прийняття вхідного повідомлення (до відповіді)
- помилки логуються, але не блокують звичайну доставку відповіді
- у груповому режимі
mentionsреакція ставиться на ходах, активованих згадкою; групова активаціяalwaysпрацює як обхід цієї перевірки - WhatsApp використовує
channels.whatsapp.ackReaction(застарілийmessages.ackReactionтут не використовується)
Кілька облікових записів і облікові дані
Вибір облікового запису та значення за замовчуванням
Вибір облікового запису та значення за замовчуванням
- ідентифікатори облікових записів беруться з
channels.whatsapp.accounts - вибір облікового запису за замовчуванням:
default, якщо присутній, інакше перший налаштований id облікового запису (відсортований) - ідентифікатори облікових записів внутрішньо нормалізуються для пошуку
Шляхи до облікових даних і сумісність зі спадщиною
Шляхи до облікових даних і сумісність зі спадщиною
- поточний шлях автентифікації:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - резервний файл:
creds.json.bak - застаріла автентифікація за замовчуванням у
~/.openclaw/credentials/усе ще розпізнається/мігрується для сценаріїв з обліковим записом за замовчуванням
Поведінка виходу
Поведінка виходу
openclaw channels logout --channel whatsapp [--account <id>] очищає стан автентифікації WhatsApp для цього облікового запису.У застарілих каталогах автентифікації oauth.json зберігається, тоді як файли автентифікації Baileys видаляються.Інструменти, дії та запис конфігурації
- Підтримка інструментів агента включає дію реакції WhatsApp (
react). - Обмеження дій:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Запис конфігурації, ініційований каналом, увімкнений за замовчуванням (вимикається через
channels.whatsapp.configWrites=false).
Усунення проблем
Не прив’язано (потрібен QR)
Не прив’язано (потрібен QR)
Симптом: статус каналу повідомляє, що його не прив’язано.Виправлення:
Прив’язано, але відключено / цикл перепідключення
Прив’язано, але відключено / цикл перепідключення
Симптом: прив’язаний обліковий запис із повторними відключеннями або спробами перепідключення.Виправлення:За потреби повторно прив’яжіть через
channels login.Немає активного слухача під час надсилання
Немає активного слухача під час надсилання
Вихідні надсилання одразу завершуються помилкою, коли для цільового облікового запису не існує активного слухача gateway.Переконайтеся, що gateway запущено і обліковий запис прив’язано.
Групові повідомлення неочікувано ігноруються
Групові повідомлення неочікувано ігноруються
Перевіряйте в такому порядку:
groupPolicygroupAllowFrom/allowFrom- записи allowlist-а
groups - обмеження за згадкою (
requireMention+ шаблони згадок) - дубльовані ключі в
openclaw.json(JSON5): пізніші записи перевизначають попередні, тому зберігайте лише одинgroupPolicyдля кожної області
Попередження середовища виконання Bun
Попередження середовища виконання Bun
Середовище виконання gateway для WhatsApp має використовувати Node. Bun позначено як несумісний для стабільної роботи gateway WhatsApp/Telegram.
Вказівники на довідник конфігурації
Основне посилання: Важливі поля WhatsApp:- доступ:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - доставка:
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - кілька облікових записів:
accounts.<id>.enabled,accounts.<id>.authDir, перевизначення на рівні облікового запису - операції:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.* - поведінка сесії:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit