Mainstream messaging
فعالیتهای Discord
فعالیتهای Discord به عامل اجازه میدهند یک ویجت HTML تعاملی و مستقل را در کانال فعلی Discord ارسال کند. پیام شامل دکمه Open widget است؛ با کلیک روی آن، ویجت درون Discord اجرا میشود.
این قابلیت بهطور پیشفرض غیرفعال است. OpenClaw مسیرهای HTTP فعالیت، ابزار عامل show_widget و کنترلکننده دکمه اجرا را فقط زمانی ثبت میکند که channels.discord.activities وجود داشته باشد و یک رمز محرمانه کلاینت قابل بازیابی باشد. نام مستعار منسوخشده discord_widget برای یک نسخه دیگر در دسترس میماند.
پیشنیازها
- یک ربات Discord برای OpenClaw موجود
- یک نام میزبان عمومی HTTPS که به Gateway در OpenClaw دسترسی داشته باشد
- مجوز پیکربندی Activities و OAuth2 برای برنامه Discord ربات
هر پراکسی معکوس یا تونل HTTPS قابل استفاده است. یک Cloudflare Tunnel نامگذاریشده، بدون افشای مستقیم درگاه Gateway، نام میزبانی پایدار فراهم میکند.
# ~/.cloudflared/config.ymltunnel: openclaw-discordcredentials-file: /home/you/.cloudflared/TUNNEL-ID.jsoningress: - hostname: openclaw.example.com service: http://127.0.0.1:18789 - service: http_status:404cloudflared tunnel logincloudflared tunnel create openclaw-discordcloudflared tunnel route dns openclaw-discord openclaw.example.comcloudflared tunnel run openclaw-discordاحراز هویت معمول Gateway را فعال نگه دارید. فقط پیشوند Activity عمومی است و خود Plugin اعتبار OAuth، عضویت در نمونه Activity، اتصال به کانال، نشستها و قابلیتهای یکبارمصرف سند را اعتبارسنجی میکند.
راهاندازی
Gateway را از طریق HTTPS در دسترس قرار دهید
تونل یا پراکسی معکوس خود را راهاندازی کنید و پس از افزودن پیکربندی Activities، بررسی کنید که https://openclaw.example.com/discord/activity/ به Gateway دسترسی دارد. نام میزبان نمونه را با نام میزبان خود جایگزین کنید.
Activities را در Discord فعال کنید
برنامه موجود ربات را در پرتال توسعهدهندگان Discord باز کنید. بخش Activities را باز کنید، Activities را فعال کنید و یک نگاشت URL بسازید:
- پیشوند:
ROOT(/) - مقصد:
openclaw.example.com/discord/activity
مقصد، نام میزبان عمومی بهاضافه /discord/activity و بدون ممیز انتهایی است.
رمز محرمانه کلاینت OAuth2 را کپی کنید
بخش OAuth2 را در پرتال توسعهدهندگان باز کنید. Discord دستکم به یک URI تغییرمسیر نیاز دارد؛ بنابراین اگر برنامه هنوز هیچکدام را ندارد، یک جاینگهدار محلی مانند نشانی loopback اضافه کنید؛ Embedded App SDK جریان بازگشت Activity را مدیریت میکند. رمز محرمانه کلاینت برنامه را کپی یا بازنشانی کنید. با آن مانند یک اعتبارنامه رفتار کنید: آن را در گفتوگو، گزارشها یا فایل پیکربندی ثبتشده در مخزن جایگذاری نکنید.
OpenClaw را پیکربندی کنید
یک بلوک به حساب Discord که باید ویجتها را ارائه دهد اضافه کنید:
{ channels: { discord: { token: "${DISCORD_BOT_TOKEN}", activities: { clientSecret: "${DISCORD_CLIENT_SECRET}", // اختیاری است. مقدار پیشفرض، شناسه برنامه ربات است که هنگام راهاندازی شناسایی میشود. applicationId: "YOUR_DISCORD_APPLICATION_ID", }, }, },}وقتی DISCORD_CLIENT_SECRET تنظیم شده است، میتوانید clientSecret را از بلوک حذف کنید. برای اعلام استفاده از این قابلیت، خود بلوک باید وجود داشته باشد.
تنظیمات معمول دسترسی Discord مستقل باقی میمانند. برای مثال، allowFrom همچنان تعیین میکند چه کسی میتواند به عامل پیام خصوصی بفرستد؛ این گزینه تعیین نمیکند چه کسی میتواند ویجتی را که قبلاً در یک کانال ارسال شده است باز کند.
راهاندازی مجدد و آزمایش
Gateway را مجدداً راهاندازی کنید. در یک گفتوگوی Discord، از عامل بخواهید یک ویجت تعاملی نمایش دهد. عامل show_widget را فراخوانی میکند؛ روی Open widget در پیام ارسالشده کلیک کنید.
مدل امنیتی
- پیش از بازگرداندن فراداده ویجت، OAuth کاربر Discord را شناسایی میکند.
- رابط برنامهنویسی Get Activity Instance در Discord باید تأیید کند که کاربر OAuth در نمونه فعلی Activity حضور دارد. کانال نمونه باید با کانالی که ویجت در آن ارسال شده است مطابقت داشته باشد.
- هر کسی که Discord اجازه ورودش به آن کانال را بدهد، میتواند ویجتهای آن را باز کند. برای محدودکردن مخاطبان، از مجوزهای کانال Discord استفاده کنید. فهرستهای مجاز فرمان و پیام خصوصی OpenClaw، دسترسی به محتوای ازپیشارسالشده کانال را اعطا یا لغو نمیکنند.
- نشستهای OAuth پس از 15 دقیقه منقضی میشوند. قابلیتهای سند ویجت پس از 60 ثانیه منقضی میشوند و فقط یکبار کار میکنند.
- ویجتها پس از هفت روز منقضی میشوند و حداکثر 64 ویجت برای هر نمونه Plugin مربوط به Discord نگه داشته میشود.
- HTML ویجت را عامل شما تولید میکند و باید محتوایی قابلاعتماد در نظر گرفته شود. اطلاعات محرمانهای را که نمیخواهید یک ویجت معیوب افشا کند در آن جاسازی نکنید.
- ویجت میتواند درون قاب تودرتوی خودش پیمایش کند. iframe مربوط به
sandbox="allow-scripts"پیمایش سطحبالا، پنجرههای بازشو و دسترسی هممبدأ را مسدود میکند و خطمشی امنیت محتوای آن، اتصالهای شبکه و منابع خارجی را مسدود میکند. این کنترلها دفاع چندلایه هستند، نه یک مرز امنیتی در برابر عاملی که ویجت را تولید کرده است. - وقتی Activities غیرفعال باشد،
/discord/activityبههیچوجه ثبت نمیشود.
پوسته عمومی Activity و مسیر تبادل توکن، هنگام فعالسازی از طریق تونل شما قابلدسترسی میشوند. آنها بدون یک نشست معتبر OAuth و قابلیت یکبارمصرف سند، HTML ویجت را افشا نمیکنند.
عیبیابی
Activity پیام «Gateway offline» را نمایش میدهد
- تأیید کنید تونل در حال اجرا است و درخواستها را به درگاه واقعی اتصال Gateway هدایت میکند
- تأیید کنید مقصد پرتال توسعهدهندگان شامل
/discord/activityاست - پس از تغییر پیکربندی Discord یا OpenClaw، Gateway را مجدداً راهاندازی کنید
- گزارشهای Gateway را برای هشدار تکخطی مربوط به نبود رمز محرمانه کلاینت Activities بررسی کنید
Discord یک صفحه خالی باز میکند یا blocked:csp را گزارش میدهد
- بررسی کنید نگاشت URL از
ROOTاستفاده میکند و بخش دوم/discord/activityرا اضافه نمیکند - تأیید کنید پوسته،
shell.jsو ماژول SDK همگی از طریق پراکسی Discord بازگردانده میشوند - گزارشهای Gateway را برای درخواستهای زیر
/discord/activity/بررسی کنید
درخواستهای شبکه ویجت عمداً مسدود شدهاند. تمام CSS، JavaScript، تصاویر و دادههای موردنیاز ویجت را بهصورت درونخطی درج کنید.
«Widget unavailable»
دکمه را از کانالی اجرا کنید که عامل آن را در آنجا ارسال کرده است. OpenClaw هنگام کلیک، اجراها را در سمت سرور ردیابی میکند؛ بنابراین حتی وقتی Discord شناسه سفارشی دکمه را حذف یا مخدوش میکند، یک سابقه اجرای تازه میتواند ویجت دقیق را شناسایی کند. وقتی نه شناسه سفارشی و نه سابقه اجرا قابلشناسایی نباشد، OpenClaw آخرین ویجت فعال ارسالشده در آن کانال را باز میکند. ویجتهای قدیمیتر همچنان از طریق دکمههایی که شناسه سفارشی خود را حفظ کردهاند قابلدسترسی هستند.
«You cannot launch Activities in this channel»
Discord فعالیتها را از رشتههای پست انجمن اجرا نمیکند. OpenClaw میتواند پیام و دکمه ویجت را در آنجا ارسال کند، اما Activity را بهجای آن از یک کانال متنی معمولی اجرا کنید. این محدودیت از Discord ناشی میشود، نه OpenClaw.