WhatsApp (Web-Kanal)
Status: produktionsreif über WhatsApp Web (Baileys). Das Gateway besitzt verknüpfte Sitzung(en).Installation (bei Bedarf)
- Onboarding (
openclaw onboard) undopenclaw channels add --channel whatsappfordern beim ersten Auswählen von WhatsApp zur Installation des WhatsApp-Plugins auf. openclaw channels login --channel whatsappbietet den Installationsablauf ebenfalls an, wenn das Plugin noch nicht vorhanden ist.- Dev-Kanal + Git-Checkout: standardmäßig der lokale Plugin-Pfad.
- Stable/Beta: standardmäßig das npm-Paket
@openclaw/whatsapp.
Kopplung
Die Standard-DM-Richtlinie ist Kopplung für unbekannte Absender.
Fehlerbehebung für Kanäle
Kanalübergreifende Diagnose- und Reparaturleitfäden.
Gateway-Konfiguration
Vollständige Kanal-Konfigurationsmuster und Beispiele.
Schnelleinrichtung
OpenClaw empfiehlt, WhatsApp möglichst mit einer separaten Nummer zu betreiben. (Die Kanalmetadaten und der Einrichtungsablauf sind für dieses Setup optimiert, aber Setups mit persönlicher Nummer werden ebenfalls unterstützt.)
Bereitstellungsmuster
Dedizierte Nummer (empfohlen)
Dedizierte Nummer (empfohlen)
Dies ist der sauberste Betriebsmodus:
- separate WhatsApp-Identität für OpenClaw
- klarere DM-Allowlists und Routing-Grenzen
- geringere Wahrscheinlichkeit von Verwirrung durch Selbst-Chats
Fallback mit persönlicher Nummer
Fallback mit persönlicher Nummer
Das Onboarding unterstützt den Modus mit persönlicher Nummer und schreibt eine selbstchatfreundliche Basis:
dmPolicy: "allowlist"allowFromenthält Ihre persönliche NummerselfChatMode: true
allowFrom.Kanalumfang nur für WhatsApp Web
Kanalumfang nur für WhatsApp Web
Der Messaging-Plattform-Kanal basiert in der aktuellen Kanalarchitektur von OpenClaw auf WhatsApp Web (
Baileys).Es gibt keinen separaten Twilio-WhatsApp-Messaging-Kanal in der integrierten Chat-Kanal-Registry.Laufzeitmodell
- Das Gateway besitzt den WhatsApp-Socket und die Wiederverbindungsschleife.
- Ausgehendes Senden erfordert einen aktiven WhatsApp-Listener für das Zielkonto.
- Status- und Broadcast-Chats werden ignoriert (
@status,@broadcast). - Direktchats verwenden DM-Sitzungsregeln (
session.dmScope; der Standardmainführt DMs in die Hauptsitzung des Agent zusammen). - Gruppensitzungen sind isoliert (
agent:<agentId>:whatsapp:group:<jid>).
Zugriffskontrolle und Aktivierung
- DM-Richtlinie
- Gruppenrichtlinie + Allowlists
- Erwähnungen + /activation
channels.whatsapp.dmPolicy steuert den Zugriff auf Direktchats:pairing(Standard)allowlistopen(erfordert, dassallowFrom"*"enthält)disabled
allowFrom akzeptiert Nummern im E.164-Stil (intern normalisiert).Multi-Account-Überschreibung: channels.whatsapp.accounts.<id>.dmPolicy (und allowFrom) haben für dieses Konto Vorrang vor kanalweiten Standards.Details zum Laufzeitverhalten:- Kopplungen werden im kanalbezogenen Allow-Store persistiert und mit konfiguriertem
allowFromzusammengeführt - wenn keine Allowlist konfiguriert ist, ist die verknüpfte eigene Nummer standardmäßig erlaubt
- ausgehende
fromMe-DMs werden nie automatisch gekoppelt
Persönliche Nummer und Selbst-Chat-Verhalten
Wenn die verknüpfte eigene Nummer auch inallowFrom vorhanden ist, werden Schutzmechanismen für WhatsApp-Selbst-Chats aktiviert:
- Lesebestätigungen für Selbst-Chat-Durchläufe überspringen
- Auto-Trigger-Verhalten für Erwähnungs-JIDs ignorieren, das Sie sonst selbst anpingen würde
- wenn
messages.responsePrefixnicht gesetzt ist, verwenden Antworten in Selbst-Chats standardmäßig[{identity.name}]oder[openclaw]
Nachrichtennormalisierung und Kontext
Eingehender Envelope + Antwortkontext
Eingehender Envelope + Antwortkontext
Eingehende WhatsApp-Nachrichten werden in den gemeinsamen eingehenden Envelope verpackt.Wenn eine zitierte Antwort vorhanden ist, wird Kontext in dieser Form angehängt:Metadatenfelder für Antworten werden ebenfalls befüllt, wenn verfügbar (
ReplyToId, ReplyToBody, ReplyToSender, Sender-JID/E.164).Medienplatzhalter und Extraktion von Standort/Kontakt
Medienplatzhalter und Extraktion von Standort/Kontakt
Eingehende Nachrichten nur mit Medien werden mit Platzhaltern wie diesen normalisiert:
<media:image><media:video><media:audio><media:document><media:sticker>
Einfügung ausstehender Gruppenhistorie
Einfügung ausstehender Gruppenhistorie
Für Gruppen können unverarbeitete Nachrichten gepuffert und als Kontext eingefügt werden, wenn der Bot schließlich ausgelöst wird.
- Standardlimit:
50 - Konfiguration:
channels.whatsapp.historyLimit - Fallback:
messages.groupChat.historyLimit 0deaktiviert
[Chat messages since your last reply - for context][Current message - respond to this]
Lesebestätigungen
Lesebestätigungen
Lesebestätigungen sind standardmäßig für akzeptierte eingehende WhatsApp-Nachrichten aktiviert.Global deaktivieren:Überschreibung pro Konto:Durchläufe in Selbst-Chats überspringen Lesebestätigungen auch dann, wenn sie global aktiviert sind.
Zustellung, Chunking und Medien
Text-Chunking
Text-Chunking
- Standard-Chunk-Limit:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- der Modus
newlinebevorzugt Absatzgrenzen (Leerzeilen) und greift dann auf längensicheres Chunking zurück
Verhalten ausgehender Medien
Verhalten ausgehender Medien
- unterstützt Nutzlasten für Bild, Video, Audio (PTT-Sprachnachricht) und Dokument
audio/oggwird für die Kompatibilität mit Sprachnachrichten zuaudio/ogg; codecs=opusumgeschrieben- animierte GIF-Wiedergabe wird über
gifPlayback: truebei Video-Sendungen unterstützt - Bildunterschriften werden beim Senden von Antwortnutzlasten mit mehreren Medien auf das erste Medienelement angewendet
- Medienquelle kann HTTP(S),
file://oder lokale Pfade sein
Größenlimits für Medien und Fallback-Verhalten
Größenlimits für Medien und Fallback-Verhalten
- Speicherlimit für eingehende Medien:
channels.whatsapp.mediaMaxMb(Standard50) - Sendelimit für ausgehende Medien:
channels.whatsapp.mediaMaxMb(Standard50) - Überschreibungen pro Konto verwenden
channels.whatsapp.accounts.<accountId>.mediaMaxMb - Bilder werden automatisch optimiert (Größenänderung/Qualitätsdurchlauf), um die Limits einzuhalten
- bei Fehlern beim Mediensenden sendet der Fallback für das erste Element eine Textwarnung, anstatt die Antwort stillschweigend zu verwerfen
Reaktionsstufe
channels.whatsapp.reactionLevel steuert, wie breit der Agent Emoji-Reaktionen auf WhatsApp verwendet:
| Stufe | Bestätigungsreaktionen | Vom Agent initiierte Reaktionen | Beschreibung |
|---|---|---|---|
"off" | Nein | Nein | Überhaupt keine Reaktionen |
"ack" | Ja | Nein | Nur Bestätigungsreaktionen (Empfang vor Antwort) |
"minimal" | Ja | Ja (zurückhaltend) | Bestätigung + Agent-Reaktionen mit zurückhaltender Anleitung |
"extensive" | Ja | Ja (empfohlen) | Bestätigung + Agent-Reaktionen mit empfohlener Anleitung |
"minimal".
Überschreibungen pro Konto verwenden channels.whatsapp.accounts.<id>.reactionLevel.
Bestätigungsreaktionen
WhatsApp unterstützt sofortige Bestätigungsreaktionen beim eingehenden Empfang überchannels.whatsapp.ackReaction.
Bestätigungsreaktionen werden durch reactionLevel gesteuert — sie werden unterdrückt, wenn reactionLevel "off" ist.
- werden sofort gesendet, nachdem eingehende Nachrichten akzeptiert wurden (vor der Antwort)
- Fehler werden protokolliert, blockieren aber die normale Antwortzustellung nicht
- im Gruppenmodus
mentionswird bei durch Erwähnung ausgelösten Durchläufen reagiert; die Gruppenaktivierungalwayswirkt dabei als Umgehung dieser Prüfung - WhatsApp verwendet
channels.whatsapp.ackReaction(das veraltetemessages.ackReactionwird hier nicht verwendet)
Multi-Account und Anmeldedaten
Kontoauswahl und Standards
Kontoauswahl und Standards
- Konto-IDs stammen aus
channels.whatsapp.accounts - Standard-Kontoauswahl:
default, wenn vorhanden, sonst die erste konfigurierte Konto-ID (sortiert) - Konto-IDs werden intern für die Suche normalisiert
Pfade für Anmeldedaten und Legacy-Kompatibilität
Pfade für Anmeldedaten und Legacy-Kompatibilität
- aktueller Auth-Pfad:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - Sicherungsdatei:
creds.json.bak - veraltete Standard-Authentifizierung unter
~/.openclaw/credentials/wird für Standardkonto-Abläufe weiterhin erkannt/migriert
Abmeldeverhalten
Abmeldeverhalten
openclaw channels logout --channel whatsapp [--account <id>] löscht den WhatsApp-Authentifizierungszustand für dieses Konto.In veralteten Auth-Verzeichnissen bleibt oauth.json erhalten, während Baileys-Auth-Dateien entfernt werden.Tools, Aktionen und Konfigurationsschreibvorgänge
- Die Agent-Tool-Unterstützung umfasst die WhatsApp-Reaktionsaktion (
react). - Aktions-Gates:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Kanalinitiierte Konfigurationsschreibvorgänge sind standardmäßig aktiviert (deaktivieren über
channels.whatsapp.configWrites=false).
Fehlerbehebung
Nicht verknüpft (QR erforderlich)
Nicht verknüpft (QR erforderlich)
Symptom: Der Kanalstatus meldet nicht verknüpft.Korrektur:
Verknüpft, aber getrennt / Wiederverbindungsschleife
Verknüpft, aber getrennt / Wiederverbindungsschleife
Symptom: Verknüpftes Konto mit wiederholten Verbindungsabbrüchen oder Wiederverbindungsversuchen.Korrektur:Falls nötig, mit
channels login erneut verknüpfen.Kein aktiver Listener beim Senden
Kein aktiver Listener beim Senden
Ausgehende Sendungen schlagen sofort fehl, wenn für das Zielkonto kein aktiver Gateway-Listener vorhanden ist.Stellen Sie sicher, dass das Gateway läuft und das Konto verknüpft ist.
Gruppennachrichten werden unerwartet ignoriert
Gruppennachrichten werden unerwartet ignoriert
In dieser Reihenfolge prüfen:
groupPolicygroupAllowFrom/allowFrom- Allowlist-Einträge in
groups - Mention-Gating (
requireMention+ Erwähnungsmuster) - doppelte Schlüssel in
openclaw.json(JSON5): spätere Einträge überschreiben frühere, daher pro Scope nur eingroupPolicy
Warnung zur Bun-Laufzeit
Warnung zur Bun-Laufzeit
Die Gateway-Laufzeit für WhatsApp sollte Node verwenden. Bun ist als inkompatibel für einen stabilen Gateway-Betrieb von WhatsApp/Telegram gekennzeichnet.
Hinweise zur Konfigurationsreferenz
Primäre Referenz: Signalstarke WhatsApp-Felder:- Zugriff:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - Zustellung:
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - Multi-Account:
accounts.<id>.enabled,accounts.<id>.authDir, Überschreibungen auf Kontoebene - Betrieb:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.* - Sitzungsverhalten:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit