Regional platforms
Feishu
Feishu/Lark یک پلتفرم همکاری همهکاره است که در آن تیمها گفتگو میکنند، اسناد را به اشتراک میگذارند، تقویمها را مدیریت میکنند و کارها را با هم انجام میدهند.
وضعیت: آمادهٔ تولید برای DMهای ربات + گفتگوهای گروهی. WebSocket حالت پیشفرض است؛ حالت webhook اختیاری است.
شروع سریع
Run the channel setup wizard
openclaw channels login --channel feishuراهاندازی دستی را انتخاب کنید تا App ID و App Secret را از Feishu Open Platform وارد کنید، یا راهاندازی QR را انتخاب کنید تا یک ربات بهصورت خودکار ساخته شود. اگر برنامهٔ موبایل داخلی Feishu به کد QR واکنش نشان نداد، راهاندازی را دوباره اجرا کنید و راهاندازی دستی را انتخاب کنید.
After setup completes, restart the gateway to apply the changes
openclaw gateway restartکنترل دسترسی
پیامهای مستقیم
برای کنترل اینکه چه کسی میتواند به ربات DM بدهد، dmPolicy را پیکربندی کنید:
"pairing"- کاربران ناشناس یک کد جفتسازی دریافت میکنند؛ از طریق CLI تأیید کنید"allowlist"- فقط کاربران فهرستشده درallowFromمیتوانند گفتگو کنند (پیشفرض: فقط مالک ربات)"open"- فقط زمانی DMهای عمومی را مجاز میکند کهallowFromشامل"*"باشد؛ با ورودیهای محدودکننده، فقط کاربران منطبق میتوانند گفتگو کنند"disabled"- همهٔ DMها را غیرفعال میکند
تأیید یک درخواست جفتسازی:
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 باز کنید، روی آیکن منو در گوشهٔ بالا-راست کلیک کنید و به تنظیمات بروید. شناسهٔ گروه (chat_id) در صفحهٔ تنظیمات فهرست شده است.

شناسههای کاربر (open_id، قالب: ou_xxx)
Gateway را شروع کنید، یک DM به ربات بفرستید، سپس لاگها را بررسی کنید:
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)
استریمینگ
Feishu/Lark از پاسخهای استریمینگ از طریق کارتهای تعاملی پشتیبانی میکند. وقتی فعال باشد، ربات هنگام تولید متن، کارت را در زمان واقعی بهروزرسانی میکند.
{ channels: { feishu: { streaming: true, // enable streaming card output (default: true) blockStreaming: true, // opt into completed-block streaming }, },}برای ارسال پاسخ کامل در یک پیام، streaming: false را تنظیم کنید. blockStreaming بهصورت پیشفرض خاموش است؛ فقط زمانی آن را فعال کنید که میخواهید بلاکهای کاملشدهٔ دستیار پیش از پاسخ نهایی ارسال شوند.
بهینهسازی سهمیه
تعداد فراخوانیهای API مربوط به Feishu/Lark را با دو پرچم اختیاری کاهش دهید:
typingIndicator(پیشفرضtrue): برای رد کردن فراخوانیهای واکنش تایپ،falseتنظیم کنیدresolveSenderNames(پیشفرضtrue): برای رد کردن جستوجوهای پروفایل فرستنده،falseتنظیم کنید
{ channels: { feishu: { typingIndicator: false, resolveSenderNames: false, }, },}نشستهای ACP
Feishu/Lark از ACP برای DMها و پیامهای رشتهٔ گروهی پشتیبانی میکند. 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 از گفتگو
در یک DM یا رشتهٔ Feishu/Lark:
/acp spawn codex --thread here--thread here برای DMها و پیامهای رشتهٔ Feishu/Lark کار میکند. پیامهای بعدی در گفتگوی متصلشده مستقیماً به همان نشست ACP هدایت میشوند.
مسیریابی چندعاملی
برای هدایت DMها یا گروههای Feishu/Lark به عاملهای مختلف، از bindings استفاده کنید.
{ 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"(DM) یا"group"(گفتگوی گروهی)match.peer.id: Open ID کاربر (ou_xxx) یا شناسهٔ گروه (oc_xxx)
برای نکات جستوجو، دریافت شناسههای گروه/کاربر را ببینید.
مرجع پیکربندی
پیکربندی کامل: پیکربندی 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 |
مسیر route برای Webhook | /feishu/events |
channels.feishu.webhookHost |
میزبان bind برای Webhook | 127.0.0.1 |
channels.feishu.webhookPort |
پورت bind برای Webhook | 3000 |
channels.feishu.accounts.<id>.appId |
شناسه App | - |
channels.feishu.accounts.<id>.appSecret |
راز App | - |
channels.feishu.accounts.<id>.domain |
بازنویسی دامنه برای هر حساب | feishu |
channels.feishu.accounts.<id>.tts |
بازنویسی TTS برای هر حساب | messages.tts |
channels.feishu.dmPolicy |
سیاست DM | allowlist |
channels.feishu.allowFrom |
فهرست مجاز DM (فهرست open_id) | [BotOwnerId] |
channels.feishu.groupPolicy |
سیاست گروه | allowlist |
channels.feishu.groupAllowFrom |
فهرست مجاز گروه | - |
channels.feishu.requireMention |
الزام @mention در گروهها | true |
channels.feishu.groups.<chat_id>.requireMention |
بازنویسی @mention برای هر گروه؛ شناسههای صریح همچنین گروه را در حالت فهرست مجاز میپذیرند | inherited |
channels.feishu.groups.<chat_id>.enabled |
فعال/غیرفعال کردن یک گروه مشخص | true |
channels.feishu.textChunkLimit |
اندازه قطعه پیام | 2000 |
channels.feishu.mediaMaxMb |
محدودیت اندازه رسانه | 30 |
channels.feishu.streaming |
خروجی کارت جریانی | true |
channels.feishu.blockStreaming |
پخش جریانی پاسخ بلوک تکمیلشده | false |
channels.feishu.typingIndicator |
ارسال واکنشهای در حال تایپ | true |
channels.feishu.resolveSenderNames |
رفع نامهای نمایشی فرستنده | true |
نوعهای پیام پشتیبانیشده
دریافت
- ✅ متن
- ✅ متن غنی (post)
- ✅ تصویرها
- ✅ فایلها
- ✅ صدا
- ✅ ویدئو/رسانه
- ✅ استیکرها
پیامهای صوتی ورودی Feishu/Lark بهجای JSON خام file_key بهصورت جاینگهدار رسانه نرمالسازی میشوند. وقتی tools.media.audio پیکربندی شده باشد، OpenClaw منبع یادداشت صوتی را دانلود میکند و پیش از نوبت عامل، رونویسی صوتی مشترک را اجرا میکند؛ بنابراین عامل رونوشت گفتار را دریافت میکند. اگر Feishu متن رونوشت را مستقیماً در payload صوتی شامل کند، همان متن بدون فراخوانی ASR دیگر استفاده میشود. بدون ارائهدهنده رونویسی صوتی، عامل همچنان یک جاینگهدار <media:audio> بههمراه پیوست ذخیرهشده را دریافت میکند، نه payload خام منبع Feishu.
ارسال
- ✅ متن
- ✅ تصویرها
- ✅ فایلها
- ✅ صدا
- ✅ ویدئو/رسانه
- ✅ کارتهای تعاملی (از جمله بهروزرسانیهای جریانی)
- ⚠️ متن غنی (قالببندی به سبک post؛ از قابلیتهای کامل نویسندگی Feishu/Lark پشتیبانی نمیکند)
حبابهای صوتی بومی Feishu/Lark از نوع پیام audio در Feishu استفاده میکنند و به رسانه بارگذاریشده Ogg/Opus (file_type: "opus") نیاز دارند. رسانههای موجود .opus و .ogg مستقیماً بهصورت صدای بومی ارسال میشوند. MP3/WAV/M4A و دیگر قالبهای محتمل صوتی فقط زمانی که پاسخ درخواست تحویل صوتی داشته باشد (audioAsVoice / ابزار پیام asVoice، از جمله پاسخهای یادداشت صوتی TTS)، با ffmpeg به Ogg/Opus با 48kHz تبدیل میشوند. پیوستهای معمولی MP3 بهصورت فایلهای عادی باقی میمانند. اگر ffmpeg موجود نباشد یا تبدیل ناموفق شود، OpenClaw به پیوست فایل برمیگردد و دلیل را ثبت میکند.
رشتهها و پاسخها
- ✅ پاسخهای درونخطی
- ✅ پاسخهای رشتهای
- ✅ پاسخهای رسانهای هنگام پاسخ به یک پیام رشتهای همچنان از رشته آگاه میمانند
برای groupSessionScope: "group_topic" و "group_topic_sender"، گروههای موضوعی بومی Feishu/Lark از thread_id رویداد (omt_*) بهعنوان کلید canonical جلسه موضوع استفاده میکنند. اگر یک رویداد آغازگر موضوع بومی thread_id را حذف کند، OpenClaw پیش از مسیریابی نوبت آن را از Feishu hydrate میکند. پاسخهای عادی گروه که OpenClaw آنها را به رشته تبدیل میکند، همچنان از شناسه پیام ریشه پاسخ (om_*) استفاده میکنند تا نوبت اول و نوبت پیگیری در همان جلسه بمانند.
مرتبط
- نمای کلی کانالها - همه کانالهای پشتیبانیشده
- جفتسازی - احراز هویت DM و جریان جفتسازی
- گروهها - رفتار چت گروهی و gate کردن mention
- مسیریابی کانال - مسیریابی جلسه برای پیامها
- امنیت - مدل دسترسی و سختسازی