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 चाहिए, इसलिए यदि एप्लिकेशन में अभी कोई 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 लॉग की जाँच करें