Regional platforms
Feishu
Feishu/Lark یک پلتفرم همکاری همهکاره است که در آن تیمها گفتوگو میکنند، سندها را به اشتراک میگذارند، تقویمها را مدیریت میکنند و کارها را با هم پیش میبرند.
وضعیت: آماده تولید برای پیامهای مستقیم ربات + گفتوگوهای گروهی. WebSocket حالت پیشفرض است؛ حالت Webhook اختیاری است.
شروع سریع
جادوگر راهاندازی کانال را اجرا کنید
openclaw channels login --channel feishuراهاندازی دستی را انتخاب کنید تا App ID و App Secret را از Feishu Open Platform جایگذاری کنید، یا راهاندازی با QR را انتخاب کنید تا یک ربات بهصورت خودکار ساخته شود. اگر اپلیکیشن موبایل داخلی Feishu به کد QR واکنش نشان نمیدهد، راهاندازی را دوباره اجرا کنید و راهاندازی دستی را انتخاب کنید.
پس از تکمیل راهاندازی، Gateway را بازراهاندازی کنید تا تغییرات اعمال شوند
openclaw gateway restartکنترل دسترسی
پیامهای مستقیم
برای کنترل اینکه چه کسی میتواند به ربات پیام مستقیم بدهد، dmPolicy را پیکربندی کنید:
"pairing"- کاربران ناشناس یک کد جفتسازی دریافت میکنند؛ از طریق CLI تأیید کنید"allowlist"- فقط کاربران فهرستشده درallowFromمیتوانند گفتوگو کنند"open"- فقط وقتیallowFromشامل"*"باشد پیامهای مستقیم عمومی را مجاز کنید؛ با ورودیهای محدودکننده، فقط کاربران منطبق میتوانند گفتوگو کنند
تأیید درخواست جفتسازی:
openclaw pairing list feishuopenclaw pairing approve feishu <CODE>گفتوگوهای گروهی
سیاست گروه (channels.feishu.groupPolicy):
| مقدار | رفتار |
|---|---|
"open" |
به همه پیامها در گروهها پاسخ بده |
"allowlist" |
فقط به گروههای موجود در groupAllowFrom یا گروههایی که صراحتاً زیر groups.<chat_id> پیکربندی شدهاند پاسخ بده |
"disabled" |
همه پیامهای گروهی را غیرفعال کن؛ ورودیهای صریح groups.<chat_id> این را بازنویسی نمیکنند |
پیشفرض: allowlist
الزام اشاره (channels.feishu.requireMention):
true- @mention لازم است (پیشفرض)false- بدون @mention پاسخ بده- بازنویسی برای هر گروه:
channels.feishu.groups.<chat_id>.requireMention @allو@_allکه فقط برای پخش همگانی هستند، بهعنوان اشاره به ربات در نظر گرفته نمیشوند. پیامی که هم@allو هم مستقیماً ربات را اشاره کند، همچنان بهعنوان اشاره به ربات شمرده میشود.
نمونههای پیکربندی گروه
مجاز کردن همه گروهها، بدون نیاز به @mention
{ channels: { feishu: { groupPolicy: "open", }, },}مجاز کردن همه گروهها، همچنان با نیاز به @mention
{ channels: { feishu: { groupPolicy: "open", requireMention: true, }, },}فقط مجاز کردن گروههای مشخص
{ channels: { feishu: { groupPolicy: "allowlist", // Group IDs look like: oc_xxx groupAllowFrom: ["oc_xxx", "oc_yyy"], }, },}در حالت allowlist، میتوانید با افزودن یک ورودی صریح groups.<chat_id> نیز یک گروه را بپذیرید. ورودیهای صریح groupPolicy: "disabled" را بازنویسی نمیکنند. پیشفرضهای wildcard زیر groups.* گروههای منطبق را پیکربندی میکنند، اما خودشان بهتنهایی گروهها را نمیپذیرند.
{ channels: { feishu: { groupPolicy: "allowlist", groups: { oc_xxx: { requireMention: false, }, }, }, },}محدود کردن فرستندگان درون یک گروه
{ channels: { feishu: { groupPolicy: "allowlist", groupAllowFrom: ["oc_xxx"], groups: { oc_xxx: { // User open_ids look like: ou_xxx allowFrom: ["ou_user1", "ou_user2"], }, }, }, },}دریافت شناسههای گروه/کاربر
شناسههای گروه (chat_id، قالب: oc_xxx)
گروه را در Feishu/Lark باز کنید، روی آیکن منو در گوشه بالا-راست کلیک کنید، و به Settings بروید. شناسه گروه (chat_id) در صفحه تنظیمات فهرست شده است.

شناسههای کاربر (open_id، قالب: ou_xxx)
Gateway را شروع کنید، یک پیام مستقیم به ربات بفرستید، سپس گزارشها را بررسی کنید:
openclaw logs --followدر خروجی گزارش بهدنبال open_id بگردید. همچنین میتوانید درخواستهای جفتسازی در انتظار را بررسی کنید:
openclaw pairing list feishuفرمانهای رایج
| فرمان | توضیح |
|---|---|
/status |
نمایش وضعیت ربات |
/reset |
بازنشانی نشست فعلی |
/model |
نمایش یا تغییر مدل AI |
عیبیابی
ربات در گفتوگوهای گروهی پاسخ نمیدهد
- مطمئن شوید ربات به گروه افزوده شده است
- مطمئن شوید ربات را @mention میکنید (بهصورت پیشفرض لازم است)
- بررسی کنید
groupPolicyبرابر"disabled"نباشد - گزارشها را بررسی کنید:
openclaw logs --follow
ربات پیامها را دریافت نمیکند
- مطمئن شوید ربات در Feishu Open Platform / Lark Developer منتشر و تأیید شده است
- مطمئن شوید اشتراک رویداد شامل
im.message.receive_v1است - مطمئن شوید اتصال پایدار (WebSocket) انتخاب شده است
- مطمئن شوید همه دامنههای دسترسی مجوز لازم اعطا شدهاند
- مطمئن شوید Gateway در حال اجراست:
openclaw gateway status - گزارشها را بررسی کنید:
openclaw logs --follow
راهاندازی QR در اپلیکیشن موبایل Feishu واکنش نشان نمیدهد
- راهاندازی را دوباره اجرا کنید:
openclaw channels login --channel feishu - راهاندازی دستی را انتخاب کنید
- در Feishu Open Platform، یک اپلیکیشن خودساخته ایجاد کنید و App ID و App Secret آن را کپی کنید
- آن اعتبارنامهها را در جادوگر راهاندازی جایگذاری کنید
App Secret افشا شده است
- App Secret را در Feishu Open Platform / Lark Developer بازنشانی کنید
- مقدار را در پیکربندی خود بهروزرسانی کنید
- Gateway را بازراهاندازی کنید:
openclaw gateway restart
پیکربندی پیشرفته
چند حساب
{ channels: { feishu: { defaultAccount: "main", accounts: { main: { appId: "cli_xxx", appSecret: "xxx", name: "Primary bot", tts: { providers: { openai: { voice: "shimmer" }, }, }, }, backup: { appId: "cli_yyy", appSecret: "yyy", name: "Backup bot", enabled: false, }, }, }, },}defaultAccount کنترل میکند وقتی APIهای خروجی accountId مشخص نمیکنند، از کدام حساب استفاده شود.
accounts.<id>.tts از همان شکل messages.tts استفاده میکند و روی پیکربندی سراسری TTS
deep-merge میشود، بنابراین راهاندازیهای چندرباتی Feishu میتوانند اعتبارنامههای مشترک ارائهدهنده را
بهصورت سراسری نگه دارند و فقط صدا، مدل، persona، یا حالت خودکار را
برای هر حساب بازنویسی کنند.
محدودیتهای پیام
textChunkLimit- اندازه قطعه متن خروجی (پیشفرض:2000نویسه)mediaMaxMb- محدودیت بارگذاری/بارگیری رسانه (پیشفرض:30MB)
Streaming
Feishu/Lark از پاسخهای Streaming از طریق کارتهای تعاملی پشتیبانی میکند. وقتی فعال باشد، ربات هنگام تولید متن، کارت را در زمان واقعی بهروزرسانی میکند.
{ channels: { feishu: { streaming: true, // enable streaming card output (default: true) blockStreaming: true, // opt into completed-block streaming }, },}برای ارسال پاسخ کامل در یک پیام، streaming: false را تنظیم کنید. blockStreaming بهصورت پیشفرض خاموش است؛ آن را فقط وقتی فعال کنید که میخواهید بلوکهای تکمیلشده دستیار پیش از پاسخ نهایی flush شوند.
بهینهسازی سهمیه
تعداد فراخوانیهای API Feishu/Lark را با دو پرچم اختیاری کاهش دهید:
typingIndicator(پیشفرضtrue): برای رد کردن فراخوانیهای واکنش تایپ،falseتنظیم کنیدresolveSenderNames(پیشفرضtrue): برای رد کردن lookupهای پروفایل فرستنده،falseتنظیم کنید
{ channels: { feishu: { typingIndicator: false, resolveSenderNames: false, }, },}نشستهای ACP
Feishu/Lark از ACP برای پیامهای مستقیم و پیامهای رشته گروهی پشتیبانی میکند. ACP در Feishu/Lark مبتنی بر فرمان متنی است - منوهای بومی فرمان اسلش وجود ندارند، بنابراین پیامهای /acp ... را مستقیماً در مکالمه استفاده کنید.
اتصال پایدار ACP
{ agents: { list: [ { id: "codex", runtime: { type: "acp", acp: { agent: "codex", backend: "acpx", mode: "persistent", cwd: "/workspace/openclaw", }, }, }, ], }, bindings: [ { type: "acp", agentId: "codex", match: { channel: "feishu", accountId: "default", peer: { kind: "direct", id: "ou_1234567890" }, }, }, { type: "acp", agentId: "codex", match: { channel: "feishu", accountId: "default", peer: { kind: "group", id: "oc_group_chat:topic:om_topic_root" }, }, acp: { label: "codex-feishu-topic" }, }, ],}ایجاد ACP از گفتوگو
در یک پیام مستقیم یا رشته Feishu/Lark:
/acp spawn codex --thread here--thread here برای پیامهای مستقیم و پیامهای رشته Feishu/Lark کار میکند. پیامهای بعدی در مکالمه متصلشده مستقیماً به همان نشست ACP هدایت میشوند.
مسیریابی چندعاملی
از bindings برای مسیریابی پیامهای مستقیم یا گروههای Feishu/Lark به عاملهای مختلف استفاده کنید.
{ agents: { list: [ { id: "main" }, { id: "agent-a", workspace: "/home/user/agent-a" }, { id: "agent-b", workspace: "/home/user/agent-b" }, ], }, bindings: [ { agentId: "agent-a", match: { channel: "feishu", peer: { kind: "direct", id: "ou_xxx" }, }, }, { agentId: "agent-b", match: { channel: "feishu", peer: { kind: "group", id: "oc_zzz" }, }, }, ],}فیلدهای مسیریابی:
match.channel:"feishu"match.peer.kind:"direct"(پیام مستقیم) یا"group"(گفتوگوی گروهی)match.peer.id: Open ID کاربر (ou_xxx) یا شناسه گروه (oc_xxx)
برای نکات lookup، دریافت شناسههای گروه/کاربر را ببینید.
ایزولهسازی عامل برای هر کاربر (ایجاد پویای عامل)
dynamicAgentCreation را فعال کنید تا برای هر کاربر پیام مستقیم، نمونههای عامل ایزوله بهصورت خودکار ایجاد شوند. هر کاربر موارد زیر را دریافت میکند:
- پوشه کاری مستقل
USER.md/SOUL.md/MEMORY.mdجداگانه- تاریخچه مکالمه خصوصی
- Skills و وضعیت ایزوله
این برای رباتهای عمومی ضروری است؛ جایی که میخواهید هر کاربر تجربه دستیار AI خصوصی خودش را داشته باشد.
راهاندازی سریع
{ channels: { feishu: { dmPolicy: "open", allowFrom: ["*"], dynamicAgentCreation: { enabled: true, workspaceTemplate: "~/.openclaw/workspace-{agentId}", agentDirTemplate: "~/.openclaw/agents/{agentId}/agent", }, }, }, session: { // Critical: makes each user's DM their "main session" // Automatically loads USER.md / SOUL.md / MEMORY.md // For stronger isolation, use "per-channel-peer" instead dmScope: "main", },}نحوه کار
وقتی کاربر جدیدی نخستین پیام مستقیم خود را میفرستد:
- کانال یک
agentIdیکتا تولید میکند:feishu-{user_open_id}برای حساب پیشفرض، یا یک digest هویت محدود و پیشونددار با حساب برای حساب نامدار - یک پوشه کاری جدید در مسیر
workspaceTemplateایجاد میکند - عامل را ثبت میکند و برای این کاربر یک اتصال میسازد
- کمککننده پوشه کاری در نخستین دسترسی وجود فایلهای راهاندازی اولیه (
AGENTS.md،SOUL.md،USER.mdو غیره) را تضمین میکند - همه پیامهای آینده از این کاربر را به عامل اختصاصی او هدایت میکند
گزینههای پیکربندی
| تنظیم | توضیح | پیشفرض |
|---|---|---|
channels.feishu.dynamicAgentCreation.enabled |
فعالسازی ایجاد خودکار عامل برای هر کاربر | false |
channels.feishu.dynamicAgentCreation.workspaceTemplate |
قالب مسیر برای فضاهای کاری پویای عامل | ~/.openclaw/workspace-{agentId} |
channels.feishu.dynamicAgentCreation.agentDirTemplate |
قالب نام پوشه عامل | ~/.openclaw/agents/{agentId}/agent |
channels.feishu.dynamicAgentCreation.maxAgents |
حداکثر تعداد عاملهای پویا برای ایجاد | نامحدود |
متغیرهای قالب:
{agentId}- شناسه عامل تولیدشده (مثلاًfeishu-ou_xxxxxxیاfeishu-support-<identity_digest>){userId}- open_id فرستنده در Feishu (مثلاًou_xxxxxx)
دامنه نشست
session.dmScope کنترل میکند پیامهای مستقیم چگونه به نشستهای عامل نگاشت شوند. این یک تنظیم سراسری است که روی همه کانالها اثر میگذارد.
| مقدار | رفتار | مناسب برای |
|---|---|---|
"main" |
پیام مستقیم هر کاربر به نشست اصلی عامل خودش نگاشت میشود | رباتهای تککاربره که میخواهید USER.md / SOUL.md بهطور خودکار بارگذاری شوند |
"per-channel-peer" |
هر ترکیب (کانال + کاربر) یک نشست جداگانه میگیرد | رباتهای عمومی چندکاربره که به جداسازی قویتر نیاز دارند |
"per-account-channel-peer" |
هر ترکیب (حساب + کانال + کاربر) یک نشست جداگانه میگیرد | رباتهای چندحسابی که به جداسازی نشست در سطح حساب نیاز دارند |
مصالحه: استفاده از "main" بارگذاری خودکار فایلهای راهانداز (USER.md، SOUL.md، MEMORY.md) را فعال میکند، اما یعنی همه پیامهای مستقیم در همه کانالها الگوی کلید نشست یکسانی را به اشتراک میگذارند. برای رباتهای عمومی چندکاربره که جداسازی در آنها مهمتر از بارگذاری خودکار راهانداز است، "per-channel-peer" را در نظر بگیرید و فایلهای راهانداز را دستی مدیریت کنید.
{ session: { // For single-user personal bots: enables auto bootstrap loading dmScope: "main", // For public multi-user bots: stronger isolation // dmScope: "per-channel-peer", },}استقرار معمول چندکاربره
{ channels: { feishu: { appId: "cli_xxx", appSecret: "xxx", dmPolicy: "open", allowFrom: ["*"], groupPolicy: "open", requireMention: true, dynamicAgentCreation: { enabled: true, workspaceTemplate: "~/.openclaw/workspace-{agentId}", agentDirTemplate: "~/.openclaw/agents/{agentId}/agent", }, }, }, session: { // Choose dmScope based on your isolation needs: // "main" for bootstrap auto-loading, "per-channel-peer" for stronger isolation dmScope: "main", }, bindings: [], // Empty - dynamic agents auto-bind}راستیآزمایی
لاگهای Gateway را بررسی کنید تا تأیید شود ایجاد پویا کار میکند:
feishu: creating dynamic agent "feishu-ou_xxxxxx" for user ou_xxxxxxworkspace: /Users/you/.openclaw/workspace-feishu-ou_xxxxxxfeishu: dynamic agent created, new route: agent:feishu-ou_xxxxxx:mainفهرست همه فضاهای کاری ایجادشده:
ls -la ~/.openclaw/workspace-*نکات
- جداسازی فضای کاری: هر کاربر پوشه فضای کاری و نمونه عامل خودش را میگیرد. کاربران در جریان عادی پیامرسانی نمیتوانند تاریخچه مکالمه یا فایلهای یکدیگر را ببینند.
- مرز امنیتی: این یک سازوکار جداسازی زمینه پیامرسانی است، نه یک مرز امنیتی برای هممستأجر متخاصم. فرایند عامل و محیط میزبان مشترک هستند.
bindingsباید خالی باشد: عاملهای پویا اتصالهای خودشان را خودکار ثبت میکنند- مسیر ارتقا: اتصالهای دستی موجود در کنار عاملهای پویا همچنان کار میکنند
session.dmScopeسراسری است: این روی همه کانالها اثر میگذارد، نه فقط Feishu
مرجع پیکربندی
پیکربندی کامل: پیکربندی Gateway
| تنظیم | توضیح | پیشفرض |
|---|---|---|
channels.feishu.enabled |
فعال/غیرفعال کردن کانال | true |
channels.feishu.domain |
دامنه API (feishu یا lark) |
feishu |
channels.feishu.connectionMode |
انتقال رویداد (websocket یا webhook) |
websocket |
channels.feishu.defaultAccount |
حساب پیشفرض برای مسیریابی خروجی | default |
channels.feishu.verificationToken |
برای حالت webhook لازم است | - |
channels.feishu.encryptKey |
برای حالت webhook لازم است | - |
channels.feishu.webhookPath |
مسیر Webhook | /feishu/events |
channels.feishu.webhookHost |
میزبان اتصال Webhook | 127.0.0.1 |
channels.feishu.webhookPort |
درگاه اتصال Webhook | 3000 |
channels.feishu.accounts.<id>.appId |
شناسه برنامه | - |
channels.feishu.accounts.<id>.appSecret |
راز برنامه | - |
channels.feishu.accounts.<id>.domain |
بازنویسی دامنه برای هر حساب | feishu |
channels.feishu.accounts.<id>.tts |
بازنویسی TTS برای هر حساب | messages.tts |
channels.feishu.dmPolicy |
سیاست پیام مستقیم | pairing |
channels.feishu.allowFrom |
فهرست مجاز پیام مستقیم (فهرست open_id) | - |
channels.feishu.groupPolicy |
سیاست گروه | allowlist |
channels.feishu.groupAllowFrom |
فهرست مجاز گروه | - |
channels.feishu.requireMention |
نیاز به @mention در گروهها | true |
channels.feishu.groups.<chat_id>.requireMention |
بازنویسی @mention برای هر گروه؛ شناسههای صریح گروه را در حالت فهرست مجاز نیز میپذیرند | موروثی |
channels.feishu.groups.<chat_id>.enabled |
فعال/غیرفعال کردن یک گروه مشخص | true |
channels.feishu.dynamicAgentCreation.enabled |
فعالسازی ایجاد خودکار عامل برای هر کاربر | false |
channels.feishu.dynamicAgentCreation.workspaceTemplate |
قالب مسیر برای فضاهای کاری پویای عامل | ~/.openclaw/workspace-{agentId} |
channels.feishu.dynamicAgentCreation.agentDirTemplate |
قالب نام پوشه عامل | ~/.openclaw/agents/{agentId}/agent |
channels.feishu.dynamicAgentCreation.maxAgents |
حداکثر تعداد عاملهای پویا برای ایجاد | نامحدود |
channels.feishu.textChunkLimit |
اندازه قطعه پیام | 2000 |
channels.feishu.mediaMaxMb |
محدودیت اندازه رسانه | 30 |
channels.feishu.streaming |
خروجی کارت جریانی | true |
channels.feishu.blockStreaming |
جریانسازی پاسخ بلوک تکمیلشده | false |
channels.feishu.typingIndicator |
ارسال واکنشهای تایپ | true |
channels.feishu.resolveSenderNames |
تشخیص نامهای نمایشی فرستنده | true |
channels.feishu.tools.bitable |
فعالسازی ابزارهای Bitable/Base | true |
channels.feishu.tools.base |
نام مستعار برای channels.feishu.tools.bitable؛ وقتی هر دو تنظیم شده باشند، bitable مقدم است |
true |
channels.feishu.accounts.<id>.tools.bitable |
دروازه ابزار Bitable/Base برای هر حساب | موروثی |
channels.feishu.accounts.<id>.tools.base |
نام مستعار هر حساب برای tools.bitable |
موروثی |
انواع پیام پشتیبانیشده
دریافت
- ✅ متن
- ✅ متن غنی (post)
- ✅ تصاویر
- ✅ فایلها
- ✅ صوت
- ✅ ویدئو/رسانه
- ✅ استیکرها
پیامهای صوتی ورودی Feishu/Lark بهجای JSON خام file_key بهصورت جاینگهدارهای رسانهای نرمالسازی میشوند. وقتی tools.media.audio پیکربندی شده باشد، OpenClaw منبع یادداشت صوتی را دانلود میکند و پیش از نوبت عامل، رونویسی صوتی مشترک را اجرا میکند، بنابراین عامل رونویس گفتار را دریافت میکند. اگر Feishu متن رونویس را مستقیماً در بار صوتی بگنجاند، آن متن بدون فراخوانی ASR دیگر استفاده میشود. بدون ارائهدهنده رونویسی صوتی، عامل همچنان یک جاینگهدار <media:audio> بههمراه پیوست ذخیرهشده دریافت میکند، نه بار منبع خام Feishu.
ارسال
- ✅ متن
- ✅ تصاویر
- ✅ فایلها
- ✅ صدا
- ✅ ویدئو/رسانه
- ✅ کارتهای تعاملی (از جمله بهروزرسانیهای جریانی)
- ⚠️ متن غنی (قالببندی به سبک پست؛ از قابلیتهای کامل نگارش Feishu/Lark پشتیبانی نمیکند)
حبابهای صوتی بومی Feishu/Lark از نوع پیام audio در Feishu استفاده میکنند و به
رسانهٔ بارگذاریشدهٔ Ogg/Opus (file_type: "opus") نیاز دارند. رسانههای .opus و .ogg موجود
مستقیماً بهصورت صدای بومی ارسال میشوند. MP3/WAV/M4A و دیگر قالبهای محتمل صوتی
فقط زمانی با ffmpeg به Ogg/Opus با 48kHz تبدیل میشوند که پاسخ، تحویل صوتی را درخواست کند
(audioAsVoice / ابزار پیام asVoice، از جمله پاسخهای یادداشت صوتی TTS).
پیوستهای معمولی MP3 بهصورت فایلهای عادی باقی میمانند. اگر ffmpeg موجود نباشد یا
تبدیل شکست بخورد، OpenClaw به پیوست فایل بازمیگردد و دلیل را ثبت میکند.
رشتهها و پاسخها
- ✅ پاسخهای درونخطی
- ✅ پاسخهای رشتهای
- ✅ پاسخهای رسانهای هنگام پاسخ به یک پیام رشتهای، آگاه از رشته باقی میمانند
برای groupSessionScope: "group_topic" و "group_topic_sender"، گروههای موضوعی بومی
Feishu/Lark از thread_id رویداد (omt_*) بهعنوان کلید متعارف نشست موضوع استفاده میکنند.
اگر یک رویداد شروعکنندهٔ موضوع بومی thread_id را حذف کرده باشد، OpenClaw پیش از مسیریابی نوبت
آن را از Feishu تکمیل میکند. پاسخهای عادی گروهی که OpenClaw آنها را به رشته تبدیل میکند
همچنان از شناسهٔ پیام ریشهٔ پاسخ (om_*) استفاده میکنند تا نوبت نخست و نوبت پیگیری در همان نشست باقی بمانند.
مرتبط
- نمای کلی کانالها - همهٔ کانالهای پشتیبانیشده
- جفتسازی - جریان احراز هویت و جفتسازی DM
- گروهها - رفتار گفتوگوی گروهی و کنترل دروازهای اشاره
- مسیریابی کانال - مسیریابی نشست برای پیامها
- امنیت - مدل دسترسی و سختسازی