WhatsApp (Web-Kanal)
Status: produktionsreif über WhatsApp Web (Baileys). Das Gateway verwaltet verknüpfte Sitzung(en).Installation (bei Bedarf)
- Onboarding (
openclaw onboard) undopenclaw channels add --channel whatsappfordern zur Installation des WhatsApp-Plugins auf, wenn du es zum ersten Mal auswählst. openclaw channels login --channel whatsappbietet den Installationsablauf ebenfalls an, wenn das Plugin noch nicht vorhanden ist.- Dev-Kanal + Git-Checkout: standardmäßig wird der lokale Plugin-Pfad verwendet.
- Stable/Beta: standardmäßig wird das npm-Paket
@openclaw/whatsappverwendet.
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 Konfigurationsmuster und Beispiele für Kanäle.
Schnelleinrichtung
OpenClaw empfiehlt nach Möglichkeit, WhatsApp 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
Eigene Nummer (empfohlen)
Eigene Nummer (empfohlen)
Dies ist der sauberste Betriebsmodus:
- separate WhatsApp-Identität für OpenClaw
- klarere DM-Allowlists und Routing-Grenzen
- geringere Wahrscheinlichkeit von Verwechslungen im Selbst-Chat
Fallback mit persönlicher Nummer
Fallback mit persönlicher Nummer
Das Onboarding unterstützt den Modus mit persönlicher Nummer und schreibt eine selbstchatfreundliche Basiskonfiguration:
dmPolicy: "allowlist"allowFromenthält deine persönliche NummerselfChatMode: true
allowFrom.Kanalumfang nur für WhatsApp Web
Kanalumfang nur für WhatsApp Web
Der Kanal der Messaging-Plattform basiert in der aktuellen OpenClaw-Kanalarchitektur auf WhatsApp Web (
Baileys).Es gibt keinen separaten Twilio-WhatsApp-Messaging-Kanal in der integrierten Chat-Kanal-Registry.Laufzeitmodell
- Das Gateway verwaltet den WhatsApp-Socket und die Wiederverbindungsschleife.
- Ausgehende Sendungen erfordern einen aktiven WhatsApp-Listener für das Zielkonto.
- Status- und Broadcast-Chats werden ignoriert (
@status,@broadcast). - Direkte Chats verwenden DM-Sitzungsregeln (
session.dmScope; standardmäßig reduziertmainDMs auf die Hauptsitzung des Agenten). - Gruppensitzungen sind isoliert (
agent:<agentId>:whatsapp:group:<jid>). - Der WhatsApp-Web-Transport berücksichtigt Standard-Proxy-Umgebungsvariablen auf dem Gateway-Host (
HTTPS_PROXY,HTTP_PROXY,NO_PROXY/ kleingeschriebene Varianten). Bevorzuge eine Proxy-Konfiguration auf Host-Ebene gegenüber kanalspezifischen WhatsApp-Proxy-Einstellungen.
Zugriffskontrolle und Aktivierung
- DM-Richtlinie
- Gruppenrichtlinie + Allowlists
- Erwähnungen + /activation
channels.whatsapp.dmPolicy steuert den Zugriff auf direkte Chats:pairing(Standard)allowlistopen(erfordert, dassallowFrom"*"enthält)disabled
allowFrom akzeptiert Nummern im Stil von E.164 (intern normalisiert).Multi-Account-Override: channels.whatsapp.accounts.<id>.dmPolicy (und allowFrom) haben für dieses Konto Vorrang vor den Standardwerten auf Kanalebene.Details zum Laufzeitverhalten:- Kopplungen werden im kanalbezogenen Allow-Store gespeichert und mit dem konfigurierten
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 WhatsApp-Schutzmechanismen für Selbst-Chats aktiviert:
- Lesebestätigungen für Selbst-Chat-Züge überspringen
- Auto-Trigger-Verhalten für Erwähnungs-JIDs ignorieren, das dich sonst selbst anpingen würde
- wenn
messages.responsePrefixnicht gesetzt ist, verwenden Selbst-Chat-Antworten standardmäßig[{identity.name}]oder[openclaw]
Nachrichten-Normalisierung und Kontext
Eingehender Umschlag + Antwortkontext
Eingehender Umschlag + Antwortkontext
Eingehende WhatsApp-Nachrichten werden in den gemeinsamen eingehenden Umschlag 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, Absender-JID/E.164).Medienplatzhalter und Extraktion von Standort/Kontakt
Medienplatzhalter und Extraktion von Standort/Kontakt
Eingehende Nachrichten, die nur Medien enthalten, werden mit Platzhaltern wie den folgenden normalisiert:
<media:image><media:video><media:audio><media:document><media:sticker>
Einspeisung ausstehender Gruppenhistorie
Einspeisung 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-Nachrichten seit deiner letzten Antwort - als Kontext][Aktuelle Nachricht - antworte auf diese]
Lesebestätigungen
Lesebestätigungen
Lesebestätigungen sind standardmäßig für akzeptierte eingehende WhatsApp-Nachrichten aktiviert.Global deaktivieren:Override pro Konto:Selbst-Chat-Züge überspringen Lesebestätigungen auch dann, wenn sie global aktiviert sind.
Zustellung, Aufteilung und Medien
Textaufteilung
Textaufteilung
- Standardlimit pro Abschnitt:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- der Modus
newlinebevorzugt Absatzgrenzen (Leerzeilen) und greift dann auf längensichere Aufteilung zurück
Verhalten bei ausgehenden Medien
Verhalten bei ausgehenden Medien
- unterstützt Nutzlasten für Bilder, Videos, Audio (PTT-Sprachnotiz) und Dokumente
audio/oggwird für Kompatibilität mit Sprachnotizen inaudio/ogg; codecs=opusumgeschrieben- animierte GIF-Wiedergabe wird über
gifPlayback: truebei Videosendungen unterstützt - Bildunterschriften werden auf das erste Medienelement angewendet, wenn Antwortnutzlasten mit mehreren Medien gesendet werden
- Medienquelle kann HTTP(S),
file://oder lokale Pfade sein
Mediengrößenlimits und Fallback-Verhalten
Mediengrößenlimits und Fallback-Verhalten
- Limit zum Speichern eingehender Medien:
channels.whatsapp.mediaMaxMb(Standard50) - Limit zum Senden ausgehender Medien:
channels.whatsapp.mediaMaxMb(Standard50) - Overrides pro Konto verwenden
channels.whatsapp.accounts.<accountId>.mediaMaxMb - Bilder werden automatisch optimiert (Größenanpassung/Qualitätsdurchlauf), um in die Limits zu passen
- bei Fehlern beim Mediensenden sendet der Fallback für das erste Element stattdessen 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 Agenten initiierte Reaktionen | Beschreibung |
|---|---|---|---|
"off" | Nein | Nein | Überhaupt keine Reaktionen |
"ack" | Ja | Nein | Nur Bestätigungsreaktionen (vor Antwortempfang) |
"minimal" | Ja | Ja (zurückhaltend) | Bestätigung + Agent-Reaktionen mit zurückhaltender Steuerung |
"extensive" | Ja | Ja (empfohlen) | Bestätigung + Agent-Reaktionen mit empfohlener Steuerung |
"minimal".
Overrides pro Konto verwenden channels.whatsapp.accounts.<id>.reactionLevel.
Bestätigungsreaktionen
WhatsApp unterstützt sofortige Bestätigungsreaktionen beim Empfang eingehender Nachrichten überchannels.whatsapp.ackReaction.
Bestätigungsreaktionen werden durch reactionLevel gesteuert — sie werden unterdrückt, wenn reactionLevel auf "off" gesetzt ist.
- werden sofort gesendet, nachdem eine eingehende Nachricht akzeptiert wurde (vor der Antwort)
- Fehler werden protokolliert, blockieren aber nicht die normale Antwortzustellung
- der Gruppenmodus
mentionsreagiert bei durch Erwähnung ausgelösten Zügen; die Gruppenaktivierungalwayswirkt als Umgehung dieser Prüfung - WhatsApp verwendet
channels.whatsapp.ackReaction(das veraltetemessages.ackReactionwird hier nicht verwendet)
Multi-Account und Anmeldedaten
Kontoauswahl und Standardwerte
Kontoauswahl und Standardwerte
- Konto-IDs stammen aus
channels.whatsapp.accounts - Standard-Kontoauswahl:
default, falls vorhanden, andernfalls 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 Standardauthentifizierung in
~/.openclaw/credentials/wird für Standardkonto-Abläufe weiterhin erkannt/migriert
Abmeldeverhalten
Abmeldeverhalten
openclaw channels logout --channel whatsapp [--account <id>] löscht den WhatsApp-Authentifizierungsstatus 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 Tool-Unterstützung des Agenten umfasst die WhatsApp-Reaktionsaktion (
react). - Aktionssperren:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Vom Kanal initiierte Konfigurationsschreibvorgänge sind standardmäßig aktiviert (deaktivierbar über
channels.whatsapp.configWrites=false).
Fehlerbehebung
Nicht verknüpft (QR erforderlich)
Nicht verknüpft (QR erforderlich)
Symptom: Der Kanalstatus meldet nicht verknüpft.Lösung:
Verknüpft, aber getrennt / Wiederverbindungsschleife
Verknüpft, aber getrennt / Wiederverbindungsschleife
Symptom: Verknüpftes Konto mit wiederholten Trennungen oder Wiederverbindungsversuchen.Lösung: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 kein aktiver Gateway-Listener für das Zielkonto vorhanden ist.Stelle 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 - Erwähnungssteuerung (
requireMention+ Erwähnungsmuster) - doppelte Schlüssel in
openclaw.json(JSON5): spätere Einträge überschreiben frühere, daher pro Geltungsbereich nur ein einzigesgroupPolicybeibehalten
Bun-Laufzeitwarnung
Bun-Laufzeitwarnung
Die WhatsApp-Gateway-Laufzeit sollte Node verwenden. Bun ist als inkompatibel für einen stabilen Betrieb des WhatsApp/Telegram-Gateways gekennzeichnet.
Verweise zur Konfigurationsreferenz
Primäre Referenz: Wichtige WhatsApp-Felder:- Zugriff:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - Zustellung:
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - Multi-Account:
accounts.<id>.enabled,accounts.<id>.authDir, Overrides auf Kontoebene - Betrieb:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.* - Sitzungsverhalten:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit