WhatsApp (canal Web)
Statut : prêt pour la production via WhatsApp Web (Baileys). La Gateway possède la ou les sessions liées.Installation (à la demande)
- L’onboarding (
openclaw onboard) etopenclaw channels add --channel whatsappproposent d’installer le plugin WhatsApp la première fois que vous le sélectionnez. openclaw channels login --channel whatsapppropose également le flux d’installation lorsque le plugin n’est pas encore présent.- Canal de dev + extraction git : utilise par défaut le chemin du plugin local.
- Stable/Beta : utilise par défaut le package npm
@openclaw/whatsapp.
Appairage
La politique DM par défaut est l’appairage pour les expéditeurs inconnus.
Dépannage du canal
Diagnostics inter-canaux et guides de réparation.
Configuration de la Gateway
Modèles et exemples complets de configuration de canal.
Configuration rapide
OpenClaw recommande d’exécuter WhatsApp sur un numéro distinct lorsque c’est possible. (Les métadonnées du canal et le flux de configuration sont optimisés pour cette configuration, mais les configurations avec numéro personnel sont également prises en charge.)
Modèles de déploiement
Numéro dédié (recommandé)
Numéro dédié (recommandé)
Il s’agit du mode opérationnel le plus propre :
- identité WhatsApp distincte pour OpenClaw
- limites de routage et listes d’autorisation DM plus claires
- risque plus faible de confusion avec l’auto-discussion
Solution de repli avec numéro personnel
Solution de repli avec numéro personnel
L’onboarding prend en charge le mode numéro personnel et écrit une base adaptée à l’auto-discussion :
dmPolicy: "allowlist"allowFrominclut votre numéro personnelselfChatMode: true
allowFrom.Portée du canal WhatsApp Web uniquement
Portée du canal WhatsApp Web uniquement
Le canal de plateforme de messagerie est basé sur WhatsApp Web (
Baileys) dans l’architecture actuelle des canaux OpenClaw.Il n’existe pas de canal de messagerie WhatsApp Twilio distinct dans le registre intégré des canaux de chat.Modèle d’exécution
- La Gateway possède le socket WhatsApp et la boucle de reconnexion.
- Les envois sortants nécessitent un écouteur WhatsApp actif pour le compte cible.
- Les discussions de statut et de diffusion sont ignorées (
@status,@broadcast). - Les discussions directes utilisent les règles de session DM (
session.dmScope; par défautmainregroupe les DM dans la session principale de l’agent). - Les sessions de groupe sont isolées (
agent:<agentId>:whatsapp:group:<jid>).
Contrôle d’accès et activation
- Politique DM
- Politique de groupe + listes d’autorisation
- Mentions + /activation
channels.whatsapp.dmPolicy contrôle l’accès aux discussions directes :pairing(par défaut)allowlistopen(nécessite queallowFrominclue"*")disabled
allowFrom accepte des numéros au format E.164 (normalisés en interne).Remplacement multi-comptes : channels.whatsapp.accounts.<id>.dmPolicy (et allowFrom) ont priorité sur les valeurs par défaut au niveau du canal pour ce compte.Détails du comportement à l’exécution :- les appairages sont persistés dans le magasin d’autorisations du canal et fusionnés avec
allowFromconfiguré - si aucune liste d’autorisation n’est configurée, le numéro lié à soi-même est autorisé par défaut
- les DM sortants
fromMene sont jamais appairés automatiquement
Comportement avec numéro personnel et auto-discussion
Lorsque le numéro lié à soi-même est également présent dansallowFrom, les protections d’auto-discussion WhatsApp s’activent :
- ignorer les accusés de lecture pour les tours d’auto-discussion
- ignorer le comportement de déclenchement automatique par mention-JID qui vous notifierait autrement vous-même
- si
messages.responsePrefixn’est pas défini, les réponses d’auto-discussion utilisent par défaut[{identity.name}]ou[openclaw]
Normalisation des messages et contexte
Enveloppe entrante + contexte de réponse
Enveloppe entrante + contexte de réponse
Les messages WhatsApp entrants sont encapsulés dans l’enveloppe entrante partagée.Si une réponse citée existe, le contexte est ajouté sous cette forme :Les champs de métadonnées de réponse sont également renseignés lorsqu’ils sont disponibles (
ReplyToId, ReplyToBody, ReplyToSender, expéditeur JID/E.164).Espaces réservés média et extraction des lieux/contacts
Espaces réservés média et extraction des lieux/contacts
Les messages entrants composés uniquement de média sont normalisés avec des espaces réservés tels que :
<media:image><media:video><media:audio><media:document><media:sticker>
Injection d’historique de groupe en attente
Injection d’historique de groupe en attente
Pour les groupes, les messages non traités peuvent être mis en mémoire tampon et injectés comme contexte lorsque le bot est finalement déclenché.
- limite par défaut :
50 - configuration :
channels.whatsapp.historyLimit - solution de repli :
messages.groupChat.historyLimit 0désactive
[Chat messages since your last reply - for context][Current message - respond to this]
Accusés de lecture
Accusés de lecture
Les accusés de lecture sont activés par défaut pour les messages WhatsApp entrants acceptés.Désactivation globale :Remplacement par compte :Les tours d’auto-discussion ignorent les accusés de lecture même lorsqu’ils sont activés globalement.
Livraison, segmentation et médias
Segmentation du texte
Segmentation du texte
- limite de segment par défaut :
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- le mode
newlineprivilégie les limites de paragraphe (lignes vides), puis revient à une segmentation sûre par longueur
Comportement des médias sortants
Comportement des médias sortants
- prend en charge les charges utiles image, vidéo, audio (note vocale PTT) et document
audio/oggest réécrit enaudio/ogg; codecs=opuspour la compatibilité des notes vocales- la lecture GIF animée est prise en charge via
gifPlayback: truelors des envois vidéo - les légendes sont appliquées au premier élément média lors de l’envoi de charges utiles de réponse multimédia
- la source média peut être HTTP(S),
file://ou des chemins locaux
Limites de taille média et comportement de repli
Limites de taille média et comportement de repli
- limite de sauvegarde des médias entrants :
channels.whatsapp.mediaMaxMb(par défaut50) - limite d’envoi des médias sortants :
channels.whatsapp.mediaMaxMb(par défaut50) - les remplacements par compte utilisent
channels.whatsapp.accounts.<accountId>.mediaMaxMb - les images sont automatiquement optimisées (redimensionnement/balayage qualité) pour respecter les limites
- en cas d’échec d’envoi média, le repli du premier élément envoie un avertissement texte au lieu d’ignorer silencieusement la réponse
Niveau de réaction
channels.whatsapp.reactionLevel contrôle l’ampleur de l’utilisation des réactions emoji par l’agent sur WhatsApp :
| Niveau | Réactions d’accusé | Réactions initiées par l’agent | Description |
|---|---|---|---|
"off" | Non | Non | Aucune réaction |
"ack" | Oui | Non | Réactions d’accusé uniquement (accusé pré-réponse) |
"minimal" | Oui | Oui (conservateur) | Accusé + réactions agent avec recommandations conservatrices |
"extensive" | Oui | Oui (encouragé) | Accusé + réactions agent avec recommandations encouragées |
"minimal".
Les remplacements par compte utilisent channels.whatsapp.accounts.<id>.reactionLevel.
Réactions d’accusé de réception
WhatsApp prend en charge les réactions d’accusé immédiates à la réception entrante viachannels.whatsapp.ackReaction.
Les réactions d’accusé sont contrôlées par reactionLevel — elles sont supprimées lorsque reactionLevel vaut "off".
- envoyées immédiatement après l’acceptation de l’entrée (avant réponse)
- les échecs sont journalisés mais ne bloquent pas la livraison normale de la réponse
- le mode de groupe
mentionsréagit lors des tours déclenchés par mention ; l’activation de groupealwaysagit comme contournement de cette vérification - WhatsApp utilise
channels.whatsapp.ackReaction(l’ancienmessages.ackReactionn’est pas utilisé ici)
Multi-comptes et identifiants
Sélection du compte et valeurs par défaut
Sélection du compte et valeurs par défaut
- les ID de compte proviennent de
channels.whatsapp.accounts - sélection du compte par défaut :
defaults’il est présent, sinon le premier ID de compte configuré (trié) - les ID de compte sont normalisés en interne pour la recherche
Chemins des identifiants et compatibilité héritée
Chemins des identifiants et compatibilité héritée
- chemin d’authentification actuel :
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - fichier de sauvegarde :
creds.json.bak - l’ancienne authentification par défaut dans
~/.openclaw/credentials/est toujours reconnue/migrée pour les flux de compte par défaut
Comportement de déconnexion
Comportement de déconnexion
openclaw channels logout --channel whatsapp [--account <id>] efface l’état d’authentification WhatsApp pour ce compte.Dans les anciens répertoires d’authentification, oauth.json est conservé tandis que les fichiers d’authentification Baileys sont supprimés.Outils, actions et écritures de configuration
- La prise en charge des outils d’agent inclut l’action de réaction WhatsApp (
react). - Barrières d’action :
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Les écritures de configuration initiées depuis le canal sont activées par défaut (désactivation via
channels.whatsapp.configWrites=false).
Dépannage
Non lié (QR requis)
Non lié (QR requis)
Symptôme : le statut du canal indique qu’il n’est pas lié.Correctif :
Lié mais déconnecté / boucle de reconnexion
Lié mais déconnecté / boucle de reconnexion
Symptôme : compte lié avec déconnexions répétées ou tentatives de reconnexion.Correctif :Si nécessaire, reliez avec
channels login.Aucun écouteur actif lors de l’envoi
Aucun écouteur actif lors de l’envoi
Les envois sortants échouent rapidement lorsqu’aucun écouteur Gateway actif n’existe pour le compte cible.Assurez-vous que la Gateway est en cours d’exécution et que le compte est lié.
Messages de groupe ignorés de manière inattendue
Messages de groupe ignorés de manière inattendue
Vérifiez dans cet ordre :
groupPolicygroupAllowFrom/allowFrom- entrées de liste d’autorisation
groups - filtrage par mention (
requireMention+ motifs de mention) - clés dupliquées dans
openclaw.json(JSON5) : les entrées ultérieures remplacent les précédentes, donc gardez un seulgroupPolicypar portée
Avertissement d’exécution Bun
Avertissement d’exécution Bun
L’exécution Gateway WhatsApp doit utiliser Node. Bun est signalé comme incompatible avec un fonctionnement stable de la Gateway WhatsApp/Telegram.
Pointeurs de référence de configuration
Référence principale : Champs WhatsApp à fort signal :- accès :
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - livraison :
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - multi-comptes :
accounts.<id>.enabled,accounts.<id>.authDir, remplacements au niveau du compte - opérations :
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.* - comportement de session :
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit