> ## Documentation Index
> Fetch the complete documentation index at: https://openclaw.veiseule.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# समूह संदेश

# समूह संदेश (WhatsApp वेब चैनल)

लक्ष्य: Clawd को WhatsApp समूहों में बैठने देना, केवल पिंग होने पर ही सक्रिय करना, और उस थ्रेड को व्यक्तिगत DM सत्र से अलग रखना।

नोट: `agents.list[].groupChat.mentionPatterns` अब Telegram/Discord/Slack/iMessage द्वारा भी उपयोग किया जाता है; यह दस्तावेज़ WhatsApp-विशिष्ट व्यवहार पर केंद्रित है। मल्टी-एजेंट सेटअप के लिए, प्रति एजेंट `agents.list[].groupChat.mentionPatterns` सेट करें (या ग्लोबल फ़ॉलबैक के रूप में `messages.groupChat.mentionPatterns` का उपयोग करें)।

## क्या लागू किया गया है (2025-12-03)

* एक्टिवेशन मोड: `mention` (डिफ़ॉल्ट) या `always`। `mention` के लिए एक पिंग आवश्यक है (वास्तविक WhatsApp @-mentions `mentionedJids` के माध्यम से, regex पैटर्न, या टेक्स्ट में कहीं भी बॉट का E.164)। `always` हर संदेश पर एजेंट को जगाता है, लेकिन उसे केवल तब ही उत्तर देना चाहिए जब वह सार्थक मूल्य जोड़ सके; अन्यथा यह साइलेंट टोकन `NO_REPLY` लौटाता है। डिफ़ॉल्ट्स को config (`channels.whatsapp.groups`) में सेट किया जा सकता है और `/activation` के माध्यम से प्रति समूह ओवरराइड किया जा सकता है। जब `channels.whatsapp.groups` सेट होता है, तो यह एक समूह allowlist के रूप में भी कार्य करता है (सभी को अनुमति देने के लिए `"*"` शामिल करें)।
* Group policy: `channels.whatsapp.groupPolicy` controls whether group messages are accepted (`open|disabled|allowlist`). `allowlist` में `channels.whatsapp.groupAllowFrom` का उपयोग होता है (फ़ॉलबैक: स्पष्ट `channels.whatsapp.allowFrom`)। डिफ़ॉल्ट `allowlist` है (जब तक आप प्रेषकों को न जोड़ें, तब तक ब्लॉक रहता है)।
* प्रति-समूह सेशंस: सेशन कीज़ इस तरह दिखती हैं `agent:<agentId>:whatsapp:group:<jid>` इसलिए `/verbose on` या `/think high` जैसे कमांड (स्टैंडअलोन संदेश के रूप में भेजे गए) उसी समूह तक सीमित रहते हैं; व्यक्तिगत DM स्टेट अप्रभावित रहता है। समूह थ्रेड्स के लिए हार्टबीट्स छोड़े जाते हैं।
* कॉन्टेक्स्ट इंजेक्शन: **pending-only** समूह संदेश (डिफ़ॉल्ट 50) जिन्होंने रन ट्रिगर नहीं किया, उन्हें `[Chat messages since your last reply - for context]` के अंतर्गत प्रीफ़िक्स किया जाता है, और ट्रिगर करने वाली पंक्ति `[Current message - respond to this]` के अंतर्गत होती है। जो संदेश पहले से सेशन में हैं, उन्हें दोबारा इंजेक्ट नहीं किया जाता।
* प्रेषक सरफेसिंग: हर समूह बैच अब `[from: Sender Name (+E164)]` के साथ समाप्त होता है ताकि Pi जान सके कि कौन बोल रहा है।
* अस्थायी/व्यू-वनस: टेक्स्ट/मेंशन्स निकालने से पहले हम इन्हें अनरैप करते हैं, ताकि इनके अंदर के पिंग्स भी ट्रिगर करें।
* समूह सिस्टम प्रॉम्प्ट: समूह सेशन के पहले टर्न पर (और जब भी `/activation` मोड बदलता है) हम सिस्टम प्रॉम्प्ट में एक छोटा ब्लर्ब इंजेक्ट करते हैं जैसे `You are replying inside the WhatsApp group "<subject>".` समूह सदस्य: Alice (+44...), Bob (+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.

## विन्यास उदाहरण (WhatsApp)

`~/.openclaw/openclaw.json` में एक `groupChat` ब्लॉक जोड़ें ताकि डिस्प्ले-नाम पिंग्स काम करें, भले ही WhatsApp टेक्स्ट बॉडी में दृश्य `@` हटा दे:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    whatsapp: {
      groups: {
        "*": { requireMention: true },
      },
    },
  },
  agents: {
    list: [
      {
        id: "main",
        groupChat: {
          historyLimit: 50,
          mentionPatterns: ["@?openclaw", "\\+?15555550123"],
        },
      },
    ],
  },
}
```

टिप्पणियाँ:

* regex केस-इन्सेंसिटिव हैं; वे `@openclaw` जैसे डिस्प्ले-नाम पिंग और `+`/स्पेसेज़ के साथ या बिना कच्चे नंबर को कवर करते हैं।
* जब कोई संपर्क टैप करता है, तब WhatsApp अभी भी `mentionedJids` के माध्यम से कैनॉनिकल मेंशन्स भेजता है, इसलिए नंबर फ़ॉलबैक शायद ही कभी आवश्यक होता है, लेकिन यह एक उपयोगी सेफ़्टी नेट है।

### सक्रियण कमांड (केवल-ओनर)

समूह चैट कमांड का उपयोग करें:

* `/activation mention`
* `/activation always`

केवल ओनर नंबर (`channels.whatsapp.allowFrom` से, या अनसेट होने पर बॉट का अपना E.164) ही इसे बदल सकता है। Send `/status` as a standalone message in the group to see the current activation mode.

## उपयोग कैसे करें

1. अपने WhatsApp खाते (जो OpenClaw चला रहा है) को समूह में जोड़ें।
2. `@openclaw …` कहें (या नंबर शामिल करें)। जब तक आप `groupPolicy: "open"` सेट नहीं करते, केवल allowlist किए गए प्रेषक ही इसे ट्रिगर कर सकते हैं।
3. एजेंट प्रॉम्प्ट में हालिया समूह संदर्भ के साथ ट्रेलिंग `[from: …]` मार्कर शामिल होगा ताकि वह सही व्यक्ति को संबोधित कर सके।
4. सेशन-स्तरीय निर्देश (`/verbose on`, `/think high`, `/new` या `/reset`, `/compact`) केवल उसी समूह के सेशन पर लागू होते हैं; उन्हें स्टैंडअलोन संदेशों के रूप में भेजें ताकि वे रजिस्टर हों। आपका व्यक्तिगत DM सेशन स्वतंत्र रहता है।

## परीक्षण / सत्यापन

* मैनुअल स्मोक:
  * समूह में एक `@openclaw` पिंग भेजें और प्रेषक नाम का संदर्भ देने वाला उत्तर पुष्टि करें।
  * दूसरा पिंग भेजें और सत्यापित करें कि इतिहास ब्लॉक शामिल होता है, फिर अगले टर्न पर साफ़ हो जाता है।
* Gateway लॉग्स जाँचें (`--verbose` के साथ चलाएँ) ताकि `from: <groupJid>` और `[from: …]` सफ़िक्स दिखाने वाली `inbound web message` प्रविष्टियाँ देख सकें।

## ज्ञात विचार

* शोरयुक्त प्रसारण से बचने के लिए समूहों के लिए हार्टबीट्स जानबूझकर छोड़े जाते हैं।
* इको सप्रेशन संयुक्त बैच स्ट्रिंग का उपयोग करता है; यदि आप बिना मेंशन्स के समान टेक्स्ट दो बार भेजते हैं, तो केवल पहले को उत्तर मिलेगा।
* सत्र स्टोर प्रविष्टियाँ सत्र स्टोर में `agent:<agentId>:whatsapp:group:<jid>` के रूप में दिखाई देंगी (डिफ़ॉल्ट रूप से `~/.openclaw/agents/<agentId>/sessions/sessions.json`); किसी प्रविष्टि का न होना केवल यह दर्शाता है कि समूह ने अभी तक रन ट्रिगर नहीं किया है।
* समूहों में टाइपिंग संकेतक `agents.defaults.typingMode` का अनुसरण करते हैं (डिफ़ॉल्ट: बिना मेंशन के `message`)।
