Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

Feishu/Lark เป็นแพลตฟอร์มการทำงานร่วมกันแบบครบวงจรที่ทีมใช้แชต แชร์เอกสาร จัดการปฏิทิน และทำงานร่วมกันให้เสร็จได้ สถานะ: พร้อมใช้งานจริงสำหรับ DM ของบอต + แชตกลุ่ม WebSocket เป็นโหมดเริ่มต้น; โหมด Webhook เป็นตัวเลือก

เริ่มต้นอย่างรวดเร็ว

ต้องใช้ OpenClaw 2026.4.25 ขึ้นไป รัน openclaw --version เพื่อตรวจสอบ อัปเกรดด้วย openclaw update
1

รันตัวช่วยตั้งค่าช่องทาง

openclaw channels login --channel feishu
เลือกการตั้งค่าแบบแมนนวลเพื่อวาง App ID และ App Secret จาก Feishu Open Platform หรือเลือกการตั้งค่าด้วย QR เพื่อสร้างบอตโดยอัตโนมัติ หากแอปมือถือ Feishu ในประเทศไม่ตอบสนองต่อโค้ด QR ให้รันการตั้งค่าอีกครั้งแล้วเลือกการตั้งค่าแบบแมนนวล
2

หลังจากตั้งค่าเสร็จแล้ว ให้รีสตาร์ท Gateway เพื่อใช้การเปลี่ยนแปลง

openclaw gateway restart

การควบคุมการเข้าถึง

ข้อความโดยตรง

กำหนดค่า dmPolicy เพื่อควบคุมว่าใครสามารถ DM บอตได้:
  • "pairing" - ผู้ใช้ที่ไม่รู้จักจะได้รับโค้ดจับคู่; อนุมัติผ่าน CLI
  • "allowlist" - เฉพาะผู้ใช้ที่อยู่ใน allowFrom เท่านั้นที่แชตได้ (ค่าเริ่มต้น: เจ้าของบอตเท่านั้น)
  • "open" - อนุญาต DM สาธารณะเฉพาะเมื่อ allowFrom มี "*"; หากมีรายการจำกัด เฉพาะผู้ใช้ที่ตรงกันเท่านั้นที่แชตได้
  • "disabled" - ปิดใช้งาน DM ทั้งหมด
อนุมัติคำขอจับคู่:
openclaw pairing list feishu
openclaw 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" ค่าเริ่มต้นแบบไวลด์การ์ดภายใต้ 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"],
        },
      },
    },
  },
}

รับ ID ของกลุ่ม/ผู้ใช้

ID ของกลุ่ม (chat_id, รูปแบบ: oc_xxx)

เปิดกลุ่มใน Feishu/Lark คลิกไอคอนเมนูที่มุมขวาบน แล้วไปที่ การตั้งค่า ID ของกลุ่ม (chat_id) จะแสดงอยู่ในหน้าการตั้งค่า รับ ID ของกลุ่ม

ID ของผู้ใช้ (open_id, รูปแบบ: ou_xxx)

เริ่ม Gateway ส่ง DM ไปยังบอต แล้วตรวจสอบบันทึก:
openclaw logs --follow
มองหา open_id ในผลลัพธ์บันทึก คุณยังสามารถตรวจสอบคำขอจับคู่ที่รอดำเนินการได้:
openclaw pairing list feishu

คำสั่งทั่วไป

คำสั่งคำอธิบาย
/statusแสดงสถานะบอต
/resetรีเซ็ตเซสชันปัจจุบัน
/modelแสดงหรือสลับโมเดล AI
Feishu/Lark ไม่รองรับเมนูคำสั่งแบบสแลชดั้งเดิม ดังนั้นให้ส่งคำสั่งเหล่านี้เป็นข้อความธรรมดา

การแก้ไขปัญหา

บอตไม่ตอบกลับในแชตกลุ่ม

  1. ตรวจสอบให้แน่ใจว่าเพิ่มบอตเข้าไปในกลุ่มแล้ว
  2. ตรวจสอบให้แน่ใจว่าคุณ @mention บอต (จำเป็นตามค่าเริ่มต้น)
  3. ตรวจสอบว่า groupPolicy ไม่ใช่ "disabled"
  4. ตรวจสอบบันทึก: openclaw logs --follow

บอตไม่ได้รับข้อความ

  1. ตรวจสอบให้แน่ใจว่าบอตเผยแพร่และได้รับการอนุมัติใน Feishu Open Platform / Lark Developer แล้ว
  2. ตรวจสอบให้แน่ใจว่าการสมัครรับเหตุการณ์มี im.message.receive_v1
  3. ตรวจสอบให้แน่ใจว่าเลือก persistent connection (WebSocket) แล้ว
  4. ตรวจสอบให้แน่ใจว่าอนุญาตขอบเขตสิทธิ์ที่จำเป็นทั้งหมดแล้ว
  5. ตรวจสอบให้แน่ใจว่า Gateway กำลังทำงาน: openclaw gateway status
  6. ตรวจสอบบันทึก: openclaw logs --follow

การตั้งค่าด้วย QR ไม่ตอบสนองในแอปมือถือ Feishu

  1. รันการตั้งค่าอีกครั้ง: openclaw channels login --channel feishu
  2. เลือกการตั้งค่าแบบแมนนวล
  3. ใน Feishu Open Platform ให้สร้างแอปที่สร้างเองและคัดลอก App ID กับ App Secret
  4. วางข้อมูลรับรองเหล่านั้นลงในตัวช่วยตั้งค่า

App Secret รั่วไหล

  1. รีเซ็ต App Secret ใน Feishu Open Platform / Lark Developer
  2. อัปเดตค่าใน config ของคุณ
  3. รีสตาร์ท 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 และ deep-merge ทับ config TTS ส่วนกลาง ดังนั้นการตั้งค่า Feishu แบบหลายบอตจึงสามารถเก็บข้อมูลรับรอง provider ที่ใช้ร่วมกันไว้ส่วนกลาง พร้อมแทนที่เฉพาะเสียง โมเดล persona หรือโหมดอัตโนมัติ แยกตามบัญชีได้

ขีดจำกัดข้อความ

  • textChunkLimit - ขนาดชิ้นข้อความขาออก (ค่าเริ่มต้น: 2000 อักขระ)
  • mediaMaxMb - ขีดจำกัดการอัปโหลด/ดาวน์โหลดสื่อ (ค่าเริ่มต้น: 30 MB)

การสตรีม

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 นั้นโดยตรง

การกำหนดเส้นทางหลายเอเจนต์

ใช้ bindings เพื่อกำหนดเส้นทาง DM หรือกลุ่มของ 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" (DM) หรือ "group" (แชตกลุ่ม)
  • match.peer.id: Open ID ของผู้ใช้ (ou_xxx) หรือ ID ของกลุ่ม (oc_xxx)
ดู รับ ID ของกลุ่ม/ผู้ใช้ สำหรับเคล็ดลับการค้นหา

อ้างอิงการกำหนดค่า

การกำหนดค่าแบบเต็ม: การกำหนดค่า 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โฮสต์สำหรับผูก Webhook127.0.0.1
channels.feishu.webhookPortพอร์ตสำหรับผูก Webhook3000
channels.feishu.accounts.<id>.appIdApp ID-
channels.feishu.accounts.<id>.appSecretApp Secret-
channels.feishu.accounts.<id>.domainการเขียนทับโดเมนต่อบัญชีfeishu
channels.feishu.accounts.<id>.ttsการเขียนทับ TTS ต่อบัญชีmessages.tts
channels.feishu.dmPolicyนโยบาย DMallowlist
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 ต่อกลุ่ม; ID ที่ระบุชัดเจนยังอนุญาตให้กลุ่มเข้าได้ในโหมดรายการอนุญาต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

ประเภทข้อความที่รองรับ

รับ

  • ✅ ข้อความ
  • ✅ ข้อความแบบ Rich text (post)
  • ✅ รูปภาพ
  • ✅ ไฟล์
  • ✅ เสียง
  • ✅ วิดีโอ/สื่อ
  • ✅ สติกเกอร์
ข้อความเสียงขาเข้าของ Feishu/Lark จะถูกทำให้เป็นมาตรฐานเป็นตัวยึดตำแหน่งสื่อแทน JSON file_key ดิบ เมื่อกำหนดค่า tools.media.audio แล้ว OpenClaw จะดาวน์โหลดทรัพยากรบันทึกเสียงและเรียกใช้การถอดเสียงร่วมก่อนเทิร์นของ เอเจนต์ เพื่อให้เอเจนต์ได้รับข้อความถอดเสียงพูด หาก Feishu รวม ข้อความถอดเสียงไว้โดยตรงในเพย์โหลดเสียง ข้อความนั้นจะถูกใช้โดยไม่เรียก ASR อีกครั้ง หากไม่มีผู้ให้บริการถอดเสียง เอเจนต์จะยังได้รับ ตัวยึดตำแหน่ง <media:audio> พร้อมไฟล์แนบที่บันทึกไว้ ไม่ใช่เพย์โหลด ทรัพยากร Feishu ดิบ

ส่ง

  • ✅ ข้อความ
  • ✅ รูปภาพ
  • ✅ ไฟล์
  • ✅ เสียง
  • ✅ วิดีโอ/สื่อ
  • ✅ การ์ดแบบอินเทอร์แอกทีฟ (รวมถึงการอัปเดตแบบสตรีม)
  • ⚠️ ข้อความแบบ Rich text (การจัดรูปแบบสไตล์ post; ไม่รองรับความสามารถการสร้างเนื้อหา Feishu/Lark แบบเต็ม)
บับเบิลเสียงแบบเนทีฟของ Feishu/Lark ใช้ประเภทข้อความ audio ของ Feishu และต้องใช้ สื่ออัปโหลด Ogg/Opus (file_type: "opus") สื่อ .opus และ .ogg ที่มีอยู่ จะถูกส่งโดยตรงเป็นเสียงแบบเนทีฟ MP3/WAV/M4A และรูปแบบเสียงอื่นที่น่าจะเป็นเสียง จะถูกแปลงเป็น Ogg/Opus 48kHz ด้วย ffmpeg เฉพาะเมื่อการตอบกลับร้องขอการส่ง แบบเสียงพูด (audioAsVoice / เครื่องมือข้อความ asVoice รวมถึงการตอบกลับบันทึกเสียง TTS) ไฟล์แนบ MP3 ทั่วไปจะยังคงเป็นไฟล์ปกติ หากไม่มี ffmpeg หรือ การแปลงล้มเหลว OpenClaw จะถอยกลับไปใช้ไฟล์แนบและบันทึกเหตุผลลงล็อก

เธรดและการตอบกลับ

  • ✅ การตอบกลับแบบอินไลน์
  • ✅ การตอบกลับในเธรด
  • ✅ การตอบกลับด้วยสื่อยังคงรับรู้เธรดเมื่อกำลังตอบกลับข้อความในเธรด
สำหรับ groupSessionScope: "group_topic" และ "group_topic_sender" กลุ่มหัวข้อ Feishu/Lark แบบเนทีฟจะใช้ thread_id (omt_*) ของอีเวนต์เป็นคีย์เซสชัน หัวข้อแบบมาตรฐาน หากอีเวนต์เริ่มต้นหัวข้อแบบเนทีฟละเว้น thread_id OpenClaw จะเติมข้อมูลจาก Feishu ก่อนกำหนดเส้นทางเทิร์น การตอบกลับกลุ่มปกติที่ OpenClaw แปลงเป็นเธรดจะยังคงใช้ ID ข้อความรากของการตอบกลับ (om_*) เพื่อให้ เทิร์นแรกและเทิร์นติดตามอยู่ในเซสชันเดียวกัน

ที่เกี่ยวข้อง