Configuration
WhatsApp-Gruppennachrichten
Für das kanalübergreifende Gruppenmodell (Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo) siehe Gruppen. Diese Seite behandelt das WhatsApp-spezifische Verhalten zusätzlich zu diesem Modell: Aktivierung, Gruppen-Allowlists, Sitzungsschlüssel pro Gruppe und Kontextinjektion aus ausstehenden Nachrichten.
Ziel: OpenClaw kann in WhatsApp-Gruppen sitzen, nur bei einem Ping aufwachen und diesen Thread von der persönlichen DM-Sitzung getrennt halten.
Verhalten
- Aktivierungsmodi:
mention(Standard) oderalways.mentionerfordert einen Ping (echte WhatsApp-@-Erwähnungen übermentionedJids, sichere Regex-Muster oder die E.164-Nummer des Bots an beliebiger Stelle im Text).alwaysweckt den Agent bei jeder Nachricht, er sollte aber nur antworten, wenn er einen sinnvollen Mehrwert liefern kann; andernfalls gibt er das exakte stille TokenNO_REPLY/no_replyzurück. Standardwerte können in der Konfiguration (channels.whatsapp.groups) festgelegt und pro Gruppe über/activationüberschrieben werden. Wennchannels.whatsapp.groupsgesetzt ist, dient es außerdem als Gruppen-Allowlist (fügen Sie"*"hinzu, um alle zu erlauben). - Gruppenrichtlinie:
channels.whatsapp.groupPolicysteuert, ob Gruppennachrichten akzeptiert werden (open|disabled|allowlist).allowlistverwendetchannels.whatsapp.groupAllowFrom(Fallback: expliziteschannels.whatsapp.allowFrom). Standard istallowlist(blockiert, bis Sie Absender hinzufügen). - Sitzungen pro Gruppe: Sitzungsschlüssel sehen wie
agent:<agentId>:whatsapp:group:<jid>aus, sodass Befehle wie/verbose on,/trace onoder/think high(als eigenständige Nachrichten gesendet) auf diese Gruppe beschränkt sind; der persönliche DM-Status bleibt unverändert. Heartbeats werden für Gruppen-Threads übersprungen. - Kontextinjektion: nur ausstehende Gruppennachrichten (Standard 50), die keinen Lauf ausgelöst haben, werden unter
[Chat messages since your last reply - for context]vorangestellt, mit der auslösenden Zeile unter[Current message - respond to this]. Nachrichten, die bereits in der Sitzung enthalten sind, werden nicht erneut injiziert. - Absenderanzeige: Jeder Gruppen-Batch endet jetzt mit
[from: Sender Name (+E164)], damit Pi weiß, wer spricht. - Ephemer/Einmalansicht: Wir entpacken diese Nachrichten vor dem Extrahieren von Text/Erwähnungen, sodass Pings darin weiterhin auslösen.
- Gruppen-System-Prompt: Beim ersten Turn einer Gruppensitzung (und immer dann, wenn
/activationden Modus ändert) injizieren wir einen kurzen Hinweis in den System-Prompt wieYou are replying inside the WhatsApp group "<subject>". Group members: Alice (+44...), Bob (+43...), ... Activation: trigger-only ... Address the specific sender noted in the message context.Wenn keine Metadaten verfügbar sind, teilen wir dem Agent trotzdem mit, dass es sich um einen Gruppenchat handelt.
Konfigurationsbeispiel (WhatsApp)
Fügen Sie einen groupChat-Block zu ~/.openclaw/openclaw.json hinzu, damit Pings über Anzeigenamen auch dann funktionieren, wenn WhatsApp das sichtbare @ im Textkörper entfernt:
{
channels: {
whatsapp: {
groups: {
"*": { requireMention: true },
},
},
},
agents: {
list: [
{
id: "main",
groupChat: {
historyLimit: 50,
mentionPatterns: ["@?openclaw", "\\+?15555550123"],
},
},
],
},
}
Hinweise:
- Die Regexes sind groß-/kleinschreibungsunabhängig und verwenden dieselben Safe-Regex-Schutzmechanismen wie andere Regex-Oberflächen in der Konfiguration; ungültige Muster und unsichere verschachtelte Wiederholungen werden ignoriert.
- WhatsApp sendet weiterhin kanonische Erwähnungen über
mentionedJids, wenn jemand auf den Kontakt tippt. Der Nummern-Fallback wird daher selten benötigt, ist aber ein nützliches Sicherheitsnetz.
Aktivierungsbefehl (nur Owner)
Verwenden Sie den Gruppenchat-Befehl:
/activation mention/activation always
Nur die Owner-Nummer (aus channels.whatsapp.allowFrom oder, falls nicht gesetzt, die eigene E.164-Nummer des Bots) kann dies ändern. Senden Sie /status als eigenständige Nachricht in der Gruppe, um den aktuellen Aktivierungsmodus zu sehen.
Verwendung
- Fügen Sie Ihr WhatsApp-Konto (das Konto, auf dem OpenClaw läuft) zur Gruppe hinzu.
- Schreiben Sie
@openclaw …(oder fügen Sie die Nummer ein). Nur Absender auf der Allowlist können es auslösen, sofern Sie nichtgroupPolicy: "open"festlegen. - Der Agent-Prompt enthält den aktuellen Gruppenkontext plus die abschließende
[from: …]-Markierung, damit er die richtige Person ansprechen kann. - Sitzungsbezogene Anweisungen (
/verbose on,/trace on,/think high,/newoder/reset,/compact) gelten nur für die Sitzung dieser Gruppe; senden Sie sie als eigenständige Nachrichten, damit sie registriert werden. Ihre persönliche DM-Sitzung bleibt unabhängig.
Testen / Verifizierung
- Manueller Smoke-Test:
- Senden Sie einen
@openclaw-Ping in der Gruppe und bestätigen Sie eine Antwort, die den Namen des Absenders referenziert. - Senden Sie einen zweiten Ping und prüfen Sie, dass der Verlaufsblock enthalten ist und beim nächsten Turn gelöscht wird.
- Senden Sie einen
- Prüfen Sie die Gateway-Logs (mit
--verboseausführen), um Einträge vom Typinbound web messagezu sehen, diefrom: <groupJid>und das Suffix[from: …]anzeigen.
Bekannte Hinweise
- Heartbeats werden für Gruppen absichtlich übersprungen, um störende Broadcasts zu vermeiden.
- Echo-Unterdrückung verwendet den kombinierten Batch-String; wenn Sie zweimal identischen Text ohne Erwähnungen senden, erhält nur die erste Nachricht eine Antwort.
- Einträge im Sitzungsspeicher erscheinen als
agent:<agentId>:whatsapp:group:<jid>im Sitzungsspeicher (standardmäßig~/.openclaw/agents/<agentId>/sessions/sessions.json); ein fehlender Eintrag bedeutet lediglich, dass die Gruppe noch keinen Lauf ausgelöst hat. - Tippindikatoren in Gruppen folgen
agents.defaults.typingMode. Wenn sichtbare Antworten den Standardmodus nur über das Nachrichten-Tool verwenden, beginnt das Tippen standardmäßig sofort, sodass Gruppenmitglieder sehen können, dass der Agent arbeitet, selbst wenn keine automatische finale Antwort gepostet wird. Eine explizite Tippmodus-Konfiguration hat weiterhin Vorrang.