Skip to main content
स्थिति: WhatsApp Web (Baileys) के माध्यम से प्रोडक्शन के लिए तैयार। Gateway लिंक किए गए सत्रों का स्वामी है; कोई अलग Twilio WhatsApp चैनल नहीं है।

इंस्टॉल करें

openclaw onboard और openclaw channels add --channel whatsapp पहली बार इसे चुनने पर Plugin इंस्टॉल करने के लिए कहते हैं; यदि Plugin मौजूद नहीं है, तो openclaw channels login --channel whatsapp वही इंस्टॉल प्रवाह प्रदान करता है। डेवलपमेंट चेकआउट स्थानीय Plugin पथ का उपयोग करते हैं; स्थिर/बीटा इंस्टॉल पहले ClawHub से @openclaw/whatsapp इंस्टॉल करते हैं और विफल होने पर npm का उपयोग करते हैं। WhatsApp रनटाइम मुख्य OpenClaw npm पैकेज के बाहर वितरित होता है, इसलिए इसकी रनटाइम निर्भरताएँ बाहरी Plugin के साथ रहती हैं। मैन्युअल इंस्टॉल:
साधारण npm पैकेज (@openclaw/whatsapp) का उपयोग केवल रजिस्ट्री फ़ॉलबैक के लिए करें; पुनरुत्पाद्य इंस्टॉल के लिए ही सटीक संस्करण पिन करें।

पेयरिंग

अज्ञात प्रेषकों के लिए डिफ़ॉल्ट DM नीति पेयरिंग है।

चैनल समस्या निवारण

क्रॉस-चैनल निदान और सुधार कार्यविधियाँ।

Gateway कॉन्फ़िगरेशन

संपूर्ण चैनल कॉन्फ़िगरेशन पैटर्न और उदाहरण।

त्वरित सेटअप

1

पहुँच नीति कॉन्फ़िगर करें

2

WhatsApp लिंक करें (QR)

लॉगिन केवल QR के माध्यम से होता है। रिमोट या हेडलेस होस्ट पर लॉगिन शुरू करने से पहले लाइव QR को फ़ोन तक पहुँचाने का विश्वसनीय तरीका रखें; टर्मिनल में रेंडर किए गए QR, स्क्रीनशॉट या चैट अटैचमेंट पहुँचते-पहुँचते समाप्त हो सकते हैं।किसी विशिष्ट खाते के लिए:
लॉगिन से पहले किसी मौजूदा/कस्टम प्रमाणीकरण डायरेक्टरी को जोड़ने के लिए:
3

Gateway शुरू करें

4

पहले DM पहुँच अनुरोध को स्वीकृत करें (पेयरिंग मोड)

Settings → Channels → DM access requests खोलें, WhatsApp खाता खोजें, और प्रेषक को स्वीकृत करें। यदि आप CLI को प्राथमिकता देते हैं:
DM पहुँच अनुरोध 1 घंटे के बाद समाप्त हो जाते हैं; लंबित अनुरोधों की सीमा प्रति खाते 3 है। यह स्वीकृति खाते को लिंक करने के लिए उपयोग किए जाने वाले WhatsApp लॉगिन QR से अलग है।
एक अलग WhatsApp नंबर सुझाया जाता है (सेटअप और मेटाडेटा इसके लिए अनुकूलित हैं), लेकिन व्यक्तिगत नंबर/स्वयं-चैट सेटअप पूरी तरह समर्थित हैं।

डिप्लॉयमेंट पैटर्न

  • OpenClaw के लिए अलग WhatsApp पहचान
  • अधिक स्पष्ट DM अनुमति-सूचियाँ और रूटिंग सीमाएँ
  • स्वयं-चैट संबंधी भ्रम की कम संभावना
ऑनबोर्डिंग व्यक्तिगत नंबर मोड का समर्थन करती है और स्वयं-चैट के अनुकूल आधाररेखा लिखती है: dmPolicy: "allowlist", आपके अपने नंबर सहित allowFrom, selfChatMode: true। रनटाइम स्वयं-चैट सुरक्षा लिंक किए गए स्वयं के नंबर और allowFrom के आधार पर काम करती है।

रनटाइम मॉडल

  • Gateway WhatsApp सॉकेट और पुनः कनेक्ट लूप का स्वामी है।
  • एक वॉचडॉग दो संकेतों को स्वतंत्र रूप से ट्रैक करता है: मूल WhatsApp Web ट्रांसपोर्ट गतिविधि और एप्लिकेशन-संदेश गतिविधि। हाल में कोई संदेश न आने मात्र से किसी शांत लेकिन कनेक्टेड सत्र को पुनः शुरू नहीं किया जाता; यह केवल तभी बलपूर्वक पुनः कनेक्ट करता है, जब ट्रांसपोर्ट फ़्रेम एक निश्चित आंतरिक अवधि (उपयोगकर्ता द्वारा कॉन्फ़िगर करने योग्य नहीं) तक आना बंद कर दें या एप्लिकेशन संदेश सामान्य संदेश टाइमआउट के 4x से अधिक समय तक न आएँ। हाल में सक्रिय रहे सत्र के पुनः कनेक्ट होने के तुरंत बाद, पहली अवधि 4x अवधि के बजाय छोटे सामान्य संदेश टाइमआउट का उपयोग करती है। उस पुनः कनेक्ट के दौरान Baileys द्वारा पहले ही डिलीवर किए गए ऑफ़लाइन संदेशों का OpenClaw स्वतः उत्तर दे सकता है, जिसकी सीमा आने वाले संदेश-ID की डीडुप्लिकेशन अवधि से निर्धारित होती है; आरंभिक स्टार्टअप छोटे पुराने-इतिहास सुरक्षा उपाय को बनाए रखता है।
  • आउटबाउंड प्रेषण के लिए लक्ष्य खाते का सक्रिय WhatsApp लिसनर आवश्यक है; अन्यथा प्रेषण तुरंत विफल हो जाता है।
  • जब टोकन वर्तमान प्रतिभागी मेटाडेटा से मेल खाता है, तब समूह प्रेषण @+<digits> और @<digits> टोकन (टेक्स्ट और मीडिया कैप्शन में) के लिए नेटिव उल्लेख मेटाडेटा जोड़ते हैं; इसमें LID-समर्थित समूह भी शामिल हैं।
  • स्टेटस और ब्रॉडकास्ट चैट (@status, @broadcast) अनदेखी की जाती हैं।
  • प्रत्यक्ष चैट DM सत्र नियमों का उपयोग करती हैं (session.dmScope; डिफ़ॉल्ट main DM को एजेंट के मुख्य सत्र में समेट देता है)। समूह सत्र प्रत्येक JID के अनुसार अलग रखे जाते हैं (agent:<agentId>:whatsapp:group:<jid>)।
  • WhatsApp चैनल/न्यूज़लेटर अपने नेटिव @newsletter JID के माध्यम से स्पष्ट आउटबाउंड लक्ष्य हो सकते हैं, जो DM अर्थविज्ञान के बजाय चैनल सत्र मेटाडेटा (agent:<agentId>:whatsapp:channel:<jid>) का उपयोग करते हैं।
  • WhatsApp Web ट्रांसपोर्ट Gateway होस्ट पर मानक प्रॉक्सी एनवायरनमेंट वेरिएबल (HTTPS_PROXY, HTTP_PROXY, NO_PROXY, लोअरकेस रूपांतर) का पालन करता है। प्रति-चैनल सेटिंग के बजाय होस्ट-स्तरीय प्रॉक्सी कॉन्फ़िगरेशन को प्राथमिकता दें।

MeowCaller से वर्तमान अनुरोधकर्ता को कॉल करें (प्रायोगिक)

Plugin WhatsApp से आरंभ होने वाले एजेंट टर्न में whatsapp_call उपलब्ध करा सकता है। यह वर्तमान अधिकृत अनुरोधकर्ता को WhatsApp वॉइस कॉल करने और उनके उत्तर देने के बाद OpenClaw TTS संदेश चलाने के लिए MeowCaller का उपयोग करता है। टूल में गंतव्य नंबर का कोई पैरामीटर नहीं है, इसलिए कोई प्रॉम्प्ट कॉल को रीडायरेक्ट नहीं कर सकता। डिफ़ॉल्ट रूप से अक्षम है।
MeowCaller प्रायोगिक है, इसका कोई टैग किया गया रिलीज़ नहीं है, और यह अलग से पेयर किए गए whatsmeow लिंक्ड-डिवाइस सत्र का उपयोग करता है—यह Plugin के Baileys क्रेडेंशियल का पुनः उपयोग नहीं कर सकता। पेयरिंग उसी WhatsApp खाते में एक और लिंक्ड डिवाइस जोड़ती है; OpenClaw द्वारा उपयोग की जाने वाली पहचान से स्कैन करें। व्यक्तिगत नंबर/स्वयं-चैट मोड स्वयं को कॉल नहीं कर सकता; अपने व्यक्तिगत नंबर पर कॉल करने के लिए समर्पित OpenClaw नंबर का उपयोग करें।
1

प्रायोगिक कॉल सक्षम करें

WhatsApp चैनल कॉन्फ़िगरेशन में actions.calls: true जोड़ें और Gateway पुनः शुरू करें:
अनुपस्थित या false होने पर, OpenClaw whatsapp_call टूल उपलब्ध नहीं कराता।
2

समीक्षित MeowCaller CLI इंस्टॉल करें

अडैप्टर Gateway होस्ट के PATH पर meowcaller निष्पादनयोग्य फ़ाइल की अपेक्षा करता है। MeowCaller PR #7 के मर्ज होने तक समीक्षित ब्रांच बिल्ड करें:
सुनिश्चित करें कि $HOME/.local/bin, Gateway सेवा के PATH में है। इस संशोधन में स्पष्ट pair और केवल-प्रेषण notify कमांड हैं; notify कोई माइक्रोफ़ोन, स्पीकर, वीडियो डिवाइस या निदान कैप्चर नहीं खोलता। इसके स्थान पर अपस्ट्रीम उदाहरण CLI के play कमांड का उपयोग न करें।
3

MeowCaller लिंक्ड डिवाइस पेयर करें

WhatsApp एजेंट से कॉल सेटअप जाँचने के लिए कहें (whatsapp_call स्थिति क्रिया खाते-विशिष्ट स्टेट डायरेक्टरी और पेयरिंग कमांड की जानकारी देती है)। डिफ़ॉल्ट खाते के लिए:
इसे इंटरैक्टिव रूप से चलाएँ, WhatsApp > Linked devices से QR स्कैन करें और MeowCaller linked device ready की प्रतीक्षा करें। wa-voip.db को निजी रखें—यह MeowCaller सत्र है। गैर-डिफ़ॉल्ट खातों को स्थिति क्रिया से अपना स्टोर पथ मिलता है; Windows पर उसका PowerShell कमांड चलाएँ।
4

TTS कॉन्फ़िगर करें और WhatsApp से कॉल करें

टेलीफ़ोनी-सक्षम TTS प्रदाता कॉन्फ़िगर करें, Gateway पुनः शुरू करें, फिर Call me and say the build finished. जैसा अनुरोध भेजें। टूल विश्वसनीय इनबाउंड संदर्भ से प्रेषक निर्धारित करता है, अस्थायी निजी WAV फ़ाइल संश्लेषित करता है, सीमित कॉल अवधि के लिए MeowCaller चलाता है और बाद में ऑडियो फ़ाइल मिटा देता है। OpenClaw खाते का स्टोर स्पष्ट रूप से पास करता है, उत्तर/प्लेबैक/कॉल समाप्ति के बाद शून्य एग्ज़िट स्थिति की प्रतीक्षा करता है और टाइमआउट या गैर-शून्य एग्ज़िट को विफल टूल कॉल मानता है।
सीमाएँ: केवल एक-से-एक आउटबाउंड ऑडियो कॉल, कोई मनमाना गंतव्य नंबर नहीं, चैट कनेक्शन के साथ कोई साझा प्रमाणीकरण नहीं, व्यक्तिगत नंबर/स्वयं-चैट मोड से स्वयं को कॉल नहीं, संश्लेषित ऑडियो की सीमा 60 सेकंड, MeowCaller द्वारा उत्तर/प्लेबैक/कॉल समाप्ति पूर्ण होने के अतिरिक्त हैंडसेट पर सुनाई देने की कोई रसीद नहीं, और OpenClaw सीमित 115-175 सेकंड की अवधि के बाद सहयोगी प्रक्रिया रोक देता है (जिसमें MeowCaller के कनेक्शन, उत्तर, प्लेबैक और शटडाउन चरण शामिल हैं)।

स्वीकृति प्रॉम्प्ट

WhatsApp निष्पादन और Plugin स्वीकृति प्रॉम्प्ट को 👍/👎 प्रतिक्रियाओं के रूप में रेंडर कर सकता है, जिन्हें शीर्ष-स्तरीय स्वीकृति फ़ॉरवर्डिंग कॉन्फ़िगरेशन नियंत्रित करता है:
approvals.exec और approvals.plugin स्वतंत्र हैं; WhatsApp को चैनल के रूप में सक्षम करना केवल ट्रांसपोर्ट लिंक करता है और तब तक कुछ नहीं भेजता, जब तक मिलान करने वाला स्वीकृति परिवार सक्षम करके वहाँ रूट न किया गया हो। सत्र मोड केवल WhatsApp से उत्पन्न स्वीकृतियों के लिए नेटिव इमोजी स्वीकृतियाँ डिलीवर करता है। लक्ष्य मोड स्पष्ट लक्ष्यों के लिए साझा फ़ॉरवर्डिंग पाइपलाइन का उपयोग करता है और अलग स्वीकर्ता-DM फ़ैनआउट नहीं बनाता। WhatsApp स्वीकृति प्रतिक्रियाओं के लिए allowFrom (या "*") में स्पष्ट स्वीकर्ता आवश्यक हैं। defaultTo सामान्य डिफ़ॉल्ट संदेश लक्ष्य निर्धारित करता है, स्वीकर्ताओं की सूची नहीं। मैन्युअल /approve कमांड भी स्वीकृति समाधान से पहले सामान्य WhatsApp प्रेषक-प्राधिकरण पथ से गुजरते हैं।

प्रश्न प्रतिक्रियाएँ

एक गैर-गोपनीय, एकल-चयन प्रश्न और एक से चार विकल्पों वाले ask_user प्रॉम्प्ट के लिए, WhatsApp विकल्प लेबल के पास 1️⃣ से 4️⃣ तक दिखाता है। उत्तर देने के लिए डिलीवर किए गए प्रॉम्प्ट पर मेल खाने वाली संख्या से प्रतिक्रिया दें। OpenClaw Gateway के माध्यम से संख्या को मानक विकल्प से मैप करता है; पुराने या डुप्लिकेट टैप अनदेखे किए जाते हैं। बहु-प्रश्न, बहु-चयन और मुक्त-टेक्स्ट प्रॉम्प्ट केवल टेक्स्ट-उत्तर बने रहते हैं। सामान्य WhatsApp DM/समूह प्रवेश नियम प्रतिक्रिया देने वाले प्रेषक को अधिकृत करते हैं।

Plugin हुक और गोपनीयता

इनबाउंड WhatsApp संदेशों में व्यक्तिगत सामग्री, फ़ोन नंबर, समूह पहचानकर्ता, प्रेषक नाम और सत्र सहसंबंध फ़ील्ड हो सकते हैं। जब तक आप ऑप्ट इन नहीं करते, WhatsApp इनबाउंड message_received हुक पेलोड को Plugins में ब्रॉडकास्ट नहीं करता:
ऑप्ट-इन को channels.whatsapp.accounts.<id>.pluginHooks.messageReceived के अंतर्गत एक खाते तक सीमित करें। इसे केवल उन Plugins के लिए सक्षम करें, जिन पर आप इनबाउंड WhatsApp सामग्री और पहचानकर्ताओं के संबंध में भरोसा करते हैं।

पहुँच नियंत्रण और सक्रियण

channels.whatsapp.dmPolicy:allowFrom E.164-शैली की संख्याएँ स्वीकार करता है (आंतरिक रूप से सामान्यीकृत)। यह केवल DM प्रेषक की पहुँच-नियंत्रण सूची है — यह समूह JID या @newsletter चैनल JID को स्पष्ट आउटबाउंड प्रेषण सीमित नहीं करता।बहु-अकाउंट ओवरराइड: channels.whatsapp.accounts.<id>.dmPolicy (और .allowFrom) उस अकाउंट के लिए चैनल-स्तरीय डिफ़ॉल्ट पर प्राथमिकता रखते हैं।रनटाइम संबंधी टिप्पणियाँ:
  • पेयरिंग चैनल अनुमति-स्टोर में बनी रहती हैं और कॉन्फ़िगर किए गए allowFrom के साथ मर्ज होती हैं
  • निर्धारित स्वचालन और Heartbeat प्राप्तकर्ता फ़ॉलबैक स्पष्ट डिलीवरी लक्ष्यों या कॉन्फ़िगर किए गए allowFrom का उपयोग करते हैं; DM पेयरिंग अनुमोदन स्वतः Cron/Heartbeat प्राप्तकर्ता नहीं होते
  • यदि कोई अनुमति-सूची कॉन्फ़िगर नहीं की गई है, तो लिंक किया गया स्वयं का नंबर डिफ़ॉल्ट रूप से अनुमत होता है
  • OpenClaw आउटबाउंड fromMe DM को कभी भी स्वतः पेयर नहीं करता (लिंक किए गए डिवाइस से स्वयं को भेजे गए संदेश)

कॉन्फ़िगर किए गए ACP बाइंडिंग

WhatsApp शीर्ष-स्तरीय bindings[] के माध्यम से स्थायी ACP बाइंडिंग का समर्थन करता है:
प्रत्यक्ष चैट E.164 संख्याओं से मेल खाती हैं; समूह WhatsApp समूह JID से मेल खाते हैं। OpenClaw द्वारा बाउंड ACP सत्र की मौजूदगी सुनिश्चित करने से पहले समूह अनुमति-सूचियाँ, प्रेषक नीति और उल्लेख/सक्रियण गेटिंग चलती हैं। मिलान किया गया बाइंडिंग रूट का स्वामी होता है — प्रसारण समूह उस टर्न को सामान्य WhatsApp सत्रों में वितरित नहीं करते।

व्यक्तिगत नंबर और स्वयं-चैट व्यवहार

जब लिंक किया गया स्वयं का नंबर allowFrom में भी मौजूद होता है, तो स्वयं-चैट सुरक्षा उपाय सक्रिय हो जाते हैं: स्वयं-चैट टर्न के लिए पठन रसीदें छोड़ना, स्वयं को पिंग करने वाले उल्लेख-JID स्वतः-ट्रिगर व्यवहार को अनदेखा करना, और चैनल/अकाउंट का responsePrefix सेट न होने पर उत्तरों को डिफ़ॉल्ट रूप से [{identity.name}] (या [openclaw]) पर भेजना।

संदेश सामान्यीकरण और संदर्भ

आने वाले संदेश साझा इनबाउंड एनवेलप में रैप किए जाते हैं। उद्धृत उत्तर इस रूप में संदर्भ जोड़ता है:
उपलब्ध होने पर उत्तर मेटाडेटा (ReplyToId, ReplyToBody, ReplyToSender, प्रेषक JID/E.164) भरा जाता है। यदि उद्धृत लक्ष्य डाउनलोड करने योग्य मीडिया है, तो OpenClaw उसे सामान्य इनबाउंड मीडिया स्टोर के माध्यम से सहेजता है और MediaPath/MediaType उपलब्ध कराता है, ताकि एजेंट केवल <media:image> देखने के बजाय सीधे उसका निरीक्षण कर सके।
केवल-मीडिया संदेश प्लेसहोल्डर में सामान्यीकृत होते हैं: <media:image>, <media:video>, <media:audio>, <media:document>, <media:sticker>जब मुख्य भाग केवल <media:audio> हो, तो अधिकृत समूह वॉइस नोट का उल्लेख गेटिंग से पहले प्रतिलेखन किया जाता है, ताकि वॉइस नोट में बॉट का उल्लेख बोलने पर उत्तर ट्रिगर हो सके। यदि प्रतिलेख में फिर भी बॉट का उल्लेख नहीं है, तो वह कच्चे प्लेसहोल्डर के बजाय लंबित समूह इतिहास में रहता है।स्थान के मुख्य भाग संक्षिप्त निर्देशांक पाठ के रूप में रेंडर होते हैं। स्थान लेबल/टिप्पणियाँ और संपर्क/vCard विवरण इनलाइन प्रॉम्प्ट पाठ के बजाय फ़ेंस किए गए अविश्वसनीय मेटाडेटा के रूप में रेंडर होते हैं।
असंसाधित समूह संदेश बफ़र होते हैं और अंततः बॉट ट्रिगर होने पर संदर्भ के रूप में इंजेक्ट किए जाते हैं।
  • डिफ़ॉल्ट सीमा: 50
  • कॉन्फ़िगरेशन: channels.whatsapp.historyLimit, फ़ॉलबैक messages.groupChat.historyLimit
  • 0 अक्षम करता है
इंजेक्शन मार्कर: [Chat messages since your last reply - for context] और [Current message - respond to this]
स्वीकृत इनबाउंड संदेशों के लिए डिफ़ॉल्ट रूप से सक्षम। वैश्विक रूप से अक्षम करें:
प्रति-अकाउंट ओवरराइड: channels.whatsapp.accounts.<id>.sendReadReceipts। वैश्विक रूप से सक्षम होने पर भी स्वयं-चैट टर्न पठन रसीदें छोड़ देते हैं।

डिलीवरी, खंडन और मीडिया

  • डिफ़ॉल्ट खंड सीमा: channels.whatsapp.textChunkLimit = 4000
  • channels.whatsapp.streaming.chunkMode = "length" | "newline"; newline अनुच्छेद सीमाओं (रिक्त पंक्तियों) को प्राथमिकता देता है, फिर लंबाई-सुरक्षित खंडन पर फ़ॉलबैक करता है
  • चित्र, वीडियो, ऑडियो (PTT वॉइस-नोट) और दस्तावेज़ पेलोड का समर्थन करता है
  • ऑडियो को ptt: true के साथ Baileys audio पेलोड के रूप में भेजा जाता है और वह पुश-टू-टॉक वॉइस नोट के रूप में रेंडर होता है; उत्तर पेलोड पर audioAsVoice संरक्षित रहता है, ताकि प्रदाता के स्रोत प्रारूप की परवाह किए बिना TTS वॉइस-नोट आउटपुट इसी पथ पर बना रहे
  • नेटिव Ogg/Opus ऑडियो audio/ogg; codecs=opus के रूप में भेजा जाता है; अन्य सभी प्रारूपों (Microsoft Edge TTS MP3/WebM आउटपुट सहित) को PTT डिलीवरी से पहले ffmpeg द्वारा 48 kHz मोनो Ogg/Opus में ट्रांसकोड किया जाता है
  • /tts latest नवीनतम सहायक उत्तर को एक वॉइस नोट के रूप में भेजता है और उसी उत्तर को दोबारा भेजने से रोकता है; /tts chat on|off|default वर्तमान चैट के लिए स्वतः-TTS नियंत्रित करता है
  • वीडियो पर gifPlayback: true भेजने से एनिमेटेड GIF प्लेबैक सक्षम होता है
  • forceDocument/asDocument आउटबाउंड चित्रों, GIF और वीडियो को WhatsApp के मीडिया संपीड़न से बचाने के लिए Baileys दस्तावेज़ पेलोड के माध्यम से रूट करता है, जिससे निर्धारित फ़ाइलनाम और MIME प्रकार संरक्षित रहते हैं
  • बहु-मीडिया उत्तर में कैप्शन पहले मीडिया आइटम पर लागू होते हैं, PTT वॉइस नोट को छोड़कर: ऑडियो पहले बिना कैप्शन के भेजा जाता है, फिर कैप्शन अलग पाठ संदेश के रूप में भेजा जाता है (WhatsApp क्लाइंट वॉइस-नोट कैप्शन को सुसंगत रूप से रेंडर नहीं करते)
  • मीडिया स्रोत HTTP(S), file://, या स्थानीय पथ हो सकता है
  • इनबाउंड सहेजने की सीमा और आउटबाउंड भेजने की सीमा: channels.whatsapp.mediaMaxMb (डिफ़ॉल्ट 50)
  • प्रति-अकाउंट ओवरराइड: channels.whatsapp.accounts.<id>.mediaMaxMb
  • चित्र सीमाओं में फ़िट होने के लिए स्वतः अनुकूलित होते हैं (आकार बदलना/गुणवत्ता स्वीप), जब तक forceDocument/asDocument दस्तावेज़ डिलीवरी का अनुरोध न करे
  • मीडिया भेजना विफल होने पर, पहले आइटम का फ़ॉलबैक उत्तर को चुपचाप छोड़ने के बजाय पाठ चेतावनी भेजता है

उत्तर उद्धरण

channels.whatsapp.replyToMode नेटिव उत्तर उद्धरण नियंत्रित करता है (आउटबाउंड उत्तर इनबाउंड संदेश को दृश्यमान रूप से उद्धृत करते हैं): प्रति-अकाउंट ओवरराइड: channels.whatsapp.accounts.<id>.replyToMode

प्रतिक्रिया स्तर

channels.whatsapp.reactionLevel नियंत्रित करता है कि एजेंट इमोजी प्रतिक्रियाओं का कितने व्यापक रूप से उपयोग करता है: प्रति-अकाउंट ओवरराइड: channels.whatsapp.accounts.<id>.reactionLevel

पावती प्रतिक्रियाएँ

channels.whatsapp.ackReaction इनबाउंड प्राप्ति पर तत्काल प्रतिक्रिया भेजता है, जिसे reactionLevel द्वारा नियंत्रित किया जाता है ("off" होने पर दबा दिया जाता है):
टिप्पणियाँ: इनबाउंड स्वीकार किए जाने के तुरंत बाद (उत्तर से पहले) भेजी जाती है; यदि ackReaction, emoji के बिना मौजूद है, तो WhatsApp रूट किए गए एजेंट की पहचान इमोजी का उपयोग करता है और अनुपलब्ध होने पर ”👀” का उपयोग करता है (पावती न भेजने के लिए ackReaction छोड़ें या emoji: "" सेट करें); विफलताएँ लॉग की जाती हैं लेकिन उत्तर डिलीवरी को अवरुद्ध नहीं करतीं; समूह मोड mentions केवल उल्लेख से ट्रिगर हुए टर्न पर प्रतिक्रिया करता है, जबकि समूह सक्रियण always उस जाँच को बायपास करता है; WhatsApp केवल channels.whatsapp.ackReaction का उपयोग करता है (पुराना messages.ackReaction यहाँ लागू नहीं होता)।

जीवनचक्र स्थिति प्रतिक्रियाएँ

messages.statusReactions.enabled: true सेट करें, ताकि WhatsApp किसी टर्न के दौरान स्थिर प्राप्ति इमोजी छोड़ने के बजाय पावती प्रतिक्रिया को बदल सके और कतारबद्ध, चिंतन, टूल गतिविधि, Compaction, पूर्ण और त्रुटि जैसी स्थितियों के बीच क्रम से बदलता रहे:
टिप्पणियाँ: channels.whatsapp.ackReaction अब भी प्रत्यक्ष संदेशों और समूहों के लिए पात्रता नियंत्रित करता है; कतारबद्ध स्थिति सामान्य पावती प्रतिक्रियाओं वाले प्रभावी इमोजी का उपयोग करती है; WhatsApp में प्रति संदेश एक बॉट प्रतिक्रिया स्लॉट होता है, इसलिए जीवनचक्र अपडेट वर्तमान प्रतिक्रिया को उसी स्थान पर बदलते हैं और अंतिम पूर्ण/त्रुटि स्थिति के बाद पावती बहाल करते हैं।

बहु-अकाउंट और क्रेडेंशियल्स

खाता आईडी channels.whatsapp.accounts से आती हैं। यदि default मौजूद हो, तो वही डिफ़ॉल्ट खाता चुना जाता है; अन्यथा वर्णानुक्रम में क्रमबद्ध पहली कॉन्फ़िगर की गई खाता आईडी चुनी जाती है। लुकअप के लिए खाता आईडी को आंतरिक रूप से सामान्यीकृत किया जाता है।
  • वर्तमान प्रमाणीकरण पथ: ~/.openclaw/credentials/whatsapp/<accountId>/creds.json (बैकअप: creds.json.bak)
  • ~/.openclaw/credentials/ में लेगेसी डिफ़ॉल्ट प्रमाणीकरण को डिफ़ॉल्ट-खाता प्रवाहों के लिए अब भी पहचाना/माइग्रेट किया जाता है
openclaw channels logout --channel whatsapp [--account <id>] उस खाते की WhatsApp प्रमाणीकरण स्थिति साफ़ करता है। Gateway उपलब्ध होने पर, लॉगआउट पहले उस खाते के लाइव लिसनर को रोकता है, ताकि लिंक किया गया सत्र अगले पुनरारंभ से पहले ही संदेश प्राप्त करना बंद कर दे। openclaw channels remove --channel whatsapp खाता कॉन्फ़िगरेशन अक्षम करने या हटाने से पहले लाइव लिसनर को भी रोकता है।लेगेसी प्रमाणीकरण डायरेक्टरियों में, Baileys प्रमाणीकरण फ़ाइलें हटाते समय oauth.json को सुरक्षित रखा जाता है।

टूल, कार्रवाइयाँ और कॉन्फ़िगरेशन लेखन

  • एजेंट टूल समर्थन में WhatsApp प्रतिक्रिया कार्रवाई (react) शामिल है।
  • कार्रवाई गेट: channels.whatsapp.actions.reactions, channels.whatsapp.actions.polls (मौजूदा कार्रवाइयों का डिफ़ॉल्ट true है), channels.whatsapp.actions.calls (डिफ़ॉल्ट false, ऊपर MeowCaller देखें)।
  • चैनल द्वारा आरंभ किए गए कॉन्फ़िगरेशन लेखन डिफ़ॉल्ट रूप से सक्षम हैं; channels.whatsapp.configWrites: false के माध्यम से अक्षम करें।

समस्या निवारण

लक्षण: चैनल स्थिति लिंक न होने की सूचना देती है।
लक्षण: लिंक किए गए खाते में बार-बार कनेक्शन टूटना या पुनः कनेक्ट करने के प्रयास होना।निष्क्रिय खाते सामान्य संदेश टाइमआउट के बाद भी जुड़े रह सकते हैं; वॉचडॉग केवल तभी पुनरारंभ करता है जब WhatsApp Web ट्रांसपोर्ट गतिविधि रुक जाती है, सॉकेट बंद हो जाता है, या एप्लिकेशन-स्तरीय गतिविधि लंबी सुरक्षा अवधि के बाद भी निष्क्रिय रहती है (ऊपर रनटाइम मॉडल देखें)।समाधान:
होस्ट कनेक्टिविटी और समय-संबंधी समस्याएँ ठीक होने के बाद भी लूप बना रहे, तो खाते की प्रमाणीकरण डायरेक्टरी का बैकअप लें और फिर से लिंक करें:
यदि ~/.openclaw/logs/whatsapp-health.log, Gateway inactive बताता है, लेकिन openclaw gateway status और openclaw channels status --probe दोनों स्वस्थ दिखते हैं, तो openclaw doctor चलाएँ। Linux पर, doctor हटाई जा चुकी ~/.openclaw/bin/ensure-whatsapp.sh स्क्रिप्ट को चलाने वाली लेगेसी crontab प्रविष्टियों के बारे में चेतावनी देता है; उन प्रविष्टियों को crontab -e से हटाएँ — cron में systemd यूज़र-बस परिवेश अनुपस्थित हो सकता है, जिससे वह पुरानी स्क्रिप्ट Gateway की स्थिति की गलत रिपोर्ट कर सकती है।
लक्षण: उपयोग योग्य QR दिखाने से पहले openclaw channels login --channel whatsapp, status=408 Request Time-out या TLS सॉकेट डिस्कनेक्शन के साथ विफल हो जाता है।WhatsApp Web लॉगिन Gateway होस्ट के मानक प्रॉक्सी परिवेश (HTTPS_PROXY, HTTP_PROXY, छोटे अक्षरों वाले प्रकार, NO_PROXY) का उपयोग करता है। सत्यापित करें कि Gateway प्रक्रिया को प्रॉक्सी परिवेश मिलता है और NO_PROXY, mmg.whatsapp.net से मेल नहीं खाता।
लक्षित खाते के लिए कोई सक्रिय Gateway लिसनर मौजूद न होने पर आउटबाउंड प्रेषण तुरंत विफल हो जाते हैं। पुष्टि करें कि Gateway चल रहा है और खाता लिंक किया गया है।
ट्रांसक्रिप्ट पंक्तियाँ एजेंट द्वारा जनरेट की गई सामग्री दर्ज करती हैं; WhatsApp डिलीवरी की जाँच अलग से की जाती है। OpenClaw किसी स्वचालित उत्तर को भेजा हुआ तभी मानता है, जब Baileys कम-से-कम एक दृश्यमान टेक्स्ट या मीडिया प्रेषण के लिए आउटबाउंड संदेश आईडी लौटाता है।पावती प्रतिक्रियाएँ उत्तर से पहले की स्वतंत्र प्राप्ति-सूचनाएँ हैं — सफल प्रतिक्रिया यह सिद्ध नहीं करती कि बाद का टेक्स्ट/मीडिया उत्तर स्वीकार कर लिया गया था। Gateway लॉग में auto-reply delivery failed या auto-reply was not accepted by WhatsApp provider की जाँच करें।
इस क्रम में जाँच करें: groupPolicy, groupAllowFrom/allowFrom, groups अनुमति-सूची प्रविष्टियाँ, उल्लेख गेटिंग (requireMention + उल्लेख पैटर्न), और openclaw.json में डुप्लिकेट कुंजियाँ (JSON5 में बाद की प्रविष्टियाँ पहले वाली को ओवरराइड करती हैं — प्रत्येक स्कोप में केवल एक groupPolicy रखें)।यदि channels.whatsapp.groups मौजूद है, तो WhatsApp अब भी अन्य समूहों के संदेश देख सकता है, लेकिन OpenClaw उन्हें सत्र रूटिंग से पहले हटा देता है। समूह JID को channels.whatsapp.groups में जोड़ें, या प्रेषक प्राधिकरण को groupPolicy/groupAllowFrom के अधीन रखते हुए सभी समूहों को स्वीकार करने के लिए groups["*"] जोड़ें।
OpenClaw Gateway के लिए Node आवश्यक है। Bun, कैननिकल स्टेट स्टोर द्वारा उपयोग की जाने वाली node:sqlite API उपलब्ध नहीं कराता, और doctor लेगेसी Bun सेवाओं को Node पर माइग्रेट करता है।

सिस्टम प्रॉम्प्ट

WhatsApp, groups और direct मैप के माध्यम से समूहों और सीधे चैट के लिए Telegram-शैली के सिस्टम प्रॉम्प्ट का समर्थन करता है। समूह संदेशों के लिए समाधान: पहले प्रभावी groups मैप निर्धारित किया जाता है — यदि खाता अपनी groups कुंजी परिभाषित करता है, तो वह रूट groups मैप को पूरी तरह बदल देती है (कोई डीप मर्ज नहीं)। इसके बाद प्रॉम्प्ट लुकअप उसी एक परिणामी मैप पर चलता है:
  1. समूह-विशिष्ट प्रॉम्प्ट (groups["<groupId>"].systemPrompt): इसका उपयोग तब किया जाता है जब समूह प्रविष्टि मौजूद हो और उसकी systemPrompt कुंजी परिभाषित हो। रिक्त स्ट्रिंग ("") वाइल्डकार्ड को दबाती है और कोई प्रॉम्प्ट लागू नहीं करती।
  2. समूह वाइल्डकार्ड प्रॉम्प्ट (groups["*"].systemPrompt): इसका उपयोग तब किया जाता है जब विशिष्ट समूह प्रविष्टि अनुपस्थित हो, या वह systemPrompt कुंजी के बिना मौजूद हो।
सीधे संदेशों के लिए समाधान, direct मैप और direct["*"] पर समान पैटर्न का पालन करता है।
dms, हल्के प्रति-DM इतिहास ओवरराइड बकेट (dms.<id>.historyLimit) के रूप में बना रहता है। प्रॉम्प्ट ओवरराइड direct के अंतर्गत रहते हैं।
प्रॉम्प्ट समाधान के लिए खाते द्वारा रूट को बदलने का यह व्यवहार एक सामान्य शैलो ओवरराइड है: स्पष्ट रिक्त ऑब्जेक्ट सहित कोई भी खाता groups/direct कुंजी रूट मैप को बदल देती है। यह ऊपर वर्णित समूह-सदस्यता अनुमति-सूची जाँच से अलग है, जिसमें गलती से रिक्त groups: {} के लिए एकल-खाता सुरक्षा व्यवस्था है।
Telegram से अंतर: बहु-खाता सेटअप में Telegram प्रत्येक खाते के लिए रूट groups को दबाता है (उन खातों के लिए भी जिनका अपना कोई groups नहीं है), ताकि बॉट उन समूहों के संदेश प्राप्त न करे जिनका वह सदस्य नहीं है। WhatsApp यह सुरक्षा लागू नहीं करता — अपनी ओवरराइड के बिना कोई भी खाता, खातों की संख्या चाहे जो हो, रूट groups/direct को इनहेरिट करता है। बहु-खाता WhatsApp सेटअप में, यदि प्रति-खाता प्रॉम्प्ट चाहिए, तो प्रत्येक खाते के अंतर्गत पूरा मैप स्पष्ट रूप से परिभाषित करें। महत्वपूर्ण व्यवहार:
  • channels.whatsapp.groups प्रति-समूह कॉन्फ़िगरेशन मैप और चैट-स्तरीय समूह अनुमति-सूची, दोनों है। रूट या खाता स्कोप में, groups["*"] का अर्थ उस स्कोप के लिए “सभी समूह स्वीकार किए जाते हैं” है।
  • वाइल्डकार्ड systemPrompt केवल तभी जोड़ें, जब आप पहले से उस स्कोप में सभी समूह स्वीकार करना चाहते हों। केवल समूह आईडी के निश्चित समूह को पात्र रखने के लिए, groups["*"] का उपयोग करने के बजाय प्रत्येक स्पष्ट रूप से अनुमति-सूचीबद्ध प्रविष्टि पर प्रॉम्प्ट दोहराएँ।
  • समूह स्वीकृति और प्रेषक प्राधिकरण अलग-अलग जाँच हैं। groups["*"] उन समूहों का दायरा बढ़ाता है जो समूह प्रबंधन तक पहुँचते हैं; यह उन समूहों के प्रत्येक प्रेषक को अधिकृत नहीं करता — वह अब भी groupPolicy/groupAllowFrom द्वारा नियंत्रित होता है।
  • channels.whatsapp.direct का DM के लिए कोई समकक्ष दुष्प्रभाव नहीं है: direct["*"] केवल तभी डिफ़ॉल्ट कॉन्फ़िगरेशन देता है, जब DM को dmPolicy के साथ allowFrom या पेयरिंग-स्टोर नियमों द्वारा पहले ही स्वीकार किया जा चुका हो।
उदाहरण:

कॉन्फ़िगरेशन संदर्भ संकेतक

प्राथमिक संदर्भ: कॉन्फ़िगरेशन संदर्भ - WhatsApp

संबंधित