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 whatsapppropongono di installare il plugin WhatsApp la prima volta che lo selezioni. - Anche
openclaw channels login --channel whatsappoffre il flusso di installazione quando il plugin non è ancora presente. - Canale dev + checkout git: per impostazione predefinita usa il percorso locale del plugin.
- Stable/Beta: per impostazione predefinita usa il pacchetto npm
@openclaw/whatsapp.
Associazione
La policy DM predefinita è l’associazione per i mittenti sconosciuti.
Risoluzione dei problemi dei canali
Diagnostica cross-channel e procedure di riparazione.
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 le 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 DM e confini di instradamento più chiari
- minore probabilità di confusione con le chat a sé stessi
Fallback con numero personale
Fallback con numero personale
L’onboarding supporta la modalità numero personale e scrive una baseline adatta alle 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; per impostazione predefinitamaincomprime i DM nella sessione principale dell’agente). - Le sessioni di gruppo sono isolate (
agent:<agentId>:whatsapp:group:<jid>).
Controllo dell’accesso e attivazione
- Policy DM
- Policy di 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 precedenza sui valori predefiniti a livello di canale per quell’account.Dettagli del comportamento a runtime:- le associazioni vengono mantenute nell’allow-store del canale e unite a
allowFromconfigurato - se non è configurata alcuna allowlist, il numero personale collegato è consentito per impostazione predefinita
- i DM in uscita
fromMenon vengono mai associati automaticamente
Comportamento con numero personale e chat con sé stessi
Quando il numero personale collegato è presente anche inallowFrom, si attivano le protezioni per le chat con sé stessi su WhatsApp:
- salta le conferme di lettura per i turni di chat con sé stessi
- ignora il comportamento di attivazione automatica tramite mention-JID che altrimenti invierebbe una menzione a te stesso
- se
messages.responsePrefixnon è impostato, per impostazione predefinita le risposte alle chat con sé stessi usano[{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 ingresso sono racchiusi nell’envelope condivisa dei messaggi 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, JID/E.164 del mittente).Placeholder dei media ed estrazione di posizione/contatto
Placeholder dei media 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 bufferizzati e iniettati come contesto quando il bot viene infine attivato.
- limite predefinito:
50 - config:
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à
newlinepreferisce i confini dei paragrafi (righe vuote), poi ricade sulla suddivisione sicura per lunghezza
Comportamento dei media in uscita
Comportamento dei media in uscita
- supporta payload di immagine, video, audio (messaggio vocale PTT) e documento
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 di media, il fallback del primo elemento invia un avviso testuale invece di eliminare silenziosamente la risposta
Livello di reazione
channels.whatsapp.reactionLevel controlla quanto ampiamente l’agente usa le reazioni emoji su WhatsApp:
| Livello | Reazioni di ack | Reazioni avviate dall’agente | Descrizione |
|---|---|---|---|
"off" | No | No | Nessuna reazione |
"ack" | Sì | No | Solo reazioni di ack (ricevuta pre-risposta) |
"minimal" | Sì | Sì (conservative) | Ack + reazioni dell’agente con guida conservativa |
"extensive" | Sì | Sì (encouraged) | Ack + reazioni dell’agente con guida incoraggiata |
"minimal".
Gli override per account usano channels.whatsapp.accounts.<id>.reactionLevel.
Reazioni di acknowledgment
WhatsApp supporta reazioni di ack immediate alla ricezione in ingresso tramitechannels.whatsapp.ackReaction.
Le reazioni di ack sono regolate da reactionLevel — vengono soppresse quando reactionLevel è "off".
- inviate immediatamente dopo che il messaggio in ingresso è stato accettato (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 gruppoalwaysagisce come bypass per questo controllo - WhatsApp usa
channels.whatsapp.ackReaction(qui non viene usato il legacymessages.ackReaction)
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 il lookup
Percorsi delle credenziali e compatibilità legacy
Percorsi delle credenziali e compatibilità legacy
- percorso auth attuale:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - file di backup:
creds.json.bak - l’auth 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 auth di WhatsApp per quell’account.Nelle directory auth legacy, oauth.json viene preservato mentre i file auth di Baileys vengono rimossi.Strumenti, azioni e scritture di configurazione
- Il supporto degli 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 che 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 rapidamente 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 della allowlist
groups - gating delle menzioni (
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 di account - operazioni:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.* - comportamento della sessione:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit