Zalo (Bot API)
Estado: experimental. Solo mensajes directos; los grupos llegarán pronto según la documentación de Zalo.Plugin requerido
Zalo se distribuye como un plugin y no está incluido en la instalación principal.- Instale mediante la CLI:
openclaw plugins install @openclaw/zalo - O seleccione Zalo durante el onboarding y confirme el aviso de instalación
- Detalles: Plugins
Configuración rápida (principiante)
- Instale el plugin de Zalo:
- Desde un checkout del código fuente:
openclaw plugins install ./extensions/zalo - Desde npm (si está publicado):
openclaw plugins install @openclaw/zalo - O elija Zalo en el onboarding y confirme el aviso de instalación
- Desde un checkout del código fuente:
- Configure el token:
- Env:
ZALO_BOT_TOKEN=... - O configuración:
channels.zalo.botToken: "...".
- Env:
- Reinicie el Gateway (o finalice el onboarding).
- El acceso a mensajes directos se empareja de forma predeterminada; apruebe el código de emparejamiento en el primer contacto.
Qué es
Zalo es una aplicación de mensajería centrada en Vietnam; su Bot API permite que el Gateway ejecute un bot para conversaciones 1:1. Es una buena opción para soporte o notificaciones cuando se desea un enrutamiento determinista de regreso a Zalo.- Un canal de Zalo Bot API propiedad del Gateway.
- Enrutamiento determinista: las respuestas vuelven a Zalo; el modelo nunca elige canales.
- Los mensajes directos comparten la sesión principal del agente.
- Los grupos aún no son compatibles (la documentación de Zalo indica “próximamente”).
Configuración (ruta rápida)
1. Crear un token de bot (Zalo Bot Platform)
- Vaya a https://bot.zaloplatforms.com e inicie sesión.
- Cree un nuevo bot y configure sus ajustes.
- Copie el token del bot (formato:
12345689:abc-xyz).
2) Configurar el token (entorno o configuración)
Ejemplo:ZALO_BOT_TOKEN=... (funciona solo para la cuenta predeterminada).
Soporte multi-cuenta: use channels.zalo.accounts con tokens por cuenta y name opcional.
- Reinicie el Gateway. Zalo se inicia cuando se resuelve un token (variable de entorno o configuración).
- El acceso a mensajes directos usa emparejamiento de forma predeterminada. Apruebe el código cuando el bot sea contactado por primera vez.
Cómo funciona (comportamiento)
- Los mensajes entrantes se normalizan en el sobre compartido del canal con marcadores de posición de medios.
- Las respuestas siempre se enrutan de vuelta al mismo chat de Zalo.
- Long-polling de forma predeterminada; modo webhook disponible con
channels.zalo.webhookUrl.
Límites
- El texto saliente se fragmenta en bloques de 2000 caracteres (límite de la API de Zalo).
- Las descargas/cargas de medios están limitadas por
channels.zalo.mediaMaxMb(predeterminado 5). - El streaming está bloqueado de forma predeterminada debido a que el límite de 2000 caracteres hace que el streaming sea menos útil.
Control de acceso (mensajes directos)
Acceso DM
- Predeterminado:
channels.zalo.dmPolicy = "pairing". Los remitentes desconocidos reciben un código de emparejamiento; los mensajes se ignoran hasta que se aprueban (los códigos expiran después de 1 hora). - Aprobar mediante:
openclaw pairing list zaloopenclaw pairing approve zalo <CODE>
- El emparejamiento es el intercambio de tokens predeterminado. Detalles: Pairing
channels.zalo.allowFromacepta IDs numéricos de usuario (no hay búsqueda por nombre de usuario).
Sondeo largo vs webhook
- Predeterminado: long-polling (no se requiere una URL pública).
- Modo webhook: configure
channels.zalo.webhookUrlychannels.zalo.webhookSecret.- El secreto del webhook debe tener entre 8 y 256 caracteres.
- La URL del webhook debe usar HTTPS.
- Zalo envía eventos con el encabezado
X-Bot-Api-Secret-Tokenpara verificación. - El HTTP del Gateway maneja las solicitudes del webhook en
channels.zalo.webhookPath(por defecto, la ruta de la URL del webhook).
Tipos de mensajes compatibles
- Mensajes de texto: compatibilidad completa con fragmentación de 2000 caracteres.
- Mensajes de imagen: descargar y procesar imágenes entrantes; enviar imágenes mediante
sendPhoto. - Stickers: se registran pero no se procesan completamente (sin respuesta del agente).
- Tipos no compatibles: se registran (p. ej., mensajes de usuarios protegidos).
Capacidades
| Función | Estado |
|---|---|
| Mensajes directos | ✅ Compatible |
| Grupos | ❌ Próximamente (según Zalo) |
| Medios (imágenes) | ✅ Compatible |
| Reacciones | ❌ No compatible |
| Hilos | ❌ No compatible |
| Encuestas | ❌ No compatible |
| Comandos nativos | ❌ No compatible |
| Streaming | ⚠️ Bloqueado (límite 2000) |
Destinos de entrega (CLI/cron)
- Use un id de chat como destino.
- Ejemplo:
openclaw message send --channel zalo --target 123456789 --message "hi".
Solución de problemas
El bot no responde:- Verifique que el token sea válido:
openclaw channels status --probe - Verifique que el remitente esté aprobado (emparejamiento o allowFrom)
- Revise los registros del Gateway:
openclaw logs --follow
- Asegúrese de que la URL del webhook use HTTPS
- Verifique que el token secreto tenga entre 8 y 256 caracteres
- Confirme que el endpoint HTTP del Gateway sea accesible en la ruta configurada
- Compruebe que el polling de getUpdates no esté en ejecución (son mutuamente excluyentes)
Referencia de configuración (Zalo)
Configuración completa: Configuration Opciones del proveedor:channels.zalo.enabled: habilitar/deshabilitar el inicio del canal.channels.zalo.botToken: token del bot de Zalo Bot Platform.channels.zalo.tokenFile: leer el token desde una ruta de archivo.channels.zalo.dmPolicy:pairing | allowlist | open | disabled(predeterminado: emparejamiento).channels.zalo.allowFrom: lista de permitidos de mensajes directos (IDs de usuario).openrequiere"*". El asistente solicitará IDs numéricos.channels.zalo.mediaMaxMb: límite de medios entrantes/salientes (MB, predeterminado 5).channels.zalo.webhookUrl: habilitar modo webhook (se requiere HTTPS).channels.zalo.webhookSecret: secreto del webhook (8–256 caracteres).channels.zalo.webhookPath: ruta del webhook en el servidor HTTP del Gateway.channels.zalo.proxy: URL de proxy para solicitudes a la API.
channels.zalo.accounts.<id>.botToken: token por cuenta.channels.zalo.accounts.<id>.tokenFile: archivo de token por cuenta.channels.zalo.accounts.<id>.name: nombre para mostrar.channels.zalo.accounts.<id>.enabled: habilitar/deshabilitar la cuenta.channels.zalo.accounts.<id>.dmPolicy: política de mensajes directos por cuenta.channels.zalo.accounts.<id>.allowFrom: lista de permitidos por cuenta.channels.zalo.accounts.<id>.webhookUrl: URL de webhook por cuenta.channels.zalo.accounts.<id>.webhookSecret: secreto de webhook por cuenta.channels.zalo.accounts.<id>.webhookPath: ruta de webhook por cuenta.channels.zalo.accounts.<id>.proxy: URL de proxy por cuenta.