Regional platforms
Zalo
Estado: experimental. Tanto los mensajes directos como los chats grupales están implementados; la tabla de capacidades que aparece a continuación refleja el comportamiento verificado en bots de Zalo Bot Creator / Marketplace.
Plugin incluido
Zalo se distribuye como Plugin incluido en las versiones actuales de OpenClaw, por lo que las compilaciones empaquetadas no necesitan una instalación aparte.
En una compilación anterior o una instalación personalizada que excluya Zalo, instala directamente el paquete npm:
- Instalación:
openclaw plugins install @openclaw/zalo - Versión fijada:
openclaw plugins install @openclaw/zalo@2026.6.11 - Desde un repositorio local:
openclaw plugins install ./path/to/local/zalo-plugin - Detalles: Plugins
Configuración rápida
- Crea un token de bot en https://bot.zaloplatforms.com (inicia sesión, crea un bot y configura los ajustes). El token tiene el formato
numeric_id:secret; en los bots de Marketplace, el token utilizable en tiempo de ejecución puede aparecer en el mensaje de bienvenida del bot. - Define el token mediante la variable de entorno
ZALO_BOT_TOKEN=...(solo para la cuenta predeterminada) o en la configuración. - Reinicia el Gateway.
- Aprueba el código de vinculación en el primer contacto por mensaje directo (la política predeterminada para mensajes directos es la vinculación).
Configuración mínima:
{ channels: { zalo: { enabled: true, accounts: { default: { botToken: "12345689:abc-xyz", dmPolicy: "pairing", }, }, }, },}Varias cuentas: añade más entradas en channels.zalo.accounts.<id>, cada una con sus propios valores botToken/name. channels.zalo.botToken (plano, sin accounts) es una forma abreviada heredada para una sola cuenta; para configuraciones nuevas, se recomienda accounts.<id>.*.
Qué es
Zalo es una aplicación de mensajería orientada a Vietnam. Su API de bots permite que el Gateway ejecute un bot tanto para conversaciones individuales como para chats grupales, con enrutamiento determinista de vuelta a Zalo (el modelo nunca elige los canales).
Esta página trata sobre los bots de Zalo Bot Creator / Marketplace. Los bots de Zalo Official Account (OA) corresponden a una superficie de producto distinta y pueden comportarse de manera diferente; esta página no los cubre.
Cómo funciona
- Los mensajes entrantes se normalizan en el contenedor compartido del canal con marcadores de posición para contenido multimedia.
- Las respuestas siempre se enrutan de vuelta al mismo chat de Zalo; no se usan respuestas con cita (
replyToModeestá desactivado de forma fija). - De forma predeterminada se usa sondeo prolongado (
getUpdates); el modo Webhook está disponible mediantechannels.zalo.webhookUrl. - En los grupos se requiere una @mención para activar el bot; esto no se puede configurar por canal.
Límites
| Límite | Valor |
|---|---|
| Tamaño de fragmento de texto saliente | 2000 caracteres (límite de la API de Zalo) |
| Tamaño multimedia (entrante/saliente) | channels.zalo.mediaMaxMb, valor predeterminado 5 MB |
| Cuerpo de solicitud de Webhook | 1 MB, tiempo de espera de lectura de 30 s |
| Límite de frecuencia del Webhook | 120 solicitudes / 60 s por ruta+IP del cliente; después, HTTP 429 |
| Ventana de eventos duplicados del Webhook | 5 minutos (clave: ruta + cuenta + nombre del evento + chat + remitente + identificador del mensaje) |
Control de acceso
Mensajes directos
channels.zalo.dmPolicy:pairing(predeterminado) |allowlist|open|disabled.- Vinculación: los remitentes desconocidos reciben un código de vinculación; los mensajes se ignoran hasta que se aprueba. Los códigos caducan al cabo de 1 hora.
openclaw pairing list zaloopenclaw pairing approve zalo <CODE>- Detalles: Vinculación
channels.zalo.allowFromacepta identificadores numéricos de usuarios de Zalo (sin búsqueda por nombre de usuario).openrequiere"*".
Grupos
El Plugin admite chats grupales (chatTypes: ["direct", "group"]), sujetos a una mención y a la política de grupos:
channels.zalo.groupPolicy:open|allowlist|disabled.channels.zalo.groupAllowFromrestringe qué identificadores de remitentes pueden activar el bot en grupos; si no está definido, se utilizaallowFrom.- Resolución predeterminada: cuando
channels.zaloestá configurado, ungroupPolicysin definir se resuelve comoopen. Cuandochannels.zalono existe en absoluto, el tiempo de ejecución adopta de forma seguraallowlist. - Advertencia observada en entornos reales: en algunas configuraciones de bots de Marketplace, el bot no se pudo añadir a ningún grupo. Si te ocurre, compruébalo en los ajustes de Zalo Bot Platform de tu bot; es una restricción de la plataforma, no una política de OpenClaw.
Sondeo prolongado frente a Webhook
- Valor predeterminado: sondeo prolongado (no se requiere una URL pública).
- Modo Webhook: define
channels.zalo.webhookUrlychannels.zalo.webhookSecret.- La URL del Webhook debe usar HTTPS.
- El secreto del Webhook debe tener entre 8 y 256 caracteres.
- Zalo envía los eventos con una cabecera
X-Bot-Api-Secret-Token, que se verifica mediante una comparación en tiempo constante. - El servidor HTTP del Gateway procesa las solicitudes del Webhook en
channels.zalo.webhookPath(de forma predeterminada, la ruta de la URL del Webhook). - Las solicitudes deben usar
Content-Type: application/json(o un tipo multimedia+json). - Según la documentación de la API de Zalo, el sondeo mediante getUpdates y el Webhook son mutuamente excluyentes.
Tipos de mensajes compatibles
- Texto: compatibilidad completa, dividido en fragmentos de 2000 caracteres.
- Contenido multimedia: entrante y saliente, limitado por
mediaMaxMb. - Reacciones, hilos, encuestas y comandos nativos: el Plugin no los admite.
- Transmisión: el Plugin declara la capacidad de transmisión por bloques, pero Zalo no dispone de controles específicos de ajuste para la cola saliente o la combinación de texto (a diferencia de otros canales regionales); si esto es importante para tu caso de uso, verifica el comportamiento actual en tu entorno.
Capacidades
| Función | Estado |
|---|---|
| Mensajes directos | Compatible |
| Grupos | Compatible (requiere mención) |
| Contenido multimedia (entrante/saliente) | Compatible, limitado por mediaMaxMb |
| Reacciones | No compatible |
| Hilos | No compatible |
| Encuestas | No compatible |
| Comandos nativos | No compatible |
| Respuesta a mensaje / cita | No se utiliza (desactivado de forma fija) |
Destinos de entrega (CLI/Cron)
Usa un identificador de chat como destino:
openclaw message send --channel zalo --target 123456789 --message "hi"Solución de problemas
El bot no responde:
- Comprueba el token:
openclaw channels status --probe - Verifica que el remitente esté aprobado (vinculación o
allowFrom) - Comprueba los registros del Gateway:
openclaw logs --follow
El Webhook no recibe eventos:
- Confirma que la URL del Webhook use HTTPS
- Confirma que el secreto tenga entre 8 y 256 caracteres
- Confirma que el punto de conexión HTTP del Gateway sea accesible en la ruta configurada
- Confirma que el sondeo mediante getUpdates no se esté ejecutando también (son mutuamente excluyentes)
- Una ráfaga de solicitudes puede devolver HTTP 429 (120 solicitudes / 60 s por ruta+IP); espera y vuelve a intentarlo
Referencia de configuración
Configuración completa: Configuración
| Ajuste | Descripción | Valor predeterminado |
|---|---|---|
channels.zalo.enabled |
Activa o desactiva el inicio del canal | true |
channels.zalo.accounts.<id>.botToken |
Token del bot de Zalo Bot Platform | - |
channels.zalo.accounts.<id>.tokenFile |
Lee el token desde un archivo (se rechazan enlaces simbólicos) | - |
channels.zalo.accounts.<id>.name |
Nombre para mostrar | - |
channels.zalo.accounts.<id>.enabled |
Activa o desactiva esta cuenta | true |
channels.zalo.accounts.<id>.dmPolicy |
Política de mensajes directos por cuenta | pairing |
channels.zalo.accounts.<id>.allowFrom |
Lista de permitidos para mensajes directos (identificadores de usuario) | - |
channels.zalo.accounts.<id>.groupPolicy |
Política de grupos por cuenta | consulta Grupos |
channels.zalo.accounts.<id>.groupAllowFrom |
Lista de remitentes permitidos en grupos; si no existe, usa allowFrom |
- |
channels.zalo.accounts.<id>.mediaMaxMb |
Límite de contenido multimedia entrante/saliente (MB) | 5 |
channels.zalo.accounts.<id>.webhookUrl |
Activa el modo Webhook (requiere HTTPS) | - |
channels.zalo.accounts.<id>.webhookSecret |
Secreto del Webhook (8-256 caracteres) | - |
channels.zalo.accounts.<id>.webhookPath |
Ruta del Webhook en el servidor HTTP del Gateway | ruta de la URL del Webhook |
channels.zalo.accounts.<id>.proxy |
URL del proxy para solicitudes a la API | - |
channels.zalo.accounts.<id>.responsePrefix |
Sustitución del prefijo de respuesta saliente | - |
channels.zalo.defaultAccount |
Cuenta predeterminada cuando hay varias configuradas | default |
channels.zalo.botToken, channels.zalo.dmPolicy y otras claves planas de nivel superior son la forma abreviada heredada para una sola cuenta de los campos anteriores; se admiten ambas formas.
Opción de entorno: ZALO_BOT_TOKEN=... solo se resuelve como el token de la cuenta predeterminada.
Relacionado
- Descripción general de los canales - todos los canales compatibles
- Vinculación - autenticación de mensajes directos y flujo de vinculación
- Grupos - comportamiento de los chats grupales y activación mediante menciones
- Enrutamiento de canales - enrutamiento de sesiones para mensajes
- Seguridad - modelo de acceso y refuerzo de seguridad