zca-js, au sein du processus, sans binaire CLI externe.
Installation
Zalo Personal est un plugin externe officiel, non intégré au cœur. Installez-le avant de l’utiliser :- Épingler une version :
openclaw plugins install @openclaw/zalouser@<version> - Depuis un dépôt source extrait :
openclaw plugins install ./path/to/local/zalouser-plugin - Détails : Plugins
Configuration rapide
- Installez le plugin (ci-dessus).
- Connectez-vous (par QR, sur la machine du Gateway) :
openclaw channels login --channel zalouser- Scannez le code QR avec l’application mobile Zalo.
- Activez le canal :
- Redémarrez le Gateway (ou terminez la configuration).
- L’accès aux messages privés utilise l’association par défaut ; approuvez le code d’association lors du premier contact.
Présentation
- Fonctionne entièrement au sein du processus via la bibliothèque
zca-js(sans binaire externezca/openzca). - Utilise les écouteurs d’événements natifs (
message,error) pour recevoir les messages entrants. - Envoie les réponses directement au moyen de l’API JS (texte, média ou lien).
- Conçu pour les cas d’utilisation d’un « compte personnel » où l’API Zalo Bot n’est pas disponible.
Nommage
L’identifiant du canal estzalouser afin d’indiquer explicitement que cette intégration automatise un compte utilisateur Zalo personnel (non officiel). zalo est réservé à une éventuelle future intégration officielle de l’API Zalo.
Recherche des identifiants (annuaire)
Limites
- Le texte sortant est découpé en segments de 2 000 caractères (limite du client Zalo).
- La diffusion en continu n’est pas prise en charge.
Contrôle d’accès (messages privés)
channels.zalouser.dmPolicy : pairing | allowlist | open | disabled (valeur par défaut : pairing).
channels.zalouser.allowFrom doit utiliser des identifiants utilisateur Zalo stables. Cette option peut également référencer des groupes statiques d’accès des expéditeurs (accessGroup:<name>). Lors de la configuration interactive, les noms saisis peuvent être résolus en identifiants grâce à la recherche de contacts intégrée au processus du plugin.
Si un nom brut reste dans la configuration, il n’est résolu au démarrage que lorsque channels.zalouser.dangerouslyAllowNameMatching: true est activé. Sans cette activation explicite, les vérifications des expéditeurs à l’exécution reposent uniquement sur les identifiants et les noms bruts sont ignorés pour l’autorisation.
Approuvez au moyen de :
openclaw pairing list zalouseropenclaw pairing approve zalouser <code>
Accès aux groupes (facultatif)
- Valeur par défaut :
channels.zalouser.groupPolicy = "allowlist"(les groupes nécessitent une entrée explicite dans la liste d’autorisation). - Ouvrir tous les groupes :
channels.zalouser.groupPolicy = "open". - Bloquer tous les groupes :
channels.zalouser.groupPolicy = "disabled". - Avec
groupPolicy = "allowlist":- Les clés de
channels.zalouser.groupsdoivent être des identifiants de groupe stables ; les noms ne sont résolus en identifiants au démarrage que lorsquechannels.zalouser.dangerouslyAllowNameMatching: trueest activé. channels.zalouser.groupAllowFromdétermine quels expéditeurs des groupes autorisés peuvent déclencher le bot ; les groupes statiques d’accès des expéditeurs peuvent être référencés avecaccessGroup:<name>.
- Les clés de
- L’assistant de configuration peut demander les listes d’autorisation des groupes.
- Par défaut, la correspondance avec la liste d’autorisation des groupes repose uniquement sur les identifiants. Les noms non résolus sont ignorés pour l’authentification, sauf si
channels.zalouser.dangerouslyAllowNameMatching: trueest activé. channels.zalouser.dangerouslyAllowNameMatching: trueest un mode de compatibilité d’urgence qui réactive la résolution au démarrage des noms modifiables et la correspondance des noms de groupe à l’exécution.- Pour les messages de groupe ordinaires,
groupAllowFromne se rabat pas surallowFrom: si cette option reste vide pour un groupe figurant dans la liste d’autorisation, tout expéditeur peut interagir dans ce groupe. Les commandes de contrôle autorisées (par exemple/new) constituent l’exception ; lorsquegroupAllowFromest vide, la vérification de leur expéditeur se rabat surallowFrom.
channels.zalouser.groups.<id>.allow est un ancien nom de champ ; la configuration actuelle utilise enabled. openclaw doctor --fix migre automatiquement allow vers enabled.Filtrage des mentions dans les groupes
channels.zalouser.groups.<group>.requireMentiondétermine si les réponses dans les groupes nécessitent une mention.- Ordre de résolution : identifiant du groupe -> alias
group:<id>-> nom/slug du groupe (les correspondances fondées sur le nom ne s’appliquent que lorsquedangerouslyAllowNameMatching: true) ->*-> valeur par défaut (true). - S’applique aussi bien aux groupes figurant dans la liste d’autorisation qu’au mode de groupes ouverts.
- Citer un message du bot compte comme une mention implicite pour l’activation dans un groupe.
- Les commandes de contrôle autorisées (par exemple
/new) peuvent contourner le filtrage des mentions. - Lorsqu’un message de groupe est ignoré parce qu’une mention est requise, OpenClaw le conserve dans l’historique de groupe en attente et l’inclut dans le prochain message de groupe traité.
- Limite de l’historique des groupes :
channels.zalouser.historyLimit, puismessages.groupChat.historyLimit, puis une valeur de repli de50.
Comptes multiples
Les comptes correspondent à des profilszalouser dans l’état d’OpenClaw. Exemple :
Variables d’environnement
La sélection du profil peut également provenir de variables d’environnement :
Les noms de profil sélectionnent les identifiants de connexion Zalo enregistrés dans l’état d’OpenClaw. Ordre de résolution :
profileexplicite dans la configuration.ZALOUSER_PROFILE.ZCA_PROFILE.- L’identifiant du compte pour les comptes autres que celui par défaut, ou
defaultpour le compte par défaut.
profile pour chaque compte dans la configuration afin qu’une seule variable d’environnement ne conduise pas plusieurs comptes à partager la même session de connexion.
Saisie, réactions et accusés de réception
- OpenClaw envoie un événement de saisie avant d’envoyer une réponse (dans la mesure du possible).
- L’action de réaction aux messages
reactest prise en charge pourzalouserdans les actions de canal.- Utilisez
remove: truepour supprimer d’un message un émoji de réaction précis. - Sémantique des réactions : Réactions
- Utilisez
- Pour les messages entrants comportant des métadonnées d’événement, OpenClaw envoie des accusés de livraison et de lecture (dans la mesure du possible).
Dépannage
La connexion n’est pas conservée :openclaw channels status --probe- Reconnexion :
openclaw channels logout --channel zalouser && openclaw channels login --channel zalouser
- Utilisez des identifiants numériques dans
allowFrom/groupAllowFromet des identifiants de groupe stables dansgroups. Si vous devez intentionnellement utiliser les noms exacts d’amis ou de groupes, activezchannels.zalouser.dangerouslyAllowNameMatching: true.
zca/la CLI :
- Supprimez toute dépendance supposée à un processus
zcaexterne ; le canal fonctionne désormais entièrement au sein du processus viazca-js, sans binaire CLI externe.
Pages connexes
- Vue d’ensemble des canaux - tous les canaux pris en charge
- Association - authentification des messages privés et processus d’association
- Groupes - comportement des discussions de groupe et filtrage des mentions
- Routage des canaux - routage des sessions pour les messages
- Sécurité - modèle d’accès et durcissement