Status: produktionsbereit über WhatsApp Web (Baileys). Gateway verwaltet verknüpfte Sitzung(en).Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Installation (bei Bedarf)
- Onboarding (
openclaw onboard) undopenclaw channels add --channel whatsappfordern zur Installation des WhatsApp-Plugin auf, wenn Sie es zum ersten Mal auswählen. openclaw channels login --channel whatsappbietet ebenfalls den Installationsablauf an, wenn das Plugin noch nicht vorhanden ist.- Dev-Kanal + Git-Checkout: verwendet standardmäßig den lokalen Plugin-Pfad.
- Stable/Beta: verwendet das npm-Paket
@openclaw/whatsappauf dem aktuellen offiziellen Release-Tag.
PATH, weil
eine seiner Baileys/libsignal-Abhängigkeiten von einer Git-URL abgerufen wird. Installieren Sie
Git for Windows, starten Sie dann die Shell neu und führen Sie die Installation erneut aus:
bin-Verzeichnis in PATH liegt.
Kopplung
Channel-Fehlerbehebung
Gateway-Konfiguration
Schnelle Einrichtung
WhatsApp verknüpfen (QR)
Bereitstellungsmuster
Dedizierte Nummer (empfohlen)
Dedizierte Nummer (empfohlen)
- 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
dmPolicy: "allowlist"allowFromenthält Ihre persönliche NummerselfChatMode: true
allowFrom.Channel-Bereich nur für WhatsApp Web
Channel-Bereich nur für WhatsApp Web
Baileys).Es gibt keinen separaten Twilio-WhatsApp-Messaging-Channel in der integrierten Chat-Channel-Registry.Laufzeitmodell
- Gateway verwaltet den WhatsApp-Socket und die Wiederverbindungsschleife.
- Der Wiederverbindungs-Watchdog verwendet WhatsApp-Web-Transportaktivität, nicht nur eingehendes App-Nachrichtenvolumen, sodass eine ruhige verknüpfte Gerätesitzung nicht allein deshalb neu gestartet wird, weil kürzlich niemand eine Nachricht gesendet hat. Eine längere Grenze für Anwendungsschweigen erzwingt weiterhin eine Wiederverbindung, wenn weiterhin Transport-Frames eintreffen, aber im Watchdog-Fenster keine Anwendungsnachrichten verarbeitet werden; nach einer vorübergehenden Wiederverbindung für eine kürzlich aktive Sitzung verwendet diese Prüfung auf Anwendungsschweigen für das erste Wiederherstellungsfenster das normale Nachrichten-Timeout.
- Baileys-Socket-Zeitwerte sind unter
web.whatsapp.*explizit:keepAliveIntervalMssteuert WhatsApp-Web-Anwendungspings,connectTimeoutMssteuert das Timeout des öffnenden Handshakes, unddefaultQueryTimeoutMssteuert Baileys-Abfrage-Timeouts. - Ausgehende Sendungen erfordern einen aktiven WhatsApp-Listener für das Zielkonto.
- Gruppensendungen hängen native Erwähnungsmetadaten für
@+<digits>- und@<digits>-Tokens in Text und Medienbeschriftungen an, wenn das Token mit aktuellen WhatsApp-Teilnehmermetadaten übereinstimmt, einschließlich LID-gestützter Gruppen. - Status- und Broadcast-Chats werden ignoriert (
@status,@broadcast). - Der Wiederverbindungs-Watchdog folgt der WhatsApp-Web-Transportaktivität, nicht nur eingehendem App-Nachrichtenvolumen: ruhige verknüpfte Gerätesitzungen bleiben aktiv, während Transport-Frames weiterlaufen, aber ein Transport-Stillstand erzwingt eine Wiederverbindung deutlich vor dem späteren Remote-Disconnect-Pfad.
- Direkt-Chats verwenden DM-Sitzungsregeln (
session.dmScope; Standardmainführt DMs in der Hauptsitzung des Agenten zusammen). - Gruppensitzungen sind isoliert (
agent:<agentId>:whatsapp:group:<jid>). - WhatsApp Channels/Newsletters können explizite ausgehende Ziele mit ihrer nativen
@newsletter-JID sein. Ausgehende Newsletter-Sendungen verwenden Channel-Sitzungsmetadaten (agent:<agentId>:whatsapp:channel:<jid>) statt DM-Sitzungssemantik. - Der WhatsApp-Web-Transport beachtet Standard-Proxy-Umgebungsvariablen auf dem Gateway-Host (
HTTPS_PROXY,HTTP_PROXY,NO_PROXY/ Varianten in Kleinschreibung). Bevorzugen Sie Proxy-Konfiguration auf Host-Ebene gegenüber Channel-spezifischen WhatsApp-Proxy-Einstellungen. - Wenn
messages.removeAckAfterReplyaktiviert ist, entfernt OpenClaw die WhatsApp-Ack-Reaktion, nachdem eine sichtbare Antwort zugestellt wurde.
Plugin-Hooks und Datenschutz
Eingehende WhatsApp-Nachrichten können persönliche Nachrichteninhalte, Telefonnummern, Gruppenkennungen, Absendernamen und Sitzungs-Korrelationsfelder enthalten. Aus diesem Grund sendet WhatsApp eingehendemessage_received-Hook-Payloads nicht an Plugins,
sofern Sie sich nicht ausdrücklich dafür entscheiden:
Zugriffskontrolle und Aktivierung
- DM-Richtlinie
- Gruppenrichtlinie + Allowlists
- Erwähnungen + /activation
channels.whatsapp.dmPolicy steuert den Zugriff auf Direkt-Chats:pairing(Standard)allowlistopen(erfordert, dassallowFrom"*"enthält)disabled
allowFrom akzeptiert Nummern im E.164-Stil (intern normalisiert).allowFrom ist eine Zugriffskontrollliste für DM-Absender. Sie begrenzt keine expliziten ausgehenden Sendungen an WhatsApp-Gruppen-JIDs oder @newsletter-Channel-JIDs.Mehrkonto-Überschreibung: channels.whatsapp.accounts.<id>.dmPolicy (und allowFrom) haben Vorrang vor Standardwerten auf Channel-Ebene für dieses Konto.Details zum Laufzeitverhalten:- Kopplungen werden im Channel-Allow-Store gespeichert und mit konfiguriertem
allowFromzusammengeführt - geplante Automatisierung und Heartbeat-Empfänger-Fallback verwenden explizite Zustellziele oder konfiguriertes
allowFrom; DM-Kopplungsgenehmigungen sind keine impliziten Cron- oder Heartbeat-Empfänger - wenn keine Allowlist konfiguriert ist, ist die verknüpfte eigene Nummer standardmäßig erlaubt
- OpenClaw koppelt ausgehende
fromMe-DMs nie automatisch (Nachrichten, die Sie vom verknüpften Gerät an sich selbst senden)
Verhalten bei persönlicher Nummer und Selbst-Chat
Wenn die verknüpfte eigene Nummer auch inallowFrom vorhanden ist, werden WhatsApp-Selbst-Chat-Schutzmechanismen aktiviert:
- Lesebestätigungen für Selbst-Chat-Durchläufe überspringen
- Mention-JID-Auto-Trigger-Verhalten ignorieren, das sonst Sie selbst anpingen würde
- wenn
messages.responsePrefixnicht gesetzt ist, verwenden Selbst-Chat-Antworten standardmäßig[{identity.name}]oder[openclaw]
Nachrichtennormalisierung und Kontext
Eingehender Umschlag + Antwortkontext
Eingehender Umschlag + Antwortkontext
ReplyToId, ReplyToBody, ReplyToSender, Absender-JID/E.164).
Wenn das zitierte Antwortziel herunterladbare Medien sind, speichert OpenClaw diese über
den normalen eingehenden Medienspeicher und stellt sie als MediaPath/MediaType bereit, damit
der Agent das referenzierte Bild prüfen kann, statt nur
<media:image> zu sehen.Medien-Platzhalter und Standort-/Kontaktextraktion
Medien-Platzhalter und Standort-/Kontaktextraktion
<media:image><media:video><media:audio><media:document><media:sticker>
<media:audio> ist, sodass das Aussprechen der Bot-Erwähnung in der Voice-Note
die Antwort auslösen kann. Wenn das Transkript den Bot weiterhin nicht erwähnt, wird das
Transkript im ausstehenden Gruppenverlauf statt des rohen Platzhalters aufbewahrt.Standortinhalte verwenden knappen Koordinatentext. Standortlabels/-kommentare und Kontakt-/vCard-Details werden als eingezäunte nicht vertrauenswürdige Metadaten gerendert, nicht als Inline-Prompt-Text.Ausstehende Gruppenverlauf-Injektion
Ausstehende Gruppenverlauf-Injektion
- 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
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 fällt dann auf längensicheres Chunking zurück
Verhalten ausgehender Medien
Verhalten ausgehender Medien
- unterstützt Bild-, Video-, Audio- (PTT-Sprachnachricht) und Dokument-Payloads
- Audiomedien werden über den Baileys-
audio-Payload mitptt: truegesendet, sodass WhatsApp-Clients sie als Push-to-talk-Sprachnachricht darstellen - Antwort-Payloads behalten
audioAsVoicebei; die TTS-Sprachnachrichtenausgabe für WhatsApp bleibt auf diesem PTT-Pfad, auch wenn der Provider MP3 oder WebM zurückgibt - natives Ogg/Opus-Audio wird zur Kompatibilität mit Sprachnachrichten als
audio/ogg; codecs=opusgesendet - Nicht-Ogg-Audio, einschließlich Microsoft Edge TTS-MP3/WebM-Ausgabe, wird vor der PTT-Zustellung mit
ffmpegin 48 kHz Mono Ogg/Opus transkodiert /tts latestsendet die neueste Assistentenantwort als eine Sprachnachricht und unterdrückt wiederholtes Senden für dieselbe Antwort;/tts chat on|off|defaultsteuert Auto-TTS für den aktuellen WhatsApp-Chat- animierte GIF-Wiedergabe wird über
gifPlayback: truebei Video-Sendungen unterstützt - Beschriftungen werden beim Senden von Multi-Media-Antwort-Payloads auf das erste Medienelement angewendet; PTT-Sprachnachrichten senden jedoch zuerst das Audio und sichtbaren Text separat, weil WhatsApp-Clients Sprachnachrichten-Beschriftungen nicht konsistent darstellen
- Medienquellen können HTTP(S),
file://oder lokale Pfade sein
Mediengrößenlimits und Fallback-Verhalten
Mediengrößenlimits und Fallback-Verhalten
- Speicherlimit für eingehende Medien:
channels.whatsapp.mediaMaxMb(Standard50) - Sendelimit für ausgehende Medien:
channels.whatsapp.mediaMaxMb(Standard50) - kontospezifische Überschreibungen verwenden
channels.whatsapp.accounts.<accountId>.mediaMaxMb - Bilder werden automatisch optimiert (Größe/Qualitätssuche), um die Limits einzuhalten
- bei Fehlern beim Senden von Medien sendet der Fallback für das erste Element eine Textwarnung, statt die Antwort stillschweigend zu verwerfen
Antwortzitate
WhatsApp unterstützt native Antwortzitate, bei denen ausgehende Antworten die eingehende Nachricht sichtbar zitieren. Steuern Sie dies mitchannels.whatsapp.replyToMode.
| Wert | Verhalten |
|---|---|
"off" | Nie zitieren; als einfache Nachricht senden |
"first" | Nur den ersten ausgehenden Antwort-Chunk zitieren |
"all" | Jeden ausgehenden Antwort-Chunk zitieren |
"batched" | In die Warteschlange gestellte gebündelte Antworten zitieren, während sofortige Antworten unzitiert bleiben |
"off". Kontospezifische Überschreibungen verwenden channels.whatsapp.accounts.<id>.replyToMode.
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 | Keine Reaktionen |
"ack" | Ja | Nein | Nur Bestätigungsreaktionen (Empfangsbestätigung vor der Antwort) |
"minimal" | Ja | Ja (konservativ) | Bestätigungs- und Agentenreaktionen mit konservativer Vorgabe |
"extensive" | Ja | Ja (empfohlen) | Bestätigungs- und Agentenreaktionen mit empfohlener Vorgabe |
"minimal".
Kontospezifische Überschreibungen verwenden channels.whatsapp.accounts.<id>.reactionLevel.
Bestätigungsreaktionen
WhatsApp unterstützt sofortige Bestätigungsreaktionen beim Eingang überchannels.whatsapp.ackReaction.
Bestätigungsreaktionen werden durch reactionLevel gesteuert — sie werden unterdrückt, wenn reactionLevel "off" ist.
- wird sofort gesendet, nachdem die eingehende Nachricht akzeptiert wurde (vor der Antwort)
- Fehler werden protokolliert, blockieren aber nicht die normale Antwortzustellung
- der Gruppenmodus
mentionsreagiert bei durch Erwähnungen ausgelösten Runden; die Gruppenaktivierungalwaysdient als Umgehung für diese Prüfung - WhatsApp verwendet
channels.whatsapp.ackReaction(das Legacy-messages.ackReactionwird hier nicht verwendet)
Mehrere Konten und Anmeldedaten
Kontoauswahl und Standardwerte
Kontoauswahl und Standardwerte
- Konto-IDs stammen aus
channels.whatsapp.accounts - Standardkontoauswahl:
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 - Legacy-Standardauthentifizierung in
~/.openclaw/credentials/wird für Standardkonto-Flows weiterhin erkannt/migriert
Abmeldeverhalten
Abmeldeverhalten
openclaw channels logout --channel whatsapp [--account <id>] löscht den WhatsApp-Authentifizierungsstatus für dieses Konto.Wenn ein Gateway erreichbar ist, stoppt die Abmeldung zuerst den live laufenden WhatsApp-Listener für das ausgewählte Konto, damit die verknüpfte Sitzung bis zum nächsten Neustart keine Nachrichten weiter empfängt. openclaw channels remove --channel whatsapp stoppt ebenfalls den live laufenden Listener, bevor die Kontokonfiguration deaktiviert oder gelöscht wird.In Legacy-Auth-Verzeichnissen bleibt oauth.json erhalten, während Baileys-Auth-Dateien entfernt werden.Tools, Aktionen und Konfigurationsschreibvorgänge
- Die Agenten-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)
Verknüpft, aber getrennt / Wiederverbindungsschleife
Verknüpft, aber getrennt / Wiederverbindungsschleife
status=408 Request Time-out Connection was lost zeigen, passen Sie
die Baileys-Socket-Timings unter web.whatsapp an. Beginnen Sie damit,
keepAliveIntervalMs unter das Idle-Timeout Ihres Netzwerks zu verkürzen und
connectTimeoutMs bei langsamen oder verlustbehafteten Verbindungen zu erhöhen:~/.openclaw/logs/whatsapp-health.log Gateway inactive meldet, aber
openclaw gateway status und openclaw channels status --probe zeigen, dass das
Gateway und WhatsApp fehlerfrei sind, führen Sie openclaw doctor aus. Unter Linux warnt doctor
vor Legacy-crontab-Einträgen, die weiterhin
~/.openclaw/bin/ensure-whatsapp.sh aufrufen; entfernen Sie diese veralteten Einträge mit
crontab -e, weil Cron die systemd-User-Bus-Umgebung fehlen kann und
dieses alte Skript dadurch den Gateway-Zustand falsch meldet.Falls nötig, verknüpfen Sie mit channels login erneut.Timeout bei der QR-Anmeldung hinter einem Proxy
Timeout bei der QR-Anmeldung hinter einem Proxy
openclaw channels login --channel whatsapp schlägt fehl, bevor ein nutzbarer QR-Code angezeigt wird, mit status=408 Request Time-out oder einer TLS-Socket-Trennung.Die WhatsApp Web-Anmeldung verwendet die standardmäßige Proxy-Umgebung des Gateway-Hosts (HTTPS_PROXY, HTTP_PROXY, Varianten in Kleinschreibung und NO_PROXY). Prüfen Sie, ob der Gateway-Prozess die Proxy-Umgebung erbt und dass NO_PROXY nicht auf mmg.whatsapp.net passt.Kein aktiver Listener beim Senden
Kein aktiver Listener beim Senden
Antwort erscheint im Transkript, aber nicht in WhatsApp
Antwort erscheint im Transkript, aber nicht in WhatsApp
auto-reply delivery failed oder auto-reply was not accepted by WhatsApp provider.Gruppennachrichten werden unerwartet ignoriert
Gruppennachrichten werden unerwartet ignoriert
groupPolicygroupAllowFrom/allowFromgroups-Allowlist-Einträge- Erwähnungs-Gating (
requireMention+ Erwähnungsmuster) - doppelte Schlüssel in
openclaw.json(JSON5): spätere Einträge überschreiben frühere, behalten Sie daher pro Geltungsbereich nur ein einzelnesgroupPolicybei
Bun-Laufzeitwarnung
Bun-Laufzeitwarnung
System-Prompts
WhatsApp unterstützt System-Prompts im Telegram-Stil für Gruppen und direkte Chats über die Mapsgroups und direct.
Auflösungshierarchie für Gruppennachrichten:
Zuerst wird die effektive groups-Map bestimmt: Wenn das Konto eine eigene groups definiert, ersetzt sie die Root-groups-Map vollständig (keine tiefe Zusammenführung). Die Prompt-Suche läuft anschließend auf der daraus resultierenden einzelnen Map:
- Gruppenspezifischer System-Prompt (
groups["<groupId>"].systemPrompt): wird verwendet, wenn der spezifische Gruppeneintrag in der Map vorhanden ist und sein SchlüsselsystemPromptdefiniert ist. WennsystemPrompteine leere Zeichenfolge ("") ist, wird der Platzhalter unterdrückt und kein System-Prompt angewendet. - Gruppen-Platzhalter-System-Prompt (
groups["*"].systemPrompt): wird verwendet, wenn der spezifische Gruppeneintrag in der Map gar nicht vorhanden ist oder wenn er vorhanden ist, aber keinen SchlüsselsystemPromptdefiniert.
direct-Map bestimmt: Wenn das Konto eine eigene direct definiert, ersetzt sie die Root-direct-Map vollständig (keine tiefe Zusammenführung). Die Prompt-Suche läuft anschließend auf der daraus resultierenden einzelnen Map:
- Direktspezifischer System-Prompt (
direct["<peerId>"].systemPrompt): wird verwendet, wenn der spezifische Peer-Eintrag in der Map vorhanden ist und sein SchlüsselsystemPromptdefiniert ist. WennsystemPrompteine leere Zeichenkette ("") ist, wird der Platzhalter unterdrückt und kein System-Prompt angewendet. - Direkter Platzhalter-System-Prompt (
direct["*"].systemPrompt): wird verwendet, wenn der spezifische Peer-Eintrag in der Map vollständig fehlt oder wenn er vorhanden ist, aber keinen SchlüsselsystemPromptdefiniert.
dms bleibt der schlanke Override-Bucket für den Verlauf pro DM (dms.<id>.historyLimit). Prompt-Overrides befinden sich unter direct.groups auf Root-Ebene in einer Multi-Konto-Konfiguration absichtlich für alle Konten unterdrückt, auch für Konten, die keine eigenen groups definieren, um zu verhindern, dass ein Bot Gruppennachrichten für Gruppen empfängt, denen er nicht angehört. WhatsApp wendet diese Schutzmaßnahme nicht an: groups und direct auf Root-Ebene werden immer von Konten geerbt, die keinen Override auf Kontoebene definieren, unabhängig davon, wie viele Konten konfiguriert sind. Wenn Sie in einer WhatsApp-Konfiguration mit mehreren Konten Gruppen- oder Direkt-Prompts pro Konto möchten, definieren Sie die vollständige Map explizit unter jedem Konto, statt sich auf Defaults auf Root-Ebene zu verlassen.
Wichtiges Verhalten:
channels.whatsapp.groupsist sowohl eine Konfigurations-Map pro Gruppe als auch die Allowlist für Gruppen auf Chat-Ebene. Im Root- oder Kontobereich bedeutetgroups["*"], dass „alle Gruppen zugelassen werden“.- Fügen Sie einen Platzhalter-Gruppen-
systemPromptnur hinzu, wenn Sie bereits möchten, dass dieser Bereich alle Gruppen zulässt. Wenn weiterhin nur eine feste Menge von Gruppen-IDs berechtigt sein soll, verwenden Siegroups["*"]nicht als Prompt-Default. Wiederholen Sie den Prompt stattdessen auf jedem explizit zugelassenen Gruppeneintrag. - Gruppenzulassung und Absenderautorisierung sind getrennte Prüfungen.
groups["*"]erweitert die Menge der Gruppen, die die Gruppenverarbeitung erreichen können, autorisiert aber nicht automatisch jeden Absender in diesen Gruppen. Der Absenderzugriff wird weiterhin separat durchchannels.whatsapp.groupPolicyundchannels.whatsapp.groupAllowFromgesteuert. channels.whatsapp.directhat nicht dieselbe Nebenwirkung für DMs.direct["*"]stellt nur eine Standardkonfiguration für Direkt-Chats bereit, nachdem eine DM bereits durchdmPolicyplusallowFromoder Pairing-Store-Regeln zugelassen wurde.
Verweise zur Konfigurationsreferenz
Primäre Referenz: Wichtige WhatsApp-Felder:- Zugriff:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - Zustellung:
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - mehrere Konten:
accounts.<id>.enabled,accounts.<id>.authDir, Overrides auf Kontoebene - Betrieb:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.*,web.whatsapp.* - Sitzungsverhalten:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit - Prompts:
groups.<id>.systemPrompt,groups["*"].systemPrompt,direct.<id>.systemPrompt,direct["*"].systemPrompt