Zalo (Bot API)¶
Статус: экспериментальный. Только личные сообщения; группы появятся в ближайшее время согласно документации Zalo.
Требуется плагин¶
Zalo поставляется в виде плагина и не входит в базовую установку.
- Установка через CLI:
openclaw plugins install @openclaw/zalo - Или выберите Zalo во время онбординга и подтвердите запрос на установку
- Подробности: Plugins
Быстрая настройка (для начинающих)¶
- Установите плагин Zalo:
- Из исходного репозитория:
openclaw plugins install ./extensions/zalo- Из npm (если опубликован):openclaw plugins install @openclaw/zalo- Или выберите Zalo в онбординге и подтвердите запрос на установку - Установите токен:
- Env:
ZALO_BOT_TOKEN=...- Или конфиг:channels.zalo.botToken: "...". - Перезапустите Gateway (шлюз) (или завершите онбординг).
- Доступ к личным сообщениям по умолчанию — через сопряжение; подтвердите код сопряжения при первом контакте.
Минимальный конфиг:
{
channels: {
zalo: {
enabled: true,
botToken: "12345689:abc-xyz",
dmPolicy: "pairing",
},
},
}
Что это такое¶
Zalo — ориентированное на Вьетнам приложение для обмена сообщениями; его Bot API позволяет Gateway (шлюзу) запускать бота для диалогов 1:1. Хорошо подходит для поддержки или уведомлений, когда требуется детерминированная маршрутизация обратно в Zalo.
- Канал Zalo Bot API, принадлежащий Gateway (шлюзу).
- Детерминированная маршрутизация: ответы всегда возвращаются в Zalo; модель не выбирает каналы.
- ЛС разделяют основную сессию агента.
- Группы пока не поддерживаются (в документации Zalo указано «coming soon»).
Настройка (быстрый путь)¶
1. Создайте токен бота (Zalo Bot Platform)¶
- Перейдите на https://bot.zaloplatforms.com и войдите.
- Создайте нового бота и настройте его параметры.
- Скопируйте токен бота (формат:
12345689:abc-xyz).
2) Настройте токен (переменные окружения или конфиг)¶
Пример:
{
channels: {
zalo: {
enabled: true,
botToken: "12345689:abc-xyz",
dmPolicy: "pairing",
},
},
}
Вариант через переменные окружения: ZALO_BOT_TOKEN=... (работает только для учетной записи по умолчанию).
Поддержка нескольких учетных записей: используйте channels.zalo.accounts с токенами для каждой учетной записи и необязательным name.
- Перезапустите Gateway (шлюз). Zalo запускается, когда токен определен (через переменные окружения или конфиг).
- Доступ к личным сообщениям по умолчанию — через сопряжение. Подтвердите код при первом обращении к боту.
Как это работает (поведение)¶
- Входящие сообщения нормализуются в общий конверт канала с плейсхолдерами медиа.
- Ответы всегда маршрутизируются обратно в тот же чат Zalo.
- По умолчанию используется long-polling; режим вебхука доступен с
channels.zalo.webhookUrl.
Ограничения¶
- Исходящий текст разбивается на фрагменты по 2000 символов (ограничение API Zalo).
- Загрузка/выгрузка медиа ограничена параметром
channels.zalo.mediaMaxMb(по умолчанию 5). - Стриминг по умолчанию заблокирован, так как лимит в 2000 символов делает его менее полезным.
Контроль доступа (личные сообщения)¶
Доступ к ЛС¶
- По умолчанию:
channels.zalo.dmPolicy = "pairing". Неизвестные отправители получают код сопряжения; сообщения игнорируются до подтверждения (коды истекают через 1 час). - Подтверждение через:
openclaw pairing list zaloopenclaw pairing approve zalo <CODE>- Сопряжение — стандартный обмен токенами. Подробности: Pairing
channels.zalo.allowFromпринимает числовые идентификаторы пользователей (поиск по имени пользователя недоступен).
Long-polling vs вебхук¶
- По умолчанию: long-polling (публичный URL не требуется).
- Режим вебхука: установите
channels.zalo.webhookUrlиchannels.zalo.webhookSecret. - Секрет вебхука должен быть длиной 8–256 символов.
- URL вебхука должен использовать HTTPS.
- Zalo отправляет события с заголовком
X-Bot-Api-Secret-Tokenдля проверки. - Gateway (шлюз) HTTP обрабатывает запросы вебхука по адресу
channels.zalo.webhookPath(по умолчанию — путь URL вебхука).
Примечание: getUpdates (polling) и вебхук взаимоисключающи согласно документации API Zalo.
Поддерживаемые типы сообщений¶
- Текстовые сообщения: полная поддержка с разбиением по 2000 символов.
- Изображения: загрузка и обработка входящих изображений; отправка изображений через
sendPhoto. - Стикеры: логируются, но не полностью обрабатываются (без ответа агента).
- Неподдерживаемые типы: логируются (например, сообщения от защищенных пользователей).
Возможности¶
| Функция | Статус |
|---|---|
| Прямые сообщения | ✅ Поддерживаются |
| Группы | ❌ Скоро (согласно докам Zalo) |
| Медиа (изображ.) | ✅ Поддерживаются |
| Реакции | ❌ Не поддерживаются |
| Потоки | ❌ Не поддерживаются |
| Опросы | ❌ Не поддерживаются |
| Родные команды | ❌ Не поддерживаются |
| Вещание | ⚠️ Заблокирован (лимит 2000) |
Цели доставки (CLI/cron)¶
- Используйте идентификатор чата в качестве цели.
- Пример:
openclaw message send --channel zalo --target 123456789 --message "hi".
Устранение неполадок¶
Бот не отвечает:
- Проверьте валидность токена:
openclaw channels status --probe - Убедитесь, что отправитель одобрен (сопряжение или allowFrom)
- Проверьте логи Gateway (шлюза):
openclaw logs --follow
Вебхук не получает события:
- Убедитесь, что URL вебхука использует HTTPS
- Проверьте, что секретный токен имеет длину 8–256 символов
- Подтвердите, что HTTP‑эндпоинт Gateway (шлюза) доступен по настроенному пути
- Убедитесь, что polling getUpdates не запущен (они взаимоисключающи)
Справочник конфигурации (Zalo)¶
Полная конфигурация: Configuration
Параметры провайдера:
channels.zalo.enabled: включить/отключить запуск канала.channels.zalo.botToken: токен бота из Zalo Bot Platform.channels.zalo.tokenFile: читать токен из файла по пути.channels.zalo.dmPolicy:pairing | allowlist | open | disabled(по умолчанию: сопряжение).channels.zalo.allowFrom: список разрешённых для личных сообщений (ID пользователей).openтребует"*". Мастер настройки запросит числовые ID.channels.zalo.mediaMaxMb: лимит медиа для входящих/исходящих (МБ, по умолчанию 5).channels.zalo.webhookUrl: включить режим вебхука (требуется HTTPS).channels.zalo.webhookSecret: секрет вебхука (8–256 символов).channels.zalo.webhookPath: путь вебхука на HTTP‑сервере Gateway (шлюза).channels.zalo.proxy: URL прокси для API‑запросов.
Параметры для нескольких учетных записей:
channels.zalo.accounts.<id>.botToken: токен для конкретной учетной записи.channels.zalo.accounts.<id>.tokenFile: файл токена для конкретной учетной записи.channels.zalo.accounts.<id>.name: отображаемое имя.channels.zalo.accounts.<id>.enabled: включить/отключить учетную запись.channels.zalo.accounts.<id>.dmPolicy: политика личных сообщений для учетной записи.channels.zalo.accounts.<id>.allowFrom: список разрешённых для учетной записи.channels.zalo.accounts.<id>.webhookUrl: URL вебхука для учетной записи.channels.zalo.accounts.<id>.webhookSecret: секрет вебхука для учетной записи.channels.zalo.accounts.<id>.webhookPath: путь вебхука для учетной записи.channels.zalo.accounts.<id>.proxy: URL прокси для учетной записи.