Regional platforms
Zalo
Статус: экспериментальный. Реализованы как личные сообщения, так и групповые чаты; приведённая ниже таблица Возможности отражает поведение, проверенное для ботов Zalo Bot Creator / Marketplace.
Встроенный плагин
В текущих выпусках OpenClaw Zalo поставляется как встроенный плагин, поэтому для пакетных сборок отдельная установка не требуется.
Для более старой сборки или пользовательской установки без Zalo установите пакет npm напрямую:
- Установка:
openclaw plugins install @openclaw/zalo - Зафиксированная версия:
openclaw plugins install @openclaw/zalo@2026.6.11 - Из локальной рабочей копии:
openclaw plugins install ./path/to/local/zalo-plugin - Подробнее: Плагины
Быстрая настройка
- Создайте токен бота на https://bot.zaloplatforms.com (войдите в систему, создайте бота и настройте параметры). Токен —
numeric_id:secret; для ботов Marketplace пригодный для выполнения токен может содержаться в приветственном сообщении бота. - Укажите токен либо в переменной окружения
ZALO_BOT_TOKEN=...(только для учётной записи по умолчанию), либо в конфигурации. - Перезапустите Gateway.
- При первом обращении в личных сообщениях подтвердите код сопряжения (политика личных сообщений по умолчанию — сопряжение).
Минимальная конфигурация:
{ channels: { zalo: { enabled: true, accounts: { default: { botToken: "12345689:abc-xyz", dmPolicy: "pairing", }, }, }, },}Несколько учётных записей: добавьте дополнительные записи в channels.zalo.accounts.<id>, указав для каждой собственные botToken/name. channels.zalo.botToken (плоская форма без accounts) — устаревшая сокращённая запись для одной учётной записи; для новых конфигураций предпочитайте accounts.<id>.*.
Что это такое
Zalo — ориентированное на Вьетнам приложение для обмена сообщениями. Его Bot API позволяет Gateway запускать бота как для личных бесед, так и для групповых чатов с детерминированной маршрутизацией ответов обратно в Zalo (модель никогда не выбирает каналы).
Эта страница посвящена ботам Zalo Bot Creator / Marketplace. Боты Zalo Official Account (OA) относятся к другой части продукта и могут вести себя иначе; на этой странице они не рассматриваются.
Принцип работы
- Входящие сообщения нормализуются в общий конверт канала с заполнителями для медиафайлов.
- Ответы всегда направляются обратно в тот же чат Zalo; ответы с цитированием не используются (
replyToModeвсегда отключён). - По умолчанию используется длительный опрос (
getUpdates); режим Webhook доступен черезchannels.zalo.webhookUrl. - В группах для активации бота требуется @упоминание; это нельзя настроить отдельно для канала.
Ограничения
| Ограничение | Значение |
|---|---|
| Размер фрагмента исходящего текста | 2000 символов (ограничение API Zalo) |
| Размер медиафайла (входящего/исходящего) | channels.zalo.mediaMaxMb, по умолчанию 5 МБ |
| Тело запроса Webhook | 1 МБ, тайм-аут чтения 30 с |
| Ограничение частоты запросов Webhook | 120 запросов / 60 с на комбинацию пути и IP-адреса клиента, затем HTTP 429 |
| Окно обнаружения повторяющихся событий Webhook | 5 минут (ключ составляется из пути, учётной записи, имени события, чата, отправителя и идентификатора сообщения) |
Управление доступом
Личные сообщения
channels.zalo.dmPolicy:pairing(по умолчанию) |allowlist|open|disabled.- Сопряжение: неизвестные отправители получают код сопряжения; сообщения игнорируются до его подтверждения. Срок действия кодов истекает через 1 час.
openclaw pairing list zaloopenclaw pairing approve zalo <CODE>- Подробнее: Сопряжение
channels.zalo.allowFromпринимает числовые идентификаторы пользователей Zalo (поиск по имени пользователя не поддерживается). Дляopenтребуется"*".
Группы
Групповые чаты поддерживаются плагином (chatTypes: ["direct", "group"]) и ограничиваются требованием упоминания и групповой политикой:
channels.zalo.groupPolicy:open|allowlist|disabled.channels.zalo.groupAllowFromограничивает идентификаторы отправителей, которые могут активировать бота в группах; если значение не задано, используетсяallowFrom.- Разрешение по умолчанию: если настроен
channels.zalo, незаданныйgroupPolicyпринимает значениеopen. Еслиchannels.zaloполностью отсутствует, среда выполнения безопасно отклоняет доступ, устанавливаяallowlist. - Известное ограничение на практике: в некоторых конфигурациях ботов Marketplace бота вообще невозможно добавить в группу. Если вы столкнулись с этим, проверьте настройки своего бота на Zalo Bot Platform; это ограничение платформы, а не политика OpenClaw.
Длительный опрос и Webhook
- По умолчанию: длительный опрос (публичный URL не требуется).
- Режим Webhook: задайте
channels.zalo.webhookUrlиchannels.zalo.webhookSecret.- URL Webhook должен использовать HTTPS.
- Секрет Webhook должен содержать 8–256 символов.
- Zalo отправляет события с заголовком
X-Bot-Api-Secret-Token, который проверяется сравнением с постоянным временем выполнения. - HTTP-сервер Gateway обрабатывает запросы Webhook по пути
channels.zalo.webhookPath(по умолчанию используется путь из URL Webhook). - Запросы должны использовать
Content-Type: application/json(или тип медиа+json). - Согласно документации API Zalo, опрос getUpdates и Webhook являются взаимоисключающими.
Поддерживаемые типы сообщений
- Текст: полная поддержка, с разделением на фрагменты по 2000 символов.
- Медиафайлы: входящие и исходящие, с ограничением
mediaMaxMb. - Реакции, ветки, опросы и нативные команды: плагином не поддерживаются.
- Потоковая передача: плагин заявляет поддержку потоковой передачи блоков, но Zalo не предоставляет отдельных параметров настройки очереди исходящих сообщений или объединения текста (в отличие от некоторых других региональных каналов); если это важно для вашего сценария, проверьте текущее поведение в своей среде.
Возможности
| Функция | Статус |
|---|---|
| Личные сообщения | Поддерживаются |
| Группы | Поддерживаются (требуется упоминание) |
| Медиафайлы (входящие/исходящие) | Поддерживаются, с ограничением mediaMaxMb |
| Реакции | Не поддерживаются |
| Ветки | Не поддерживаются |
| Опросы | Не поддерживаются |
| Нативные команды | Не поддерживаются |
| Ответ на сообщение / цитирование | Не используется (всегда отключено) |
Цели доставки (CLI/Cron)
Используйте идентификатор чата в качестве цели:
openclaw message send --channel zalo --target 123456789 --message "hi"Устранение неполадок
Бот не отвечает:
- Проверьте токен:
openclaw channels status --probe - Убедитесь, что отправитель одобрен (через сопряжение или
allowFrom) - Проверьте журналы Gateway:
openclaw logs --follow
Webhook не получает события:
- Убедитесь, что URL Webhook использует HTTPS
- Убедитесь, что секрет содержит 8–256 символов
- Убедитесь, что HTTP-конечная точка Gateway доступна по настроенному пути
- Убедитесь, что опрос getUpdates не выполняется одновременно (они взаимоисключающие)
- Всплеск запросов может привести к ответу HTTP 429 (120 запросов / 60 с на комбинацию пути и IP-адреса); увеличьте интервал и повторите попытку
Справочник по конфигурации
Полная конфигурация: Конфигурация
| Параметр | Описание | По умолчанию |
|---|---|---|
channels.zalo.enabled |
Включить или отключить запуск канала | true |
channels.zalo.accounts.<id>.botToken |
Токен бота из Zalo Bot Platform | - |
channels.zalo.accounts.<id>.tokenFile |
Читать токен из файла (символические ссылки отклоняются) | - |
channels.zalo.accounts.<id>.name |
Отображаемое имя | - |
channels.zalo.accounts.<id>.enabled |
Включить или отключить эту учётную запись | true |
channels.zalo.accounts.<id>.dmPolicy |
Политика личных сообщений для отдельной учётной записи | pairing |
channels.zalo.accounts.<id>.allowFrom |
Список разрешённых идентификаторов пользователей для личных сообщений | - |
channels.zalo.accounts.<id>.groupPolicy |
Групповая политика для отдельной учётной записи | см. Группы |
channels.zalo.accounts.<id>.groupAllowFrom |
Список разрешённых отправителей в группах; если не задан, используется allowFrom |
- |
channels.zalo.accounts.<id>.mediaMaxMb |
Ограничение размера входящих/исходящих медиафайлов (МБ) | 5 |
channels.zalo.accounts.<id>.webhookUrl |
Включить режим Webhook (требуется HTTPS) | - |
channels.zalo.accounts.<id>.webhookSecret |
Секрет Webhook (8–256 символов) | - |
channels.zalo.accounts.<id>.webhookPath |
Путь Webhook на HTTP-сервере Gateway | путь URL Webhook |
channels.zalo.accounts.<id>.proxy |
URL прокси для запросов API | - |
channels.zalo.accounts.<id>.responsePrefix |
Переопределение префикса исходящего ответа | - |
channels.zalo.defaultAccount |
Учётная запись по умолчанию, если настроено несколько | default |
channels.zalo.botToken, channels.zalo.dmPolicy и другие плоские ключи верхнего уровня являются устаревшей сокращённой записью для одной учётной записи, соответствующей указанным выше полям; поддерживаются обе формы.
Параметр окружения: ZALO_BOT_TOKEN=... задаёт токен только для учётной записи по умолчанию.
Связанные материалы
- Обзор каналов — все поддерживаемые каналы
- Сопряжение — аутентификация в личных сообщениях и процесс сопряжения
- Группы — поведение групповых чатов и активация по упоминанию
- Маршрутизация каналов — маршрутизация сеансов для сообщений
- Безопасность — модель доступа и усиление защиты