Zalo (Bot API)¶
Statut : experimental. Messages prives uniquement ; groupes bientot disponibles selon la documentation Zalo.
Plugin requis¶
Zalo est fourni sous forme de plugin et nâest pas inclus dans lâinstallation de base.
- Installer via la CLIÂ :
openclaw plugins install @openclaw/zalo - Ou selectionner Zalo pendant la prise en main et confirmer lâinvite dâinstallation
- Details : Plugins
Demarrage rapide (debutant)¶
- Installer le plugin Zalo :
- Depuis un checkout des sources :
openclaw plugins install ./extensions/zalo- Depuis npm (si publie) :openclaw plugins install @openclaw/zalo- Ou choisir Zalo lors de la prise en main et confirmer lâinvite dâinstallation - Definir le jeton :
- Env:
ZALO_BOT_TOKEN=...- Ou configuration :channels.zalo.botToken: "...". - Redemarrer la Gateway (passerelle) (ou terminer la prise en main).
- L'accÚs DM est appairage par défaut; approuve le code d'appairage au premier contact.
Configuration minimale :
{
channels: {
zalo: {
enabled: true,
botToken: "12345689:abc-xyz",
dmPolicy: "pairing",
},
},
}
De quoi sâagit-il¶
Zalo est une application de messagerie axee sur le Vietnam ; son Bot API permet a la Gateway (passerelle) dâexecuter un bot pour des conversations 1:1. Câest un bon choix pour le support ou les notifications lorsque vous souhaitez un routage deterministe vers Zalo.
- Un canal Zalo Bot API gere par la Gateway (passerelle).
- Routage deterministe : les reponses retournent vers Zalo ; le modele ne choisit jamais les canaux.
- Les Messages prives partagent la session principale de lâagent.
- Les groupes ne sont pas encore pris en charge (la documentation Zalo indique « coming soon »).
Configuration (chemin rapide)¶
1. Creer un jeton de bot (Zalo Bot Platform)¶
- Accedez a https://bot.zaloplatforms.com et connectez-vous.
- Creez un nouveau bot et configurez ses parametres.
- Copiez le jeton du bot (format :
12345689:abc-xyz).
2) Configurer le jeton (env ou config)¶
Exemple :
{
channels: {
zalo: {
enabled: true,
botToken: "12345689:abc-xyz",
dmPolicy: "pairing",
},
},
}
Option env : ZALO_BOT_TOKEN=... (fonctionne uniquement pour le compte par defaut).
Prise en charge multi-comptes : utilisez channels.zalo.accounts avec des jetons par compte et, en option, name.
- Redemarrez la Gateway (passerelle). Zalo demarre lorsquâun jeton est resolu (env ou config).
- Lâacces aux Messages prives est en mode appairage par defaut. Approuvez le code lorsque le bot est contacte pour la premiere fois.
Comment ça marche (comportement)¶
- Les messages entrants sont normalises dans lâenveloppe de canal partagee avec des espaces reserves pour les medias.
- Les reponses sont toujours routees vers la meme conversation Zalo.
- Scrutation longue par defaut ; mode webhook disponible avec
channels.zalo.webhookUrl.
Limites¶
- Les textes sortants sont decoupes en segments de 2000 caracteres (limite de lâAPI Zalo).
- Les telechargements/envois de medias sont plafonnes par
channels.zalo.mediaMaxMb(valeur par defaut : 5). - Le streaming est bloque par defaut, la limite de 2000 caracteres rendant le streaming moins utile.
ContrÎle d'accÚs (DMs)¶
AccÚs DM¶
- Par defaut :
channels.zalo.dmPolicy = "pairing". Les expĂ©diteurs inconnus recoivent un code dâappairage ; les messages sont ignores jusquâa approbation (les codes expirent apres 1 heure). - Approuver via :
openclaw pairing list zaloopenclaw pairing approve zalo <CODE>- Lâappairage est lâechange de jeton par defaut. Details : Pairing
channels.zalo.allowFromaccepte des identifiants utilisateur numeriques (aucune recherche par nom dâutilisateur disponible).
Scrutation longue vs webhook¶
- Par defaut : scrutation longue (aucune URL publique requise).
- Mode webhook : definir
channels.zalo.webhookUrletchannels.zalo.webhookSecret. - Le secret du webhook doit comporter entre 8 et 256 caracteres.
- LâURL du webhook doit utiliser HTTPS.
- Zalo envoie les evenements avec lâen-tete
X-Bot-Api-Secret-Tokenpour la verification. - Le serveur HTTP de la Gateway (passerelle) traite les requetes webhook a
channels.zalo.webhookPath(par defaut, le chemin de lâURL du webhook).
Remarque : getUpdates (scrutation) et le webhook sont mutuellement exclusifs selon la documentation de lâAPI Zalo.
Types de messages pris en charge¶
- Messages texte : prise en charge complete avec decoupage en segments de 2000 caracteres.
- Messages image : telechargement et traitement des images entrantes ; envoi dâimages via
sendPhoto. - Autocollants : journalises mais pas entierement traites (pas de reponse de lâagent).
- Types non pris en charge : journalises (par ex., messages provenant dâutilisateurs proteges).
Capacites¶
| Fonctionnalite | Statut |
|---|---|
| Messages directs | â Pris en charge |
| Groupes | â Bientot disponible (docs Zalo) |
| Medias (images) | â Pris en charge |
| RĂ©actions | â Non pris en charge |
| Fil de discussion | â Non pris en charge |
| Sondages | â Non pris en charge |
| Commandes natives | â Non pris en charge |
| Diffusion en continu | â ïž Bloque (limite 2000 caracteres) |
Cibles de livraison (CLI/cron)¶
- Utilisez un identifiant de conversation comme cible.
- Exemple :
openclaw message send --channel zalo --target 123456789 --message "hi".
Problemes courants¶
Le bot ne repond pas :
- Verifiez que le jeton est valide :
openclaw channels status --probe - Verifiez que lâexpediteur est approuve (appairage ou allowFrom)
- Consultez les journaux de la Gateway (passerelle)Â :
openclaw logs --follow
Le webhook ne recoit pas dâevenements :
- Assurez-vous que lâURL du webhook utilise HTTPS
- Verifiez que le jeton secret comporte 8 a 256 caracteres
- Confirmez que le point de terminaison HTTP de la Gateway (passerelle) est accessible sur le chemin configure
- Verifiez que la scrutation getUpdates nâest pas en cours (ils sont mutuellement exclusifs)
Reference de configuration (Zalo)¶
Configuration complete : Configuration
Options du fournisseur :
channels.zalo.enabled : activer/desactiver le demarrage du canal.channels.zalo.botToken : jeton de bot depuis Zalo Bot Platform.channels.zalo.tokenFile : lire le jeton depuis un chemin de fichier.channels.zalo.dmPolicy :pairing | allowlist | open | disabled(par defaut : appairage).channels.zalo.allowFrom : liste dâautorisation des Messages prives (identifiants utilisateur).openrequiert"*". Lâassistant demandera des identifiants numeriques.channels.zalo.mediaMaxMb : plafond des medias entrants/sortants (Mo, defaut : 5).channels.zalo.webhookUrl : activer le mode webhook (HTTPS requis).channels.zalo.webhookSecret : secret du webhook (8â256 caracteres).channels.zalo.webhookPath : chemin du webhook sur le serveur HTTP de la Gateway (passerelle).channels.zalo.proxy : URL de proxy pour les requetes API.
Options multi-comptes :
channels.zalo.accounts.<id>.botToken : jeton par compte.channels.zalo.accounts.<id>.tokenFile : fichier de jeton par compte.channels.zalo.accounts.<id>.name : nom dâaffichage.channels.zalo.accounts.<id>.enabled : activer/desactiver le compte.channels.zalo.accounts.<id>.dmPolicy : politique de Messages prives par compte.channels.zalo.accounts.<id>.allowFrom : liste dâautorisation par compte.channels.zalo.accounts.<id>.webhookUrl : URL de webhook par compte.channels.zalo.accounts.<id>.webhookSecret : secret de webhook par compte.channels.zalo.accounts.<id>.webhookPath : chemin de webhook par compte.channels.zalo.accounts.<id>.proxy : URL de proxy par compte.