Groepsberichten (WhatsApp-webkanaal)
Doel: laat Clawd in WhatsApp-groepen zitten, alleen wakker worden wanneer gepingd, en die thread gescheiden houden van de persoonlijke DM-sessie.
Opmerking: agents.list[].groupChat.mentionPatterns wordt nu ook gebruikt door Telegram/Discord/Slack/iMessage; deze documentatie richt zich op WhatsApp-specifiek gedrag. Voor multi-agent-configuraties stel je agents.list[].groupChat.mentionPatterns per agent in (of gebruik messages.groupChat.mentionPatterns als globale terugval).
Wat is geïmplementeerd (2025-12-03)
- Activeringsmodi:
mention(standaard) ofalways.mentionvereist een ping (echte WhatsApp @-vermeldingen viamentionedJids, regex-patronen, of het E.164-nummer van de bot ergens in de tekst).alwayswekt de agent bij elk bericht, maar deze antwoordt alleen wanneer het echte waarde kan toevoegen; anders retourneert het het stille tokenNO_REPLY. Standaardwaarden kunnen in de config worden ingesteld (channels.whatsapp.groups) en per groep overschreven via/activation. Wanneerchannels.whatsapp.groupsis ingesteld, fungeert het ook als groeps-allowlist (voeg"*"toe om alle groepen toe te staan). - Groepsbeleid:
channels.whatsapp.groupPolicybepaalt of groepsberichten worden geaccepteerd (open|disabled|allowlist).allowlistgebruiktchannels.whatsapp.groupAllowFrom(terugval: explicietechannels.whatsapp.allowFrom). Standaard isallowlist(geblokkeerd totdat je afzenders toevoegt). - Per-groepssessies: sessiesleutels zien eruit als
agent:<agentId>:whatsapp:group:<jid>, dus commando’s zoals/verbose onof/think high(als losstaande berichten verzonden) zijn beperkt tot die groep; de persoonlijke DM-status blijft ongewijzigd. Heartbeats worden overgeslagen voor groepsthreads. - Contextinjectie: alleen wachtende groepsberichten (standaard 50) die geen run hebben getriggerd, worden voorafgegaan door
[Chat messages since your last reply - for context], met de triggerende regel onder[Current message - respond to this]. Berichten die al in de sessie staan, worden niet opnieuw geïnjecteerd. - Afzenderweergave: elke groepsbatch eindigt nu met
[from: Afzendernaam (+E164)]zodat Pi weet wie er spreekt. - Ephemeral/view-once: we pakken deze uit voordat tekst/vermeldingen worden geëxtraheerd, zodat pings erin nog steeds triggeren.
- Groepssysteemprompt: bij de eerste beurt van een groepssessie (en wanneer
/activationde modus wijzigt) injecteren we een korte tekst in de systeemprompt zoalsYou 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.Als metadata niet beschikbaar is, vertellen we de agent nog steeds dat het een groepschat is.
Configuratievoorbeeld (WhatsApp)
Voeg een groupChat-blok toe aan ~/.openclaw/openclaw.json zodat weergavenaam-pings werken, zelfs wanneer WhatsApp de visuele @ in de berichttekst verwijdert:
{
channels: {
whatsapp: {
groups: {
"*": { requireMention: true },
},
},
},
agents: {
list: [
{
id: "main",
groupChat: {
historyLimit: 50,
mentionPatterns: ["@?openclaw", "\\+?15555550123"],
},
},
],
},
}
Opmerkingen:
- De regexes zijn hoofdletterongevoelig; ze dekken een weergavenaam-ping zoals
@openclawen het kale nummer met of zonder+/spaties. - WhatsApp stuurt nog steeds canonieke vermeldingen via
mentionedJidswanneer iemand het contact aantikt, dus de nummerterugval is zelden nodig maar een handige veiligheidscontrole.
Activeringscommando (alleen eigenaar)
Gebruik het groepschat-commando:
/activation mention/activation always
Alleen het eigenaarnummer (uit channels.whatsapp.allowFrom, of het eigen E.164 van de bot wanneer niet ingesteld) kan dit wijzigen. Stuur /status als losstaand bericht in de groep om de huidige activeringsmodus te zien.
Hoe te gebruiken
- Voeg je WhatsApp-account (degene die OpenClaw draait) toe aan de groep.
- Zeg
@openclaw …(of vermeld het nummer). Alleen afzenders op de allowlist kunnen het triggeren, tenzij jegroupPolicy: "open"instelt. - De agentprompt bevat recente groepscontext plus de afsluitende
[from: …]-markering zodat het de juiste persoon kan aanspreken. - Sessie-niveau richtlijnen (
/verbose on,/think high,/newof/reset,/compact) gelden alleen voor de sessie van die groep; stuur ze als losstaande berichten zodat ze geregistreerd worden. Je persoonlijke DM-sessie blijft onafhankelijk.
Testen / verificatie
- Handmatige rooktest:
- Stuur een
@openclaw-ping in de groep en bevestig een antwoord dat naar de afzendernaam verwijst. - Stuur een tweede ping en controleer of het geschiedenisblok wordt opgenomen en vervolgens gewist bij de volgende beurt.
- Stuur een
- Controleer gateway-logs (draai met
--verbose) ominbound web message-vermeldingen te zien metfrom: <groupJid>en het[from: …]-achtervoegsel.
Bekende aandachtspunten
- Heartbeats worden opzettelijk overgeslagen voor groepen om lawaaierige broadcasts te voorkomen.
- Echonderdrukking gebruikt de gecombineerde batchtekst; als je identieke tekst twee keer stuurt zonder vermeldingen, krijgt alleen de eerste een antwoord.
- Sessieopslagvermeldingen verschijnen als
agent:<agentId>:whatsapp:group:<jid>in de sessieopslag (~/.openclaw/agents/<agentId>/sessions/sessions.jsonstandaard); een ontbrekende vermelding betekent simpelweg dat de groep nog geen run heeft getriggerd. - Typindicatoren in groepen volgen
agents.defaults.typingMode(standaard:messagewanneer niet vermeld).