WhatsApp (canale Web)
Stato: pronto per la produzione tramite WhatsApp Web (Baileys). Il gateway gestisce le sessioni collegate.Installazione (su richiesta)
- L’onboarding (
openclaw onboard) eopenclaw channels add --channel whatsappchiedono di installare il plugin WhatsApp la prima volta che lo selezioni. openclaw channels login --channel whatsappoffre anche il flusso di installazione quando il plugin non è ancora presente.- Canale dev + checkout git: per impostazione predefinita usa il percorso del plugin locale.
- Stable/Beta: per impostazione predefinita usa il pacchetto npm
@openclaw/whatsapp.
Abbinamento
Il criterio predefinito per i DM è l’abbinamento per i mittenti sconosciuti.
Risoluzione dei problemi del canale
Diagnostica cross-channel e procedure di ripristino.
Configurazione del gateway
Modelli ed esempi completi di configurazione del canale.
Configurazione rapida
OpenClaw consiglia di eseguire WhatsApp su un numero separato quando possibile. (I metadati del canale e il flusso di configurazione sono ottimizzati per questa configurazione, ma sono supportate anche configurazioni con numero personale.)
Modelli di distribuzione
Numero dedicato (consigliato)
Numero dedicato (consigliato)
Questa è la modalità operativa più pulita:
- identità WhatsApp separata per OpenClaw
- allowlist dei DM e confini di instradamento più chiari
- minore probabilità di confusione con le chat verso sé stessi
Fallback con numero personale
Fallback con numero personale
L’onboarding supporta la modalità numero personale e scrive una baseline adatta alla chat con sé stessi:
dmPolicy: "allowlist"allowFrominclude il tuo numero personaleselfChatMode: true
allowFrom.Ambito del canale solo WhatsApp Web
Ambito del canale solo WhatsApp Web
Il canale della piattaforma di messaggistica è basato su WhatsApp Web (
Baileys) nell’attuale architettura dei canali di OpenClaw.Non esiste un canale di messaggistica WhatsApp Twilio separato nel registro integrato dei canali chat.Modello di runtime
- Il gateway gestisce il socket WhatsApp e il ciclo di riconnessione.
- Gli invii in uscita richiedono un listener WhatsApp attivo per l’account di destinazione.
- Le chat di stato e broadcast vengono ignorate (
@status,@broadcast). - Le chat dirette usano le regole di sessione DM (
session.dmScope; il valore predefinitomaincomprime i DM nella sessione principale dell’agente). - Le sessioni di gruppo sono isolate (
agent:<agentId>:whatsapp:group:<jid>). - Il trasporto WhatsApp Web rispetta le variabili d’ambiente proxy standard sull’host gateway (
HTTPS_PROXY,HTTP_PROXY,NO_PROXY/ varianti minuscole). Preferisci la configurazione proxy a livello host rispetto alle impostazioni proxy WhatsApp specifiche del canale.
Controllo degli accessi e attivazione
- Criterio DM
- Criterio gruppo + allowlist
- Menzioni + /activation
channels.whatsapp.dmPolicy controlla l’accesso alle chat dirette:pairing(predefinito)allowlistopen(richiede cheallowFromincluda"*")disabled
allowFrom accetta numeri in stile E.164 (normalizzati internamente).Override multi-account: channels.whatsapp.accounts.<id>.dmPolicy (e allowFrom) hanno la precedenza sui valori predefiniti a livello di canale per quell’account.Dettagli del comportamento in runtime:- gli abbinamenti vengono mantenuti nell’allow-store del canale e uniti con
allowFromconfigurato - se non è configurata alcuna allowlist, il numero proprio collegato è consentito per impostazione predefinita
- i DM in uscita
fromMenon vengono mai abbinati automaticamente
Numero personale e comportamento della chat con sé stessi
Quando il numero proprio collegato è presente anche inallowFrom, si attivano le salvaguardie della chat con sé stessi di WhatsApp:
- salta le conferme di lettura per i turni di chat con sé stessi
- ignora il comportamento di attivazione automatica mention-JID che altrimenti farebbe ping a te stesso
- se
messages.responsePrefixnon è impostato, le risposte della chat con sé stessi usano per impostazione predefinita[{identity.name}]o[openclaw]
Normalizzazione dei messaggi e contesto
Envelope in ingresso + contesto della risposta
Envelope in ingresso + contesto della risposta
I messaggi WhatsApp in arrivo vengono racchiusi nell’envelope condiviso in ingresso.Se esiste una risposta citata, il contesto viene aggiunto in questa forma:Anche i campi dei metadati della risposta vengono popolati quando disponibili (
ReplyToId, ReplyToBody, ReplyToSender, sender JID/E.164).Placeholder multimediali ed estrazione di posizione/contatto
Placeholder multimediali ed estrazione di posizione/contatto
I messaggi in ingresso contenenti solo media vengono normalizzati con placeholder come:
<media:image><media:video><media:audio><media:document><media:sticker>
Iniezione della cronologia di gruppo in sospeso
Iniezione della cronologia di gruppo in sospeso
Per i gruppi, i messaggi non elaborati possono essere messi in buffer e iniettati come contesto quando il bot viene infine attivato.
- limite predefinito:
50 - configurazione:
channels.whatsapp.historyLimit - fallback:
messages.groupChat.historyLimit 0disabilita
[Chat messages since your last reply - for context][Current message - respond to this]
Conferme di lettura
Conferme di lettura
Le conferme di lettura sono abilitate per impostazione predefinita per i messaggi WhatsApp in ingresso accettati.Disabilita globalmente:Override per account:I turni di chat con sé stessi saltano le conferme di lettura anche quando sono abilitate globalmente.
Consegna, suddivisione e media
Suddivisione del testo
Suddivisione del testo
- limite predefinito dei blocchi:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- la modalità
newlineprivilegia i confini dei paragrafi (righe vuote), poi usa come fallback una suddivisione sicura per lunghezza
Comportamento dei media in uscita
Comportamento dei media in uscita
- supporta payload di immagini, video, audio (messaggi vocali PTT) e documenti
audio/oggviene riscritto inaudio/ogg; codecs=opusper compatibilità con i messaggi vocali- la riproduzione di GIF animate è supportata tramite
gifPlayback: truenegli invii video - le didascalie vengono applicate al primo elemento multimediale quando si inviano payload di risposta con più media
- la sorgente dei media può essere HTTP(S),
file://o percorsi locali
Limiti di dimensione dei media e comportamento di fallback
Limiti di dimensione dei media e comportamento di fallback
- limite di salvataggio dei media in ingresso:
channels.whatsapp.mediaMaxMb(predefinito50) - limite di invio dei media in uscita:
channels.whatsapp.mediaMaxMb(predefinito50) - gli override per account usano
channels.whatsapp.accounts.<accountId>.mediaMaxMb - le immagini vengono ottimizzate automaticamente (ridimensionamento/scansione qualità) per rientrare nei limiti
- in caso di errore nell’invio dei media, il fallback sul primo elemento invia un avviso testuale invece di scartare silenziosamente la risposta
Livello di reazione
channels.whatsapp.reactionLevel controlla quanto ampiamente l’agente usa le reazioni emoji su WhatsApp:
| Livello | Reazioni ack | Reazioni avviate dall’agente | Descrizione |
|---|---|---|---|
"off" | No | No | Nessuna reazione |
"ack" | Sì | No | Solo reazioni ack (ricezione pre-risposta) |
"minimal" | Sì | Sì (conservative) | Ack + reazioni dell’agente con guida prudente |
"extensive" | Sì | Sì (encouraged) | Ack + reazioni dell’agente con guida incoraggiante |
"minimal".
Gli override per account usano channels.whatsapp.accounts.<id>.reactionLevel.
Reazioni di conferma
WhatsApp supporta reazioni ack immediate alla ricezione in ingresso tramitechannels.whatsapp.ackReaction.
Le reazioni ack sono controllate da reactionLevel: vengono soppresse quando reactionLevel è "off".
- inviate immediatamente dopo l’accettazione dell’evento in ingresso (pre-risposta)
- gli errori vengono registrati nei log ma non bloccano la normale consegna della risposta
- la modalità gruppo
mentionsreagisce nei turni attivati da menzione; l’attivazione di gruppoalwaysfunge da bypass per questo controllo - WhatsApp usa
channels.whatsapp.ackReaction(il legacymessages.ackReactionqui non viene usato)
Multi-account e credenziali
Selezione dell'account e valori predefiniti
Selezione dell'account e valori predefiniti
- gli ID account provengono da
channels.whatsapp.accounts - selezione dell’account predefinito:
defaultse presente, altrimenti il primo ID account configurato (ordinato) - gli ID account vengono normalizzati internamente per la ricerca
Percorsi delle credenziali e compatibilità legacy
Percorsi delle credenziali e compatibilità legacy
- percorso di autenticazione corrente:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - file di backup:
creds.json.bak - l’autenticazione legacy predefinita in
~/.openclaw/credentials/è ancora riconosciuta/migrata per i flussi dell’account predefinito
Comportamento del logout
Comportamento del logout
openclaw channels logout --channel whatsapp [--account <id>] cancella lo stato di autenticazione WhatsApp per quell’account.Nelle directory di autenticazione legacy, oauth.json viene preservato mentre i file di autenticazione Baileys vengono rimossi.Strumenti, azioni e scritture di configurazione
- Il supporto strumenti dell’agente include l’azione di reazione WhatsApp (
react). - Gate delle azioni:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Le scritture di configurazione avviate dal canale sono abilitate per impostazione predefinita (disabilita tramite
channels.whatsapp.configWrites=false).
Risoluzione dei problemi
Non collegato (QR richiesto)
Non collegato (QR richiesto)
Sintomo: lo stato del canale segnala non collegato.Correzione:
Collegato ma disconnesso / ciclo di riconnessione
Collegato ma disconnesso / ciclo di riconnessione
Sintomo: account collegato con disconnessioni ripetute o tentativi di riconnessione.Correzione:Se necessario, ricollega con
channels login.Nessun listener attivo durante l'invio
Nessun listener attivo durante l'invio
Gli invii in uscita falliscono immediatamente quando non esiste alcun listener gateway attivo per l’account di destinazione.Assicurati che il gateway sia in esecuzione e che l’account sia collegato.
Messaggi di gruppo ignorati in modo imprevisto
Messaggi di gruppo ignorati in modo imprevisto
Controlla in questo ordine:
groupPolicygroupAllowFrom/allowFrom- voci dell’allowlist
groups - gating della menzione (
requireMention+ pattern di menzione) - chiavi duplicate in
openclaw.json(JSON5): le voci successive sovrascrivono quelle precedenti, quindi mantieni un sologroupPolicyper ambito
Avviso runtime Bun
Avviso runtime Bun
Il runtime del gateway WhatsApp dovrebbe usare Node. Bun è segnalato come incompatibile per il funzionamento stabile del gateway WhatsApp/Telegram.
Riferimenti alla configurazione
Riferimento principale: Campi WhatsApp ad alto segnale:- accesso:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - consegna:
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - multi-account:
accounts.<id>.enabled,accounts.<id>.authDir, override a livello account - operazioni:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.* - comportamento della sessione:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit