Developer and self-hosted

کلیک‌کلاک

ClickClack با استفاده از توکن‌های ربات درجه‌یک ClickClack، ‏OpenClaw را به یک فضای کاری خودمیزبان ClickClack متصل می‌کند.

وقتی می‌خواهید یک عامل OpenClaw به‌صورت کاربر ربات ClickClack ظاهر شود، از این روش استفاده کنید. ClickClack از ربات‌های سرویس مستقل و ربات‌های متعلق به کاربر پشتیبانی می‌کند؛ ربات‌های متعلق به کاربر یک owner_user_id را حفظ می‌کنند و فقط دامنه‌های دسترسی توکنی را دریافت می‌کنند که اعطا می‌کنید.

راه‌اندازی سریع

در ClickClack، بخش Workspace settings → Integrations → OpenClaw را باز کنید، با استفاده از Setup code (recommended) یک ربات بسازید و فرمان تولیدشده را کپی کنید:

bash
openclaw channels add clickclack --code 'https://clickclack.example.com/#XXXX-XXXX-XXXX'

برای مبدأهای جداگانه رابط کاربری و API یا یک API نصب‌شده روی مسیر، ClickClack به‌جای آن یک نقطه پایانی دقیق برای دریافت منتشر می‌کند:

bash
openclaw channels add clickclack --code 'https://api.example.com/services/clickclack/api/bot-setup-codes/claim#XXXX-XXXX-XXXX'

کد راه‌اندازی یک‌بارمصرف است و پس از 10 دقیقه منقضی می‌شود. OpenClaw آن را دریافت می‌کند، توکن ربات تازه‌صادرشده و تنظیمات فضای کاری را می‌گیرد، حساب را ذخیره می‌کند، اتصال را تأیید می‌کند و گزارش می‌دهد که آیا Gateway در حال اجرا آن را شناسایی کرده است یا خیر. برای نقاط پایانی دقیق نسخه‌بندی‌شده، OpenClaw پایه API متعارف بازگردانده‌شده از ClickClack، شامل هر پیشوند مسیر، را اعتبارسنجی و ذخیره می‌کند. خود کد راه‌اندازی در پیکربندی OpenClaw ذخیره نمی‌شود.

درخواست‌های دریافت کد راه‌اندازی برای سرورهای عمومی از HTTPS استفاده می‌کنند. HTTP ساده نیز برای نصب‌های محلی روی نشانی‌های loopback مانند localhost و 127.0.0.1 پشتیبانی می‌شود.

اگر OpenClaw از قبل در حال اجرا باشد، ClickClack به‌طور خودکار متصل می‌شود و نیازی به فرمان دوم نیست. در غیر این صورت، آن را با فرمان زیر راه‌اندازی کنید:

bash
openclaw gateway

همچنین می‌توانید کد را جدا از URL سرور وارد کنید:

bash
openclaw channels add clickclack --code XXXX-XXXX-XXXX --base-url https://clickclack.example.com

برای راه‌اندازی هدایت‌شده، فرمان زیر را اجرا کنید:

bash
openclaw onboard

ClickClack را انتخاب کنید، سپس در زمان درخواست، URL سرور، توکن ربات و فضای کاری را وارد کنید. راه‌اندازی هدایت‌شده پس از ذخیره، سرور، توکن و فضای کاری را بررسی می‌کند؛ ناموفق‌بودن بررسی باعث حذف پیکربندی نمی‌شود.

روش جایگزین: توکن دستی

هنگام پیکربندی یک کلاینت غیر OpenClaw یا زمانی که صراحتاً لازم است توکن را خودتان مدیریت کنید، در ClickClack گزینه Manual token را انتخاب کنید:

bash
openclaw channels add clickclack --base-url https://clickclack.example.com --token ccb_... --workspace default

workspace شناسه فضای کاری (wsp_...)، نامک یا نام نمایشی را می‌پذیرد. --code را نمی‌توان با --token، --token-file یا --use-env ترکیب کرد.

روش جایگزین: توکن مبتنی بر متغیر محیطی

حساب پیش‌فرض می‌تواند به‌جای ذخیره توکن در پیکربندی، CLICKCLACK_BOT_TOKEN را بخواند:

bash
export CLICKCLACK_BOT_TOKEN="ccb_..."openclaw channels add clickclack --base-url https://clickclack.example.com --workspace default --use-envopenclaw gateway

حساب‌های نام‌گذاری‌شده باید از توکن پیکربندی‌شده یا فایل توکن استفاده کنند؛ متغیر محیطی مشترک عمداً به حساب پیش‌فرض محدود شده است.

مرجع JSON5

شکل معادل پیکربندی چنین است:

json5
{  channels: {    clickclack: {      enabled: true,      baseUrl: "https://clickclack.example.com",      token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" },      workspace: "default",      defaultTo: "channel:general",    },  },}

یک حساب فقط زمانی پیکربندی‌شده محسوب می‌شود که baseUrl، یک منبع توکن و workspace همگی تنظیم شده باشند. منبع توکن برای حساب پیش‌فرض می‌تواند token، tokenFile یا CLICKCLACK_BOT_TOKEN باشد. workspace شناسه فضای کاری (wsp_...)، نامک یا نام را می‌پذیرد؛ Gateway هنگام راه‌اندازی آن را به شناسه تبدیل می‌کند.

کلیدهای پیکربندی حساب

کلید پیش‌فرض توضیحات
baseUrl هیچ‌کدام (الزامی) URL عمومی ClickClack که برای پیوندهای قابل‌مشاهده در مرورگر استفاده می‌شود.
apiBaseUrl baseUrl نقطه پایانی اختیاری سروربه‌سرور برای ترافیک REST و WebSocket بلادرنگ.
token هیچ‌کدام توکن ربات به‌صورت رشته ساده یا ارجاع محرمانه (source: "env" | "file" | "exec").
tokenFile هیچ‌کدام مسیر فایل توکن ربات؛ بر token اولویت دارد.
workspace هیچ‌کدام (الزامی) شناسه، نامک یا نام فضای کاری.
replyMode "agent" "agent" پایپ‌لاین کامل عامل را اجرا می‌کند؛ "model" تکمیل‌های مستقیم و کوتاه مدل را ارسال می‌کند.
defaultTo "channel:general" مقصدی که وقتی یک مسیر خروجی هیچ مقصدی ارائه نمی‌دهد، استفاده می‌شود.
allowFrom ["*"] فهرست مجاز شناسه‌های کاربر برای پیام‌های مستقیم ورودی و پیام‌های کانال.
botUserId شناسایی خودکار هنگام راه‌اندازی از هویت توکن ربات استخراج می‌شود.
agentId پیش‌فرض مسیر پیام‌های ورودی این حساب را به یک عامل ثابت متصل می‌کند.
toolsAllow هیچ‌کدام فهرست مجاز ابزارها برای پاسخ‌های عامل از این حساب.
model، systemPrompt هیچ‌کدام برای تکمیل‌های replyMode: "model" استفاده می‌شوند.
commandMenu true فرمان‌های بومی را در تکمیل خودکار نوشتار ClickClack منتشر می‌کند.
reconnectMs 1500 تأخیر اتصال مجدد بلادرنگ (100 تا 60000).
discussions غیرفعال تنظیمات مدیریت‌شده کانال برای هر نشست؛ گفت‌وگوهای نشست را ببینید.

حفظ نام میزبان عمومی محافظت‌شده با احراز هویت

وقتی ClickClack و Gateway ‏OpenClaw روی یک میزبان اجرا می‌شوند اما نام میزبان عمومی ClickClack با یک Gateway احراز هویت مانند Cloudflare Access محافظت می‌شود، از apiBaseUrl استفاده کنید:

json5
{  channels: {    clickclack: {      baseUrl: "https://clack.openclaw.ai",      apiBaseUrl: "http://127.0.0.1:8484",      token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" },      workspace: "default",    },  },}

نام میزبان عمومی می‌تواند برای کاربران مرورگر کاملاً پشت احراز هویت باقی بماند. OpenClaw از نقطه پایانی loopback برای درخواست‌های REST، تأیید راه‌اندازی و WebSocket بلادرنگ استفاده می‌کند، درحالی‌که پیوندهای embedUrl و openUrl گفت‌وگو همچنان از baseUrl عمومی استفاده می‌کنند. اگر apiBaseUrl حذف شود، تمام ترافیک از baseUrl استفاده می‌کند و رفتار موجود حفظ می‌شود.

اگر plugins.allow یک فهرست محدودکننده و غیرخالی باشد، انتخاب صریح ClickClack در راه‌اندازی کانال یا اجرای openclaw plugins enable clickclack، مقدار clickclack را به آن فهرست اضافه می‌کند. نصب هنگام فرایند پذیرش اولیه نیز از همین رفتار انتخاب صریح استفاده می‌کند. این مسیرها plugins.deny یا تنظیم سراسری plugins.enabled: false را نادیده نمی‌گیرند. اجرای مستقیم openclaw plugins install @openclaw/clickclack از سیاست عادی نصب Plugin پیروی می‌کند و ClickClack را نیز در فهرست مجاز موجود ثبت می‌کند.

چند ربات

هر حساب اتصال بلادرنگ ClickClack مخصوص خود را باز می‌کند و از توکن ربات خودش استفاده می‌کند.

json5
{  channels: {    clickclack: {      enabled: true,      baseUrl: "https://clickclack.example.com",      defaultAccount: "service",      accounts: {        service: {          token: { source: "env", provider: "default", id: "CLICKCLACK_SERVICE_BOT_TOKEN" },          workspace: "default",          defaultTo: "channel:general",          agentId: "service-bot",        },        support: {          token: { source: "env", provider: "default", id: "CLICKCLACK_SUPPORT_BOT_TOKEN" },          workspace: "default",          defaultTo: "dm:usr_...",          agentId: "support-bot",        },      },    },  },}

گفت‌وگوهای نشست

گفت‌وگوها را در یک حساب ClickClack فعال کنید تا هر نشست OpenClaw یک کانال اختصاصی ClickClack داشته باشد. توکن حساب باید شامل channels:write باشد (بسته bot:admin آن را شامل می‌شود)؛ توکن راه‌اندازی عادی bot:write نمی‌تواند کانال‌ها را ایجاد یا همگام‌سازی کند.

json5
{  channels: {    clickclack: {      enabled: true,      baseUrl: "https://clickclack.example.com",      token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" },      workspace: "default",      discussions: {        enabled: true,        workspace: "default",        controlUrlBase: "https://team.openclaw.ai",        section: "Sessions",      },    },  },}

discussions.workspace همان شناسه فضای کاری، نامک یا نام نمایشی workspace در سطح حساب را می‌پذیرد و مقدار پیش‌فرض آن همان است. section بخش نوار کناری ClickClack را کنترل می‌کند و مقدار پیش‌فرض آن Sessions است. وقتی controlUrlBase تنظیم شود، کانال مدیریت‌شده به مسیر واقعی نشست در رابط کنترل، یعنی /chat?session=<encoded-session-key>، پیوند می‌دهد.

گفت‌وگوها را دقیقاً در یک حساب ClickClack فعال کنید. ارائه‌دهنده Gateway انتخابگر حساب ندارد؛ بنابراین چند حساب فعال گفت‌وگو رد می‌شوند و یکی بر اساس ترتیب پیکربندی انتخاب نمی‌شود.

بازکردن یک گفت‌وگو، یک کانال عمومی ClickClack ایجاد می‌کند که به‌عنوان مدیریت‌شده خارجی علامت‌گذاری شده است. Plugin برچسب نشست، دسته‌بندی و وضعیت بایگانی را همگام نگه می‌دارد. بازیابی یک نشست، کانال آن را بازیابی می‌کند؛ پاک‌کردن دسته‌بندی نشست، کانال را به بخش پیش‌فرض پیکربندی‌شده بازمی‌گرداند. حذف یک نشست OpenClaw به‌جای حذف کانال ClickClack، آن را بایگانی می‌کند تا تاریخچه آن همچنان در دسترس بماند. Plugin هنگام استفاده از RPCهای گفت‌وگو و تقریباً هر یک دقیقه تا زمانی که اتصالی وجود دارد، اتصال‌ها را تطبیق می‌دهد.

پیام‌های ورودی در یک کانال مدیریت‌شده از یک نشست جانبی قطعی تحت همان شناسه عامل نشست اصلی پیوست‌شده استفاده می‌کنند. به عامل جانبی گفته می‌شود کدام نشست اصلی را مشاهده کند و می‌تواند از sessions_history و session_status استفاده کند (changesSince برای بررسی‌های افزایشی مفید است). فقط زمانی از sessions_send استفاده می‌کند که افراد حاضر در گفت‌وگو از آن بخواهند پیام‌ها را به نشست اصلی منتقل یا آن را هدایت کند. اتصال، ارجاع مالکیت مدیریت‌شده و هویت همتای نشست جانبی، شناسه مشخص نشست OpenClaw را همراه با سرور و کانال ثابت‌شده ClickClack دربر می‌گیرند. بازنشانی یک کلید نشست قابل‌استفاده مجدد یا تغییر مقصد یک حساب، کانال قدیمی را به‌صورت محلی لغو می‌کند، درصورتی‌که اعتبارنامه قدیمی همچنان قابل‌استفاده باشد آن را بایگانی می‌کند و نمی‌تواند رونوشت جانبی آن را دوباره استفاده کند. پیام‌هایی که از طریق یک اتصال بایگانی‌شده، بازنشانی‌شده، غیرفعال یا تغییرمقصد‌یافته می‌رسند، به‌جای بازگشت به مسیریابی عادی کانال حساب حذف می‌شوند. اتصال‌های آزادشده یک نشانگر پایدار کانال لغوشده برجا می‌گذارند تا رویدادهای بلادرنگ تأخیردار همچنان در حالت بسته و امن باقی بمانند. مالکیت راه‌دور بر اساس سرور ClickClack و شناسه کانال کلیدگذاری می‌شود، بنابراین تغییر نام حساب محلی نمی‌تواند یک کانال مدیریت‌شده را به کانالی عادی تبدیل کند.

tools.sessions.visibility را روی مقدار پیش‌فرض امن‌تر آن، یعنی tree، نگه دارید. Plugin فقط بین هر نشست جانبی و نشست اصلی متصل به آن یک مجوز محدود به میزبان نصب می‌کند، به‌علاوه یک قلاب سیاست ابزار که کشف نشست و مقصدهای بین‌نشستی را مسدود می‌کند. این قلاب sessions_history، session_status و sessions_send را فقط برای نشست اصلی متصل مجاز می‌کند و مانع از آن می‌شود که فراخوانی وضعیت، مدل آن نشست را تغییر دهد. آن ابزارها همچنان باید در فهرست مجاز مؤثر ابزارهای عامل وجود داشته باشند. اعلان سیستمی نقش راهنما دارد؛ مجوز میزبان و قلاب، مرز مجوزدهی هستند.

سرور ClickClack باید هنگام ایجاد و به‌روزرسانی کانال، از فیلدهای کانال مدیریت‌شده (external_managed، external_ref، external_url و sidebar_section) پشتیبانی کند و آن‌ها را در پاسخ‌های کانال برگرداند. OpenClaw پیش از ماندگار کردن یک اتصال، این قرارداد را بررسی می‌کند. اگر پاسخ ایجاد از دست برود، باز کردن بعدی به‌جای ایجاد کانالی دیگر، کانال را با استفاده از external_ref اعمال‌شده توسط سرور می‌پذیرد. تا زمانی که این نتیجه تطبیق داده شود، رزرو در انتظار، رویدادهای فاقد اتصال را در فضای کاری مقصد قرنطینه می‌کند. تطبیق‌دهنده کلی، اگر همان نشست همچنان فعال باشد کانال را می‌پذیرد یا پس از بازنشانی آن را بایگانی می‌کند؛ اگر هیچ کانال راه دوری ایجاد نشده باشد، رزرو را پاک می‌کند. این مرجع شامل یک فضای نام ماندگار برای هر نصب OpenClaw، به‌همراه هش کلید نشست، شناسه مشخص نشست، مقصد ClickClack و نسل ماندگار اتصال است. Gatewayهای جداگانه نمی‌توانند کانال‌های یکدیگر را بپذیرند، نشست‌های بازنشانی‌شده نمی‌توانند تاریخچه کانال قدیمی را به ارث ببرند و رفت‌وبرگشت حساب یا فضای کاری نمی‌تواند کانال قبلی را دوباره بپذیرد. اتصال‌ها همچنین به URL پیکربندی‌شده سرور ClickClack مقیدند و اگر حساب به مقصد دیگری هدایت شود، باطل می‌شوند. تغییر یا حذف controlUrlBase، پیوند کانال مدیریت‌شده را در گذر بعدی تطبیق به‌روزرسانی یا پاک می‌کند. تغییر discussions.workspace، پیش از آنکه بتوان کانالی را در فضای کاری جدید باز کرد، اتصال قدیمی را بایگانی و آزاد می‌کند؛ مشروط بر اینکه اعتبارنامه فضای کاری قدیمی همچنان پیکربندی شده باشد. اگر توکن با اعتبارنامه‌ای محدود به فضای کاری جایگزین شده باشد که به فضای کاری قدیمی دسترسی ندارد، OpenClaw کانال قدیمی را لغوشده ثبت می‌کند و بدون تلاش با توکن جایگزین، اتصال را آزاد می‌کند؛ آن کانال باقی‌مانده را از ClickClack بایگانی کنید.

نشست اصلی پیوست‌شده همچنین یک ابزار صرفاً واکشیِ discussion دریافت می‌کند. این ابزار جدیدترین پیام‌ها و پاسخ‌های اخیر رشته‌ها را به‌صورت یک رکورد escape‌شده و دارای انتساب برای هر پیام می‌خواند و هیچ اثر جانبی نوشتاری یا چرخه‌عمری ندارد. جست‌وجوهای ریشه کانال و رشته، بودجه درخواست ثابتی دارند؛ نتیجه صراحتاً هشدار می‌دهد که چه زمانی این حد ایمنی ممکن است یک رشته فعال قدیمی‌تر را حذف کند.

حالت‌های پاسخ

  • replyMode: "agent" (پیش‌فرض) پیام‌های ورودی را از طریق پایپ‌لاین عادی عامل، شامل ثبت نشست و سیاست ابزار، ارسال می‌کند.
  • replyMode: "model" پایپ‌لاین عامل را رد می‌کند و برای پاسخ‌های مستقیم ربات از llm.complete زمان اجرای Plugin استفاده می‌کند که در صورت نیاز با model و systemPrompt شکل داده می‌شود. ارائه‌دهنده و مدل انتخاب‌شده مالک بودجه تکمیل هستند.

حالت مدل، تکمیل‌ها را در برابر شناسه عامل ربات حل‌شده اجرا می‌کند که به بیت اعتماد صریح plugins.entries.clickclack.llm.allowAgentIdOverride: true نیاز دارد:

json5
{  plugins: {    entries: {      clickclack: {        llm: {          allowAgentIdOverride: true,        },      },    },  },}

اگر فقط از حالت پاسخ پیش‌فرض agent استفاده می‌کنید، بیت اعتماد را خاموش نگه دارید؛ در آن حالت نیازی به آن نیست.

منوی فرمان

هنگام راه‌اندازی Gateway، هر حساب پیکربندی‌شده فرمان‌های بومی OpenClaw را در ClickClack منتشر می‌کند. آن‌ها در تکمیل خودکار کادر نوشتن با برچسب شناسه ربات ظاهر می‌شوند. مجموعه منتشرشده در هر راه‌اندازی به‌طور کامل جایگزین می‌شود؛ از جمله پاک‌کردن منوی منسوخ هنگامی که کاتالوگ فرمان‌های بومی خالی است.

همگام‌سازی منوی فرمان به‌طور پیش‌فرض فعال است. برای انصراف، commandMenu: false را روی یک حساب تنظیم کنید:

json5
{  channels: {    clickclack: {      enabled: true,      token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" },      workspace: "default",      commandMenu: false,    },  },}

توکن به commands:write نیاز دارد. بسته‌های فعلی bot:write و bot:admin در ClickClack این دامنه را شامل می‌شوند و می‌توان آن را به‌صورت جداگانه نیز اعطا کرد. ممکن است لازم باشد این دامنه به توکن‌هایی که پیش از معرفی منوهای فرمان ایجاد شده‌اند افزوده شود یا توکن جایگزینی ساخته شود.

همگام‌سازی بر مبنای بهترین تلاش است و در هر شروع Gateway یک‌بار اجرا می‌شود. نبود دامنه یا شکست شبکه هشداری را ثبت می‌کند؛ سرور قدیمی‌تر ClickClack که نقطه پایانی را ندارد، در سطح اشکال‌زدایی ثبت می‌شود. هیچ‌یک از این شکست‌ها راه‌اندازی بلادرنگ را مسدود نمی‌کنند. منوها در زمان آفلاین بودن عامل همچنان در دسترس می‌مانند و وقتی ربات فضای کاری را ترک کند حذف می‌شوند.

این نسخه فقط مشخصات فرمان‌های بومی را منتشر می‌کند. نام‌های مستعار و کاتالوگ‌های فرمان مربوط به مهارت، Plugin یا فرمان سفارشی به منو افزوده نمی‌شوند. اگر نامی به‌عنوان فرمان اسلش HTTP نیز ثبت شده باشد، ClickClack ابتدا آن ثبت را ارسال می‌کند؛ سایر فرمان‌های منو از مسیر تحویل عادی پیام ادامه می‌یابند.

برای شواهد هم‌بستگی میان سرویس‌ها از حالت agent استفاده کنید. برای شناسه معتبر پیام ClickClack با شکل معیار msg_<ulid>، کانال شناسه اجرای قطعی OpenClaw یعنی clickclack:<message-id> را استخراج می‌کند. سپس هر فراخوانی مدل در عیب‌یابی‌ها به‌صورت clickclack:<message-id>:model:<n> قابل مشاهده است؛ وقتی آن نوبت از ClawRouter استفاده کند، همان شناسه فراخوانی مدل به‌صورت X-Request-ID ارسال می‌شود. حالت model اجرای عادی عامل و عیب‌یابی نشست را دور می‌زند و بنابراین برای این مسیر شواهد مناسب نیست.

وقتی یک رویداد بلادرنگ شامل payload.correlation_id اعتبارسنجی‌شده باشد، کانال آن را به‌صورت X-Correlation-ID در واکشی معتبر پیام و درخواست‌های پاسخ ClickClack حاصل منتقل می‌کند. مقادیر از مجموعه امن 128 نویسه‌ای ClickClack استفاده می‌کنند (A-Z، a-z، 0-9، .، _، : و -)؛ مقادیر نامعتبر حذف می‌شوند. این پیوندها فقط شامل شناسه‌ها هستند و هرگز بدنه پیام، اعلان‌ها، تکمیل‌ها، اعتبارنامه‌ها یا خروجی ابزار را در بر نمی‌گیرند.

تحویل ماندگار رسانه

پاسخ‌های عامل که دارای رسانه هستند از تحویل ماندگار الزامی استفاده می‌کنند. OpenClaw پیش از نخستین نوشتن در ClickClack، نانس‌های پایدار پیام و بارگذاری را برای هر بخش اختصاص می‌دهد؛ بنابراین تلاش مجدد به‌جای مصرف سهمیه ذخیره‌سازی یا انتشار نسخه‌های تکراری، از همان بارگذاری و پیام استفاده می‌کند. اگر پس از راه‌اندازی مجدد، بارگذاری از قبل وجود داشته باشد، OpenClaw مسیر محلی اصلی یا URL رسانه راه دور را دوباره نمی‌خواند.

این قرارداد بازیابی به سرور ClickClack نیاز دارد که از موارد زیر پشتیبانی کند:

  • GET /api/uploads/by-nonce با X-ClickClack-Upload-Nonce: supported در نتایج پیداشده و پیدانشده.
  • GET /api/messages/by-nonce با X-ClickClack-Message-Nonce: supported در نتایج پیداشده و پیدانشده.
  • ایجاد پیام و ارتباط پیوست به‌صورت ایدمپوتنت برای همان نانس محدود به مالک و بارگذاری.

خطای عمومی 404 در سرور قدیمی‌تر به‌عنوان اثبات نبودن یک ارسال در نظر گرفته نمی‌شود. OpenClaw به‌جای به‌خطر انداختن ایجاد نسخه تکراری، تحویل را حل‌نشده باقی می‌گذارد؛ پیش از فعال‌کردن پاسخ‌های عامل تولیدکننده رسانه، ClickClack را به‌روزرسانی کنید.

ردیف‌های فعالیت عامل

به‌طور پیش‌فرض، کانال ClickClack در حین اجرای نوبت عامل چیزی نشان نمی‌دهد؛ فقط پاسخ نهایی ثبت می‌شود. برای انتشار ردیف‌های ماندگار پیام agent_commentary و agent_tool در حین اجرای نوبت، agentActivity: true را روی یک حساب تنظیم کنید:

json5
{  channels: {    clickclack: {      enabled: true,      token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" },      workspace: "default",      agentActivity: true,    },  },}

الزامات و رفتار:

  • به‌طور پیش‌فرض خاموش است. تنظیمات استاندارد و سرورهای قدیمی‌تر ClickClack بدون تغییر می‌مانند.
  • به دامنه توکن agent_activity:write نیاز دارد. این دامنه از bot:write جدا است و از آن به ارث نمی‌رسد؛ پیش از فعال‌کردن گزینه، توکن ربات را با --scopes bot:write,agent_activity:write ایجاد کنید (یا دامنه را به توکن موجود اعطا کنید).
  • افت کیفیت بر مبنای بهترین تلاش. اگر توکن فاقد agent_activity:write باشد یا سرور نوشتن فعالیت را رد کند، شکست‌ها ثبت می‌شوند و پاسخ نهایی همچنان به‌طور عادی تحویل داده می‌شود؛ هیچ ردیف فعالیتی ظاهر نمی‌شود.
  • ردیف‌ها برای هر نوبت گروه‌بندی می‌شوند (turn_id) و به‌گونه‌ای ادغام می‌شوند که هر گام منطقی یک ردیف باشد؛ ردیف‌های ابزار نیز از همان قالب‌بندی پیشرفت Discord/Slack/Telegram استفاده می‌کنند (نام ابزار به‌همراه جزئیات فرمان).
  • فراداده انتساب. پست‌های نوشته‌شده توسط عامل (ردیف‌های فعالیت و پاسخ نهایی) شامل فیلدهای author_model و author_thinking هستند که از مدل واقعی استفاده‌شده برای نوبت حل می‌شوند (از جمله پس از عقب‌گرد). سرورهایی که این ستون‌ها را تعریف نمی‌کنند، فیلدهای ناشناخته JSON را نادیده می‌گیرند؛ سرورهایی که آن‌ها را ماندگار می‌کنند، می‌توانند برای هر پیام پاسخ دهند «کدام مدل این خط را در چه سطح تفکری گفته است».

مقصدها

  • channel:<name-or-id> به یک کانال فضای کاری ارسال می‌کند. مقصدهای بدون پیشوند به‌طور پیش‌فرض channel: هستند.
  • dm:<user_id> یک گفت‌وگوی مستقیم با آن کاربر ایجاد می‌کند یا از گفت‌وگوی موجود استفاده می‌کند.
  • thread:<message_id> در رشته‌ای که ریشه آن آن پیام است پاسخ می‌دهد.

مقصدهای خروجی صریح می‌توانند پیشوند ارائه‌دهنده clickclack: یا cc: را نیز داشته باشند.

رسانه خروجی از API بارگذاری ClickClack استفاده می‌کند و سپس بارگذاری ماندگار را به پیام کانال، پاسخ رشته یا پیام مستقیم ایجادشده پیوست می‌کند. فایل‌های محلی و URLهای رسانه راه دور پشتیبانی‌شده، از سیاست عادی دسترسی رسانه OpenClaw با محدودیت 64 MiB برای هر فایل پیروی می‌کنند. ارسال‌های ماندگار صف‌شده برای هر بارگذاری و بخش پیام از نانس‌های جداگانه محدود به مالک استفاده می‌کنند، سپس ارتباط پیوست را با همان اشیا دوباره امتحان می‌کنند. برای قرارداد سرور و رفتار بازیابی، تحویل ماندگار رسانه را ببینید.

نمونه‌ها:

bash
openclaw message send --channel clickclack --target channel:general --message "hello"openclaw message send --channel clickclack --target dm:usr_123 --message "hello"openclaw message send --channel clickclack --target thread:msg_123 --message "following up"

مجوزها

دامنه‌های توکن ClickClack توسط API ClickClack اعمال می‌شوند.

  • bot:read: خواندن داده‌های فضای کاری/کانال/پیام/رشته/پیام مستقیم/بلادرنگ/نمایه.
  • bot:write: bot:read به‌همراه پیام‌های کانال، پاسخ‌های رشته، پیام‌های مستقیم، بارگذاری‌ها و انتشار منوی فرمان.
  • bot:admin: bot:write به‌همراه ایجاد کانال.
  • commands:write: انتشار منوی فرمان ربات. در بسته‌های فعلی bot:write و bot:admin گنجانده شده و به‌صورت جداگانه قابل اعطا است.
  • agent_activity:write: ردیف‌های ماندگار فعالیت عامل (agent_commentary / agent_tool). از bot:write یا bot:admin به ارث نمی‌رسد؛ فقط هنگامی لازم است که agentActivity: true تنظیم شده باشد.

OpenClaw برای گفت‌وگوی عادی عامل و همگام‌سازی منوی فرمان فقط به bot:write فعلی نیاز دارد. هنگام فعال‌کردن ردیف‌های فعالیت عامل، agent_activity:write را اضافه کنید.

عیب‌یابی

  • ClickClack is not configured for account "<id>": برای آن حساب baseUrl، token (برای نمونه از طریق CLICKCLACK_BOT_TOKEN) و workspace را تنظیم کنید.
  • ClickClack workspace not found: <value>: workspace را روی شناسه، نامک یا نام فضای کاری بازگردانده‌شده توسط ClickClack تنظیم کنید.
  • پاسخ ورودی وجود ندارد: تأیید کنید توکن دسترسی خواندن بلادرنگ دارد و توجه داشته باشید که ربات پیام‌های خودش و پیام‌های سایر ربات‌ها را نادیده می‌گیرد.
  • ارسال به کانال ناموفق است: بررسی کنید ربات عضو فضای کاری است و bot:write را دارد.
  • منوی فرمان وجود ندارد: تأیید کنید commandMenu برابر با false نیست، سرور ClickClack از PUT /api/bots/self/commands پشتیبانی می‌کند و توکن دارای commands:write است.
Was this useful?
On this page

On this page