3.6 KiB
3.6 KiB
summary, read_when
| summary | read_when | |
|---|---|---|
| Behavior and config for WhatsApp group message handling |
|
Group messages (web provider)
Goal: let Clawd sit in WhatsApp groups, wake up only when pinged, and keep that thread separate from the personal DM session.
What’s implemented (2025-12-03)
- Mentions required by default: real WhatsApp @-mentions (via
mentionedJids), regex patterns, or the bot’s E.164 anywhere in the text all count. - Group allowlist bypass: we still enforce
allowFromon the participant at inbox ingest, but group JIDs themselves no longer block replies. - Per-group sessions: session keys look like
group:<jid>so commands such as/verbose onor/think:highare scoped to that group; personal DM state is untouched. Heartbeats are skipped for group threads. - Context injection: last N (default 50) group messages are prefixed under
[Chat messages since your last reply - for context], with the triggering line under[Current message - respond to this]. - Sender surfacing: every group batch now ends with
[from: Sender Name (+E164)]so Tau/Pi know who is speaking. - Ephemeral/view-once: we unwrap those before extracting text/mentions, so pings inside them still trigger.
- New session primer: on the first turn of a group session we now prepend a short blurb to the model like
You are replying inside the WhatsApp group "<subject>". Group members: +44..., +43..., … Address the specific sender noted in the message context.If metadata isn’t available we still tell the agent it’s a group chat.
Config for Clawd UK (+447700900123)
Add a groupChat block to ~/.clawdis/clawdis.json so display-name pings work even when WhatsApp strips the visual @ in the text body:
{
"inbound": {
"groupChat": {
"requireMention": true,
"historyLimit": 50,
"mentionPatterns": [
"@?clawd",
"@?clawd\\s*uk",
"@?clawdbot",
"\\+?447700900123"
]
}
}
}
Notes:
- The regexes are case-insensitive; they cover
@clawd,@clawd uk,clawdbot, and the raw number with or without+/spaces. - WhatsApp still sends canonical mentions via
mentionedJidswhen someone taps the contact, so the number fallback is rarely needed but is a good safety net.
How to use
- Add Clawd UK (
+447700900123) to the group. - Say
@clawd …(or@clawd uk,@clawdbot, or include the number). Anyone in the group can trigger it. - The agent prompt will include recent group context plus the trailing
[from: …]marker so it can address the right person. - Session-level directives (
/verbose on,/think:high,/new) apply only to that group’s session; your personal DM session remains independent.
Testing / verification
- Automated:
pnpm test -- src/web/auto-reply.test.ts --runInBand(covers mention gating, history injection, sender suffix). - Manual smoke:
- Send an
@clawdping in the group and confirm a reply that references the sender name. - Send a second ping and verify the history block is included then cleared on the next turn.
- Check gateway logs (run with
--verbose) to seeinbound web message (batched)entries showingfrom: <groupJid>and the[from: …]suffix.
- Send an
Known considerations
- Heartbeats are intentionally skipped for groups to avoid noisy broadcasts.
- Echo suppression uses the combined batch string; if you send identical text twice without mentions, only the first will get a response.
- Session store entries will appear as
group:<jid>insessions.json; a missing entry just means the group hasn’t triggered a run yet.