मुख्य सामग्री पर जाएं

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

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

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

  • एक्टिवेशन मोड: mention (डिफ़ॉल्ट) या alwaysmention के लिए एक पिंग आवश्यक है (वास्तविक 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 टेक्स्ट बॉडी में दृश्य @ हटा दे:
{
  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)।