Installation (bei Bedarf)
- Onboarding (
openclaw onboard) undopenclaw channels add --channel whatsappfragen bei der ersten Auswahl nach der Installation des WhatsApp-Plugins. openclaw channels login --channel whatsappbietet den Installationsablauf ebenfalls an, wenn das Plugin noch nicht vorhanden ist.- Dev-Channel + Git-Checkout: verwendet standardmäßig den lokalen Plugin-Pfad.
- Stable/Beta: installiert zuerst das offizielle
@openclaw/whatsapp-Plugin aus ClawHub, mit npm als Fallback. - Die WhatsApp-Laufzeit wird außerhalb des zentralen OpenClaw-npm-Pakets verteilt, damit WhatsApp-spezifische Laufzeitabhängigkeiten beim externen Plugin bleiben.
@openclaw/whatsapp) nur, wenn Sie den Registry-
Fallback benötigen. Pinnen Sie eine exakte Version nur, wenn Sie eine reproduzierbare Installation benötigen.
Kopplung
Channel-Fehlerbehebung
Gateway-Konfiguration
Schnelle Einrichtung
WhatsApp verknüpfen (QR)
Aktuellen Anfragenden mit MeowCaller anrufen (experimentell)
Das WhatsApp-Plugin kannwhatsapp_call in Agent-Turns offenlegen, die aus WhatsApp stammen. Das Tool
verwendet MeowCaller, um einen WhatsApp-Sprachanruf an
den aktuell autorisierten Anfragenden zu starten, und spielt nach Annahme eine OpenClaw-TTS-Nachricht ab. Das Tool
akzeptiert keine Zielnummer, daher kann ein Prompt den Anruf nicht an Dritte umleiten.
Diese experimentelle Fähigkeit ist standardmäßig deaktiviert.
Experimentelle Anrufe aktivieren
openclaw.json actions.calls: true hinzu:false ist, legt OpenClaw das Tool whatsapp_call nicht für den Agent offen.Geprüfte MeowCaller-CLI installieren
meowcaller im PATH.
Bis MeowCaller PR #7 gemergt ist, bauen Sie
den geprüften Branch bei Commit 752050471fc2bf7a8cdfbf7dbd3cd4e865d85d3f:$HOME/.local/bin auch im PATH des Gateway-Dienstes liegt. Diese Revision stellt
explizite Befehle pair und send-only notify bereit. notify öffnet kein Mikrofon, keinen Lautsprecher,
kein Videogerät, keine Senke für eingehendes Audio und keine Diagnoseerfassung. Ersetzen Sie es nicht durch den Befehl
play der Beispiel-CLI.MeowCaller-Linked-Device koppeln
whatsapp_call meldet das
kontospezifische Statusverzeichnis und den Kopplungsbefehl. Für das Standardkonto:MeowCaller linked device ready. Der Befehl beendet sich dann. Halten Sie wa-voip.db
privat; sie ist die MeowCaller-Linked-Device-Sitzung. Die Statusaktion whatsapp_call
gibt den kontospezifischen Befehl und die Shell zurück, wenn Sie ein nicht standardmäßiges Konto verwenden. Unter
Windows führen Sie den entsprechenden PowerShell-Befehl aus; MeowCaller erstellt das Store-Verzeichnis.TTS konfigurieren und über WhatsApp anrufen
Call me and say the build finished. Das Tool löst den Absender
aus vertrauenswürdigem eingehendem Kontext auf, synthetisiert eine temporäre private WAV-Datei, führt MeowCaller für ein
begrenztes Anruffenster aus und löscht die Audiodatei anschließend. OpenClaw übergibt den Store des Kontos
explizit, wartet nach Annahme, Wiedergabe und Auflegen auf einen Exit-Status von null und behandelt
ein Timeout oder einen Exit ungleich null als fehlgeschlagenen Tool-Aufruf.- nur ausgehende 1:1-Audioanrufe
- keine beliebigen Zielnummern
- keine gemeinsame Authentifizierung mit der Chat-Verbindung
- keine Selbstanrufe im Modus mit persönlicher Nummer/Selbst-Chat
- synthetisiertes Audio ist auf 60 Sekunden begrenzt
- keine Empfangsbestätigung zur Hörbarkeit auf dem Handgerät über MeowCallers Abschluss von Annahme/Wiedergabe/Auflegen hinaus
- OpenClaw stoppt den Begleitprozess nach einem begrenzten Fenster von 115-175 Sekunden, einschließlich MeowCallers Verbindungs-, Annahme-, Wiedergabe- und Beendigungsphasen
Bereitstellungsmuster
Dedizierte Nummer (empfohlen)
Dedizierte Nummer (empfohlen)
- separate WhatsApp-Identität für OpenClaw
- klarere DM-Allowlists und Routing-Grenzen
- geringere Wahrscheinlichkeit von Verwechslungen durch Selbst-Chat
Fallback mit persönlicher Nummer
Fallback mit persönlicher Nummer
dmPolicy: "allowlist"allowFromenthält Ihre persönliche NummerselfChatMode: true
allowFrom.Channel-Umfang nur für WhatsApp Web
Channel-Umfang nur für WhatsApp Web
Baileys).In der integrierten Chat-Channel-Registry gibt es keinen separaten Twilio-WhatsApp-Messaging-Channel.Laufzeitmodell
- Gateway verwaltet den WhatsApp-Socket und die Reconnect-Schleife.
- Der Reconnect-Watchdog verwendet WhatsApp-Web-Transportaktivität, nicht nur eingehendes App-Nachrichtenvolumen, sodass eine stille Linked-Device-Sitzung nicht allein deshalb neu gestartet wird, weil kürzlich niemand eine Nachricht gesendet hat. Eine längere Obergrenze für Anwendungspausen erzwingt weiterhin einen Reconnect, wenn weiter Transport-Frames eintreffen, aber innerhalb des Watchdog-Fensters keine Anwendungsnachrichten verarbeitet werden; nach einem vorübergehenden Reconnect für eine kürzlich aktive Sitzung verwendet diese Prüfung auf Anwendungspausen für das erste Wiederherstellungsfenster das normale Nachrichten-Timeout.
- Baileys-Socket-Timings sind explizit unter
web.whatsapp.*:keepAliveIntervalMssteuert WhatsApp-Web-Anwendungs-Pings,connectTimeoutMssteuert das Timeout des öffnenden Handshakes, unddefaultQueryTimeoutMssteuert Baileys-Abfragewartezeiten plus die lokalen OpenClaw-Grenzen für ausgehendes Senden/Präsenz und eingehende Lesebestätigungsoperationen. - 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 aktuellen WhatsApp-Teilnehmermetadaten entspricht, einschließlich LID-gestützter Gruppen. - Status- und Broadcast-Chats werden ignoriert (
@status,@broadcast). - Der Reconnect-Watchdog folgt WhatsApp-Web-Transportaktivität, nicht nur eingehendem App-Nachrichtenvolumen: stille Linked-Device-Sitzungen bleiben aktiv, solange Transport-Frames weiterlaufen, aber ein Transportstillstand erzwingt einen Reconnect deutlich vor dem späteren Remote-Disconnect-Pfad.
- Direktchats verwenden DM-Sitzungsregeln (
session.dmScope; Standardmainführt DMs in der Hauptsitzung des Agent 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 berücksichtigt standardmäßige Proxy-Umgebungsvariablen auf dem Gateway-Host (
HTTPS_PROXY,HTTP_PROXY,NO_PROXY/ Varianten in Kleinbuchstaben). Bevorzugen Sie hostweite Proxy-Konfiguration gegenüber Channel-spezifischen WhatsApp-Proxy-Einstellungen. - Wenn
messages.removeAckAfterReplyaktiviert ist, entfernt OpenClaw die WhatsApp-Ack-Reaktion, nachdem eine sichtbare Antwort zugestellt wurde.
Genehmigungs-Prompts
WhatsApp kann Exec- und Plugin-Genehmigungs-Prompts mit👍-/👎-Reaktionen rendern. Die Zustellung wird
durch die Top-Level-Konfiguration für Genehmigungsweiterleitung gesteuert:
approvals.exec und approvals.plugin sind unabhängig. WhatsApp als Channel zu aktivieren verknüpft nur
den Transport; es sendet keine Genehmigungs-Prompts, sofern die passende Genehmigungsfamilie nicht aktiviert ist
und an WhatsApp routet. Der Sitzungsmodus liefert native Emoji-Genehmigungen nur für Genehmigungen, die
aus WhatsApp stammen. Der Zielmodus verwendet die gemeinsame Weiterleitungs-Pipeline für explizite WhatsApp-
Ziele und erstellt keinen separaten Fanout für Genehmiger-DMs.
WhatsApp-Genehmigungsreaktionen erfordern explizite WhatsApp-Genehmiger aus allowFrom oder "*".
defaultTo steuert gewöhnliche Standardnachrichtenziele; es ist kein Genehmiger für Genehmigungen. Manuelle
/approve-Befehle durchlaufen weiterhin den normalen WhatsApp-Absenderautorisierungspfad, bevor
die Genehmigung aufgelöst wird.
Plugin-Hooks und Datenschutz
WhatsApp-Eingangsnachrichten können persönliche Nachrichteninhalte, Telefonnummern, Gruppenkennungen, Absendernamen und Felder zur Sitzungs-Korrelation enthalten. Aus diesem Grund sendet WhatsApp eingehendemessage_received-Hook-Payloads nicht an Plugins,
es sei denn, Sie aktivieren dies ausdrücklich:
Zugriffskontrolle und Aktivierung
- DM policy
- Group policy + allowlists
- Mentions + /activation
channels.whatsapp.dmPolicy steuert den Zugriff auf direkte 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 blockiert keine expliziten ausgehenden Sendungen an WhatsApp-Gruppen-JIDs oder @newsletter-Kanal-JIDs.Überschreibung für mehrere Konten: channels.whatsapp.accounts.<id>.dmPolicy (und allowFrom) haben für dieses Konto Vorrang vor Standardeinstellungen auf Kanalebene.Details zum Laufzeitverhalten:- Kopplungen werden im Kanal-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 Zulassungsliste konfiguriert ist, ist die verknüpfte eigene Nummer standardmäßig erlaubt
- OpenClaw koppelt ausgehende
fromMe-DMs niemals automatisch (Nachrichten, die Sie vom verknüpften Gerät an sich selbst senden)
Konfigurierte ACP-Bindings
WhatsApp unterstützt persistente ACP-Bindings mitbindings[]-Einträgen auf oberster Ebene:
- Direkte Chats stimmen mit E.164-Nummern wie
+15555550123überein. - Gruppen stimmen mit WhatsApp-Gruppen-JIDs wie
120363424282127706@g.usüberein. - Gruppen-Zulassungslisten, Absenderregel und Erwähnungs- oder Aktivierungs-Gating werden ausgeführt, bevor OpenClaw sicherstellt, dass die konfigurierte ACP-Sitzung existiert.
- Ein übereinstimmendes konfiguriertes ACP-Binding besitzt die Route. WhatsApp-Broadcast-Gruppen verteilen diesen Durchlauf nicht an gewöhnliche WhatsApp-Sitzungen.
Verhalten für persönliche Nummern und Selbst-Chats
Wenn die verknüpfte eigene Nummer auch inallowFrom vorhanden ist, werden WhatsApp-Schutzmaßnahmen für Selbst-Chats aktiviert:
- Lesebestätigungen für Selbst-Chat-Durchläufe überspringen
- Auto-Trigger-Verhalten per Erwähnungs-JID ignorieren, das Sie andernfalls selbst anpingen würde
- wenn
messages.responsePrefixnicht gesetzt ist, verwenden Selbst-Chat-Antworten standardmäßig[{identity.name}]oder[openclaw]
Nachrichtennormalisierung und Kontext
Inbound envelope + reply context
Inbound envelope + reply context
ReplyToId, ReplyToBody, ReplyToSender, Absender-JID/E.164).
Wenn das zitierte Antwortziel herunterladbare Medien sind, speichert OpenClaw diese über
den normalen Eingang-Medienspeicher und stellt sie als MediaPath/MediaType bereit, damit
der Agent das referenzierte Bild prüfen kann, statt nur
<media:image> zu sehen.Media placeholders and location/contact extraction
Media placeholders and location/contact extraction
<media:image><media:video><media:audio><media:document><media:sticker>
<media:audio> ist. Dadurch kann das Aussprechen der Bot-Erwähnung in der Sprachnotiz
die Antwort auslösen. Wenn das Transkript den Bot weiterhin nicht erwähnt, wird das
Transkript statt des rohen Platzhalters in der ausstehenden Gruppenhistorie behalten.Standorttexte verwenden knappen Koordinatentext. Standortlabels/-kommentare und Kontakt-/vCard-Details werden als eingezäunte nicht vertrauenswürdige Metadaten gerendert, nicht als Inline-Prompttext.Pending group history injection
Pending group history injection
- Standardlimit:
50 - Konfiguration:
channels.whatsapp.historyLimit - Fallback:
messages.groupChat.historyLimit 0deaktiviert
[Chat messages since your last reply - for context][Current message - respond to this]
Read receipts
Read receipts
Zustellung, Aufteilung und Medien
Text chunking
Text chunking
- Standardlimit für Textblöcke:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- Der Modus
newlinebevorzugt Absatzgrenzen (Leerzeilen) und fällt dann auf längensichere Aufteilung zurück
Outbound media behavior
Outbound media behavior
- unterstützt Bild-, Video-, Audio- (PTT-Sprachnotiz) und Dokument-Payloads
- Audiomedien werden über den Baileys-
audio-Payload mitptt: truegesendet, sodass WhatsApp-Clients sie als Push-to-Talk-Sprachnotiz rendern - Antwort-Payloads behalten
audioAsVoicebei; TTS-Sprachnotiz-Ausgaben für WhatsApp bleiben auf diesem PTT-Pfad, selbst wenn der Provider MP3 oder WebM zurückgibt - natives Ogg/Opus-Audio wird als
audio/ogg; codecs=opusgesendet, um Sprachnotiz-Kompatibilität zu gewährleisten - Nicht-Ogg-Audio, einschließlich Microsoft Edge TTS-MP3-/WebM-Ausgaben, wird vor der PTT-Zustellung mit
ffmpegzu 48-kHz-Mono-Ogg/Opus transkodiert /tts latestsendet die neueste Assistentenantwort als eine Sprachnotiz und unterdrückt wiederholte Sendungen 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 forceDocument/asDocumentsendet ausgehende Bilder, GIFs und Videos über den Baileys-Dokument-Payload, um WhatsApp-Medienkomprimierung zu vermeiden und gleichzeitig den aufgelösten Dateinamen und MIME-Typ beizubehalten- Beschriftungen werden beim Senden von Antwort-Payloads mit mehreren Medien auf das erste Medienelement angewendet, außer bei PTT-Sprachnotizen: Diese senden zuerst das Audio und sichtbaren Text separat, weil WhatsApp-Clients Sprachnotiz-Beschriftungen nicht konsistent rendern
- Medienquellen können HTTP(S),
file://oder lokale Pfade sein
Media size limits and fallback behavior
Media size limits and fallback behavior
- Speicherobergrenze für eingehende Medien:
channels.whatsapp.mediaMaxMb(Standard50) - Sendeobergrenze für ausgehende Medien:
channels.whatsapp.mediaMaxMb(Standard50) - Überschreibungen pro Konto verwenden
channels.whatsapp.accounts.<accountId>.mediaMaxMb - Bilder werden automatisch optimiert (Größe/Qualitätssuche), um Limits einzuhalten, außer
forceDocument/asDocumentfordert Dokumentzustellung an - bei einem Fehler beim Senden von Medien sendet der Fallback für das erste Element eine Textwarnung, statt die Antwort stillschweigend zu verwerfen
Antwortzitate
WhatsApp unterstützt natives Zitieren von Antworten, bei dem 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 Antwortblock zitieren |
"all" | Jeden ausgehenden Antwortblock zitieren |
"batched" | In der Warteschlange gebündelte Antworten zitieren, unmittelbare Antworten jedoch nicht zitieren |
"off". Überschreibungen pro Konto verwenden channels.whatsapp.accounts.<id>.replyToMode.
Reaktionsstufe
channels.whatsapp.reactionLevel steuert, wie breit der Agent Emoji-Reaktionen auf WhatsApp verwendet:
| Stufe | Ack-Reaktionen | Vom Agent initiierte Reaktionen | Beschreibung |
|---|---|---|---|
"off" | Nein | Nein | Überhaupt keine Reaktionen |
"ack" | Ja | Nein | Nur Ack-Reaktionen (Empfang vor der Antwort) |
"minimal" | Ja | Ja (konservativ) | Ack + Agent-Reaktionen mit konservativer Anleitung |
"extensive" | Ja | Ja (empfohlen) | Ack + Agent-Reaktionen mit empfohlener Anleitung |
"minimal".
Überschreibungen pro Konto verwenden channels.whatsapp.accounts.<id>.reactionLevel.
Bestätigungsreaktionen
WhatsApp unterstützt unmittelbare Ack-Reaktionen beim eingehenden Empfang überchannels.whatsapp.ackReaction.
Ack-Reaktionen werden durch reactionLevel gesteuert — sie werden unterdrückt, wenn reactionLevel "off" ist.
- wird sofort gesendet, nachdem eingehend akzeptiert wurde (vor der Antwort)
- wenn
ackReactionohneemojivorhanden ist, verwendet WhatsApp das Identitäts-Emoji des gerouteten Agenten, mit Fallback auf ”👀”; lassen SieackReactionweg oder setzen Sieemoji: "", um keine Bestätigungsreaktion zu senden - Fehler werden protokolliert, blockieren aber nicht die normale Antwortzustellung
- Gruppenmodus
mentionsreagiert bei durch Erwähnungen ausgelösten Turns; Gruppenaktivierungalwaysdient als Umgehung für diese Prüfung - WhatsApp verwendet
channels.whatsapp.ackReaction(das älteremessages.ackReactionwird hier nicht verwendet)
Lifecycle-Statusreaktionen
Setzen Siemessages.statusReactions.enabled: true, damit WhatsApp während eines Turns die Bestätigungsreaktion ersetzt, anstatt ein statisches Empfangs-Emoji stehen zu lassen. Wenn aktiviert, verwendet OpenClaw denselben Reaktionsslot der eingehenden Nachricht für Lifecycle-Zustände wie in die Warteschlange gestellt, denkend, Tool-Aktivität, Compaction, erledigt und Fehler.
channels.whatsapp.ackReactionsteuert weiterhin, ob Statusreaktionen für Direktnachrichten und Gruppen zulässig sind.- Die Statusreaktion für die Warteschlange verwendet dasselbe effektive Bestätigungs-Emoji wie einfache Bestätigungsreaktionen.
- WhatsApp hat einen Bot-Reaktionsslot pro Nachricht, daher ersetzen Lifecycle-Aktualisierungen die aktuelle Reaktion direkt.
messages.removeAckAfterReply: trueentfernt die finale Statusreaktion nach der konfigurierten Haltezeit für erledigt/Fehler.- Tool-Emoji-Kategorien umfassen
tool,coding,web,deploy,buildundconcierge.
Mehrere Konten und Zugangsdaten
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
Zugangsdatenpfade und Legacy-Kompatibilität
Zugangsdatenpfade und Legacy-Kompatibilität
- aktueller Authentifizierungspfad:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - Sicherungsdatei:
creds.json.bak - ältere 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-Authentifizierungszustand für dieses Konto.Wenn ein Gateway erreichbar ist, stoppt die Abmeldung zuerst den aktiven 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 aktiven Listener, bevor die Kontokonfiguration deaktiviert oder gelöscht wird.In Legacy-Authentifizierungsverzeichnissen bleibt oauth.json erhalten, während Baileys-Authentifizierungsdateien entfernt werden.Tools, Aktionen und Konfigurationsschreibvorgänge
- Agent-Tool-Unterstützung umfasst die WhatsApp-Reaktionsaktion (
react). - Aktions-Gates:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Vom Kanal initiierte 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-Zeitvorgaben unter web.whatsapp an. Beginnen Sie damit,
keepAliveIntervalMs unter das Leerlauf-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
Gateway und WhatsApp fehlerfrei sind, führen Sie openclaw doctor aus. Unter Linux warnt doctor
vor älteren crontab-Einträgen, die noch
~/.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 den Gateway-Zustand falsch melden kann.Falls nötig, verknüpfen Sie mit channels login erneut.QR-Login läuft hinter einem Proxy ab
QR-Login läuft hinter einem Proxy ab
openclaw channels login --channel whatsapp schlägt fehl, bevor ein nutzbarer QR-Code angezeigt wird, mit status=408 Request Time-out oder einer getrennten TLS-Socket-Verbindung.WhatsApp-Web-Login verwendet die Standard-Proxy-Umgebung des Gateway-Hosts (HTTPS_PROXY, HTTP_PROXY, Varianten in Kleinbuchstaben 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, halten Sie daher pro Scope nur ein einzigesgroupPolicy
channels.whatsapp.groups vorhanden ist, kann WhatsApp weiterhin Nachrichten aus anderen Gruppen beobachten, aber OpenClaw verwirft sie vor dem Sitzungsrouting. Fügen Sie die Gruppen-JID zu channels.whatsapp.groups hinzu oder fügen Sie groups["*"] hinzu, um alle Gruppen zuzulassen, während die Senderautorisierung unter groupPolicy und groupAllowFrom bleibt.Bun-Runtime-Warnung
Bun-Runtime-Warnung
System-Prompts
WhatsApp unterstützt Telegram-artige System-Prompts für Gruppen und Direktchats über die Mapsgroups und direct.
Auflösungshierarchie für Gruppennachrichten:
Die effektive groups-Map wird zuerst bestimmt: Wenn das Konto eigene groups definiert, ersetzt sie die Root-groups-Map vollständig (kein Deep Merge). Die Prompt-Suche läuft dann auf der 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. WennsystemPromptein leerer String ("") ist, wird der Wildcard unterdrückt und kein System-Prompt angewendet. - Gruppen-Wildcard-System-Prompt (
groups["*"].systemPrompt): wird verwendet, wenn der spezifische Gruppeneintrag in der Map vollständig fehlt oder wenn er vorhanden ist, aber keinen SchlüsselsystemPromptdefiniert.
direct-Map wird zuerst bestimmt: Wenn das Konto eigene direct definiert, ersetzt sie die Root-direct-Map vollständig (kein Deep Merge). Die Prompt-Suche läuft dann auf der 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. WennsystemPromptein leerer String ("") ist, wird der Wildcard unterdrückt und kein System-Prompt angewendet. - Direkt-Wildcard-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 pro DM für den Verlauf (dms.<id>.historyLimit). Prompt-Overrides befinden sich unter direct.groups für alle Konten in einer Mehrkonten-Einrichtung absichtlich 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: Root-groups und Root-direct werden immer von Konten geerbt, die keinen Override auf Kontoebene definieren, unabhängig davon, wie viele Konten konfiguriert sind. Wenn Sie in einer WhatsApp-Mehrkonten-Einrichtung gruppen- oder direktchatspezifische Prompts pro Konto möchten, definieren Sie die vollständige Map explizit unter jedem Konto, statt sich auf Root-Standardwerte zu verlassen.
Wichtiges Verhalten:
channels.whatsapp.groupsist sowohl eine Konfigurations-Map pro Gruppe als auch die Allowlist auf Chat-Ebene für Gruppen. Auf Root- oder Konto-Scope bedeutetgroups["*"]: „Alle Gruppen sind zugelassen“ für diesen Scope.- Fügen Sie einen Wildcard-Gruppen-
systemPromptnur hinzu, wenn dieser Scope bereits alle Gruppen zulassen soll. Wenn weiterhin nur eine feste Menge von Gruppen-IDs zulässig sein soll, verwenden Siegroups["*"]nicht als Prompt-Standard. Wiederholen Sie den Prompt stattdessen für jeden explizit in der Allowlist enthaltenen Gruppeneintrag. - Gruppenzulassung und Senderautorisierung sind getrennte Prüfungen.
groups["*"]erweitert die Menge der Gruppen, die die Gruppenverarbeitung erreichen können, autorisiert aber nicht von sich aus jeden Sender in diesen Gruppen. Senderzugriff wird weiterhin separat durchchannels.whatsapp.groupPolicyundchannels.whatsapp.groupAllowFromgesteuert. channels.whatsapp.directhat nicht denselben Nebeneffekt für DMs.direct["*"]stellt nur eine Standardkonfiguration für Direktchats bereit, nachdem ein 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 - Multi-Account:
accounts.<id>.enabled,accounts.<id>.authDir, Überschreibungen 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