Zalo Personal (non officiel)
Statut : experimental. Cette integration automatise un compte Zalo personnel via zca-js natif dans OpenClaw.
Avertissement : Il sâagit dâune integration non officielle qui peut entrainer la suspension/le bannissement du compte. Utilisez a vos propres risques.
Plugin requis
Zalo Personal est fourni comme plugin et nâest pas inclus dans lâinstallation de base.
- Installation via CLI :
openclaw plugins install @openclaw/zalouser - Ou depuis un checkout source :
openclaw plugins install ./extensions/zalouser - Details : Plugins
Aucun binaire CLI externe zca/openzca nâest requis.
Configuration rapide (debutant)
- Installez le plugin (voir ci-dessus).
- Connexion (QR, sur la machine de la Gateway) :
openclaw channels login --channel zalouser- Scannez le code QR avec lâapplication mobile Zalo.
- Activez le canal :
{
channels: {
zalouser: {
enabled: true,
dmPolicy: "pairing",
},
},
}
- Redemarrez la Gateway (ou terminez lâonboarding).
- Lâacces DM est par defaut en mode appairage ; approuvez le code dâappairage au premier contact.
Description
- Fonctionne entierement en processus via
zca-js. - Utilise des ecouteurs dâevenements natifs pour recevoir les messages entrants.
- Envoie les reponses directement via lâAPI JS (texte/media/lien).
- Concu pour les cas dâutilisation de « compte personnel » ou lâAPI Bot Zalo nâest pas disponible.
Nommage
LâID de canal est zalouser pour indiquer explicitement que ceci automatise un compte utilisateur Zalo personnel (non officiel). Nous reservons zalo pour une potentielle future integration API Zalo officielle.
Trouver les IDs (annuaire)
Utilisez le CLI annuaire pour decouvrir les pairs/groupes et leurs IDs :
openclaw directory self --channel zalouser
openclaw directory peers list --channel zalouser --query "name"
openclaw directory groups list --channel zalouser --query "work"
Limites
- Le texte sortant est decoupe a ~2000 caracteres (limites du client Zalo).
- Le streaming est bloque par defaut.
Controle dâacces (DMs)
channels.zalouser.dmPolicy prend en charge : pairing | allowlist | open | disabled (par defaut : pairing).
channels.zalouser.allowFrom accepte les IDs utilisateur ou les noms. Pendant lâonboarding, les noms sont resolus en IDs en utilisant la recherche de contacts en processus du plugin.
Approbation via :
openclaw pairing list zalouseropenclaw pairing approve zalouser <code>
Acces aux groupes (optionnel)
- Par defaut :
channels.zalouser.groupPolicy = "open"(groupes autorises). Utilisezchannels.defaults.groupPolicypour surcharger la valeur par defaut quand non defini. - Restreignez a une liste dâautorisation avec :
channels.zalouser.groupPolicy = "allowlist"channels.zalouser.groups(les cles doivent etre des IDs de groupe stables ; les noms sont resolus en IDs au demarrage quand câest possible)channels.zalouser.groupAllowFrom(controle quels expediteurs dans les groupes autorises peuvent declencher le bot)
- Bloquer tous les groupes :
channels.zalouser.groupPolicy = "disabled". - Lâassistant de configuration peut demander des listes dâautorisation de groupe.
- Au demarrage, OpenClaw resout les noms de groupe/utilisateur dans les listes dâautorisation en IDs et enregistre la correspondance.
- La correspondance de liste dâautorisation de groupe est par defaut sur ID uniquement. Les noms non resolus sont ignores pour lâauthentification sauf si
channels.zalouser.dangerouslyAllowNameMatching: trueest active. channels.zalouser.dangerouslyAllowNameMatching: trueest un mode de compatibilite dâurgence qui reactive la correspondance par nom de groupe mutable.- Si
groupAllowFromnâest pas defini, lâexecution se replie surallowFrompour les verifications dâexpediteur de groupe. - Les verifications dâexpediteur sâappliquent aux messages de groupe normaux et aux commandes de controle (par exemple
/new,/reset).
Exemple :
{
channels: {
zalouser: {
groupPolicy: "allowlist",
groupAllowFrom: ["1471383327500481391"],
groups: {
"123456789": { allow: true },
"Work Chat": { allow: true },
},
},
},
}
Filtrage par mention dans les groupes
channels.zalouser.groups.<group>.requireMentioncontrole si les reponses de groupe necessitent une mention.- Ordre de resolution : ID de groupe exact -> slug de groupe normalise ->
*-> defaut (true). - Cela sâapplique aux groupes autorises et au mode groupe ouvert.
- Les commandes de controle autorisees (par exemple
/new) peuvent contourner le filtrage par mention. - Quand un message de groupe est ignore parce quâune mention est requise, OpenClaw le stocke comme historique de groupe en attente et lâinclut au prochain message de groupe traite.
- La limite dâhistorique de groupe est par defaut
messages.groupChat.historyLimit(repli50). Vous pouvez la surcharger par compte avecchannels.zalouser.historyLimit.
Exemple :
{
channels: {
zalouser: {
groupPolicy: "allowlist",
groups: {
"*": { allow: true, requireMention: true },
"Work Chat": { allow: true, requireMention: false },
},
},
},
}
Multi-comptes
Les comptes correspondent a des profils zalouser dans lâetat OpenClaw. Exemple :
{
channels: {
zalouser: {
enabled: true,
defaultAccount: "default",
accounts: {
work: { enabled: true, profile: "work" },
},
},
},
}
Saisie, reactions et accuses de reception
- OpenClaw envoie un evenement de saisie avant dâenvoyer une reponse (meilleur effort).
- Lâaction de reaction de message
reactest prise en charge pourzalouserdans les actions de canal.- Utilisez
remove: truepour retirer un emoji de reaction specifique dâun message. - Semantique des reactions : Reactions
- Utilisez
- Pour les messages entrants qui incluent des metadonnees dâevenement, OpenClaw envoie des accuses de reception de livraison + lecture (meilleur effort).
Depannage
La connexion ne persiste pas :
openclaw channels status --probe- Reconnexion :
openclaw channels logout --channel zalouser && openclaw channels login --channel zalouser
Le nom dans la liste dâautorisation/groupe nâa pas ete resolu :
- Utilisez des IDs numeriques dans
allowFrom/groupAllowFrom/groups, ou des noms exacts dâamis/groupes.
Mise a jour depuis une ancienne configuration basee sur CLI :
- Supprimez toute hypothese dâancien processus
zcaexterne. - Le canal fonctionne maintenant entierement dans OpenClaw sans binaires CLI externes.