Gruppmeddelanden (WhatsApp web channel)
Mål: låta Clawd sitta i WhatsApp-grupper, vakna bara när den pingas och hålla den tråden separat från den personliga DM-sessionen. Obs:agents.list[].groupChat.mentionPatterns används nu av Telegram/Discord/Slack/iMessage också; detta dokument fokuserar på WhatsApp-specifikt beteende. För multi-agent inställningar, sätt agents.list[].groupChat.mentionPatterns per agent (eller använd messages.groupChat.mentionPatterns som en global reserv).
Vad som är implementerat (2025-12-03)
- Aktiveringslägen:
mention(standard) elleralltid.nämnakräver en ping (riktig WhatsApp @-nämner vianämnedJids, regex mönster, eller botens E.164 var som helst i texten).alltidväcker agenten på varje meddelande men det bör bara svara när det kan addera meningsfullt värde; annars returnerar det tysta tokenNO_REPLY. Standardvärden kan ställas in i konfigurationen (channels.whatsapp.groups) och åsidosättas per grupp via/activation. Närchannels.whatsapp.groupsär satt, fungerar det också som en grupptillåten lista (inkludera"*"för att tillåta alla). - Grupppolicy:
channels.whatsapp.groupPolicykontrollerar om gruppmeddelanden accepteras (open<unk> disabled<unk> allowlist).allowlistanvänderchannels.whatsapp.groupAllowFrom(fallback: explicitchannels.whatsapp.allowFrom). Standard ärallowlist(blockerad tills du lägger till avsändare). - Sessioner per grupp: sessionsnycklar ser ut som
agent:<agentId>:whatsapp:group:<jid>så kommandon som/verbose oneller/think high(skickas som fristående meddelanden) är begränsade till den gruppen; Personligt DM-tillstånd är orört. Hjärtslag hoppas över för grupptrådar. - Kontextinjektion: väntandebara gruppmeddelanden (standard 50) som _inte aktiverade en körning är prefixade under
[Chattmeddelanden sedan ditt senaste svar - för sammanhang], med den utlösande raden under[Aktuellt meddelande - svara på detta]. Meddelanden som redan finns i sessionen återinjiceras. - Avsändarsynlighet: varje gruppbatch avslutas nu med
[from: Sender Name (+E164)]så att Pi vet vem som talar. - Försvinnande/view-once: dessa packas upp innan text/omnämnanden extraheras, så pingar i dem triggar fortfarande.
- Gruppsystemprompt: vid första vändningen av en gruppsession (och när
/activationändrar läget) injicerar vi en kort blurb i systemprompten somDu svarar inuti WhatsApp-gruppen "<subject>". Gruppmedlemmar: Alice (+44...), Bob (+43...), … Aktivering: Endast trigger- … Adress till den specifika avsändare som noteras i meddelandekontexten.Om metadata inte är tillgängligt berättar vi fortfarande för agenten att det är en gruppchatt.
Konfigexempel (WhatsApp)
Lägg till ettgroupChat‑block i ~/.openclaw/openclaw.json så att pingar via visningsnamn fungerar även när WhatsApp tar bort den visuella @ i textkroppen:
- Regexarna är skiftlägesokänsliga; de täcker en ping med visningsnamn som
@openclawsamt det råa numret med eller utan+/mellanslag. - WhatsApp skickar fortfarande kanoniska omnämnanden via
mentionedJidsnär någon trycker på kontakten, så nummer‑reserv behövs sällan men är ett användbart säkerhetsnät.
Aktiveringskommando (endast ägare)
Använd gruppchattkommandot:/activation mention/activation always
channels.whatsapp.allowFrom, eller botens egna E.164 vid uppackning) kan ändra detta. Skicka /status som ett fristående meddelande i gruppen för att se aktuellt aktiveringsläge.
Hur man använder
- Lägg till ditt WhatsApp‑konto (det som kör OpenClaw) i gruppen.
- Säg
@openclaw …(eller inkludera nummer). Endast tillåtna avsändare kan utlösa det såvida du inte angergroupPolicy: "open". - Agentprompten kommer att inkludera nylig gruppkontext plus den avslutande
[from: …]‑markören så att den kan adressera rätt person. - Sessionsnivådirektiv (
/verbose on,/think high,/neweller/reset,/compact) gäller endast den gruppens session; skicka dem som fristående meddelanden så att de registrerar. Din personliga DM-session förblir oberoende.
Testning / verifiering
- Manuell smoke:
- Skicka en
@openclaw‑ping i gruppen och bekräfta ett svar som refererar till avsändarnamnet. - Skicka en andra ping och verifiera att historikblocket inkluderas och sedan rensas vid nästa tur.
- Skicka en
- Kontrollera gateway‑loggar (kör med
--verbose) för att seinbound web message‑poster som visarfrom: <groupJid>och suffixet[from: …].
Kända överväganden
- Heartbeats hoppas avsiktligt över för grupper för att undvika bullriga utskick.
- Eko‑undertryckning använder den kombinerade batchsträngen; om du skickar identisk text två gånger utan omnämnanden får bara den första ett svar.
- Poster i sessionslagret kommer att visas som
agent:<agentId>:whatsapp:group:<jid>i sessionslagret (~/.openclaw/agents/<agentId>/sessions/sessions.jsonsom standard); en saknad post betyder bara att gruppen inte har triggat en körning ännu. - Skrivindikatorer i grupper följer
agents.defaults.typingMode(standard:messagenär den inte är omnämnd).