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