show_widget एजेंट टूल और लॉन्च-बटन हैंडलर को केवल तभी पंजीकृत करता है, जब channels.discord.activities मौजूद हो और क्लाइंट सीक्रेट उपलब्ध हो। अप्रचलित discord_widget उपनाम एक रिलीज़ तक उपलब्ध रहेगा।
पूर्वापेक्षाएँ
- एक मौजूदा OpenClaw Discord बॉट
- एक सार्वजनिक HTTPS होस्टनाम, जो OpenClaw Gateway तक पहुँचता हो
- बॉट के Discord एप्लिकेशन के लिए Activities और OAuth2 कॉन्फ़िगर करने की अनुमति
सेटअप
1
Gateway को HTTPS पर उपलब्ध कराएँ
अपनी टनल या रिवर्स प्रॉक्सी शुरू करें और Activities कॉन्फ़िगरेशन जोड़ने के बाद सत्यापित करें कि
https://openclaw.example.com/discord/activity/ Gateway तक पहुँचता है। उदाहरण होस्टनाम को अपने होस्टनाम से बदलें।2
Discord में Activities सक्षम करें
मौजूदा बॉट एप्लिकेशन को Discord Developer Portal में खोलें। Activities खोलें, Activities सक्षम करें और एक URL मैपिंग बनाएँ:
- प्रीफ़िक्स:
ROOT(/) - लक्ष्य:
openclaw.example.com/discord/activity
/discord/activity का संयोजन है, जिसके अंत में स्लैश नहीं होना चाहिए।3
OAuth2 क्लाइंट सीक्रेट कॉपी करें
Developer Portal में OAuth2 खोलें। Discord को कम-से-कम एक रीडायरेक्ट URI चाहिए, इसलिए यदि एप्लिकेशन में अभी कोई नहीं है, तो लूपबैक पते जैसा कोई स्थानीय प्लेसहोल्डर जोड़ें; Embedded App SDK Activity की वापसी प्रक्रिया को संभालती है। एप्लिकेशन क्लाइंट सीक्रेट को कॉपी या रीसेट करें। इसे क्रेडेंशियल मानें: इसे चैट, लॉग या कमिट की गई कॉन्फ़िगरेशन फ़ाइल में पेस्ट न करें।
4
OpenClaw कॉन्फ़िगर करें
उस Discord खाते में एक ब्लॉक जोड़ें, जिसे विजेट उपलब्ध कराने चाहिए:जब
DISCORD_CLIENT_SECRET सेट हो, तब आप ब्लॉक से clientSecret हटा सकते हैं। सुविधा के लिए सहमति देने हेतु ब्लॉक स्वयं मौजूद रहना चाहिए।सामान्य Discord पहुँच सेटिंग अलग रहती हैं। उदाहरण के लिए, allowFrom अब भी नियंत्रित करता है कि एजेंट को कौन DM भेज सकता है; यह नियंत्रित नहीं करता कि चैनल में पहले से पोस्ट किया गया विजेट कौन खोल सकता है।5
पुनः आरंभ करें और परीक्षण करें
Gateway को पुनः आरंभ करें। किसी Discord वार्तालाप में एजेंट से एक इंटरैक्टिव विजेट दिखाने के लिए कहें। एजेंट
show_widget को कॉल करता है; पोस्ट किए गए संदेश पर Open widget क्लिक करें।सुरक्षा मॉडल
- विजेट मेटाडेटा लौटाए जाने से पहले OAuth Discord उपयोगकर्ता की पहचान करता है।
- Discord की Get Activity Instance API को पुष्टि करनी होगी कि OAuth उपयोगकर्ता वर्तमान Activity इंस्टेंस में मौजूद है। इंस्टेंस चैनल उस चैनल से मेल खाना चाहिए, जहाँ विजेट पोस्ट किया गया था।
- Discord जिस किसी को उस चैनल में प्रवेश की अनुमति देता है, वह उसके विजेट खोल सकता है। दर्शकों को सीमित करने के लिए Discord चैनल अनुमतियों का उपयोग करें। OpenClaw कमांड और DM अनुमतिसूचियाँ पहले से पोस्ट की गई चैनल सामग्री की पहुँच प्रदान या समाप्त नहीं करतीं।
- OAuth सत्र 15 मिनट बाद समाप्त हो जाते हैं। विजेट दस्तावेज़ क्षमताएँ 60 सेकंड बाद समाप्त हो जाती हैं और केवल एक बार काम करती हैं।
- विजेट सात दिन बाद समाप्त हो जाते हैं और प्रत्येक Discord Plugin इंस्टेंस में अधिकतम 64 विजेट रखे जाते हैं।
- विजेट HTML आपके एजेंट द्वारा बनाया जाता है और इसे विश्वसनीय सामग्री माना जाना चाहिए। ऐसे सीक्रेट एम्बेड न करें, जिन्हें आप किसी त्रुटिपूर्ण विजेट द्वारा उजागर होते नहीं देखना चाहेंगे।
- विजेट अपने नेस्टेड फ़्रेम के भीतर नेविगेट कर सकता है।
sandbox="allow-scripts"iframe शीर्ष-स्तरीय नेविगेशन, पॉपअप और समान-ओरिजिन पहुँच को अवरुद्ध करता है, जबकि उसकी Content Security Policy नेटवर्क कनेक्शन और बाहरी संसाधनों को अवरुद्ध करती है। ये नियंत्रण बहुस्तरीय सुरक्षा प्रदान करते हैं, लेकिन विजेट बनाने वाले एजेंट के विरुद्ध सुरक्षा सीमा नहीं हैं। - Activities अक्षम होने पर
/discord/activityबिल्कुल पंजीकृत नहीं होता।
समस्या निवारण
Activity में “Gateway offline” दिखाई देता है
- पुष्टि करें कि टनल चल रही है और Gateway के वास्तविक बाइंड पोर्ट पर रूट करती है
- पुष्टि करें कि Developer Portal के लक्ष्य में
/discord/activityशामिल है - Discord या OpenClaw कॉन्फ़िगरेशन बदलने के बाद Gateway को पुनः आरंभ करें
- Activities क्लाइंट सीक्रेट अनुपलब्ध होने से संबंधित एक-पंक्ति चेतावनी के लिए Gateway लॉग जाँचें
Discord एक खाली पृष्ठ खोलता है या blocked:csp की सूचना देता है
- सत्यापित करें कि URL मैपिंग
ROOTका उपयोग करती है और दूसरा/discord/activityखंड नहीं जोड़ती - पुष्टि करें कि शेल,
shell.jsऔर SDK मॉड्यूल सभी Discord प्रॉक्सी के माध्यम से लौटते हैं /discord/activity/के अंतर्गत अनुरोधों के लिए Gateway लॉग देखें