Regional platforms
บรรทัด
LINE เชื่อมต่อกับ OpenClaw ผ่าน LINE Messaging API โดย Plugin ทำงานเป็นตัวรับ Webhook บน Gateway และใช้ channel access token + channel secret ของคุณสำหรับ การยืนยันตัวตน
สถานะ: Plugin ที่ดาวน์โหลดได้ รองรับข้อความส่วนตัว แชทกลุ่ม สื่อ ตำแหน่งที่ตั้ง ข้อความ Flex ข้อความ template และ quick replies ไม่รองรับ reactions และ threads
ติดตั้ง
ติดตั้ง LINE ก่อนกำหนดค่า channel:
openclaw plugins install @openclaw/lineเช็คเอาต์ในเครื่อง (เมื่อรันจาก git repo):
openclaw plugins install ./path/to/local/line-pluginตั้งค่า
- สร้างบัญชี LINE Developers และเปิด Console: https://developers.line.biz/console/
- สร้าง (หรือเลือก) Provider แล้วเพิ่ม channel ของ Messaging API
- คัดลอก Channel access token และ Channel secret จากการตั้งค่า channel
- เปิดใช้งาน Use webhook ในการตั้งค่า Messaging API
- ตั้งค่า URL ของ Webhook เป็น endpoint ของ Gateway ของคุณ (ต้องใช้ HTTPS):
https://gateway-host/line/webhookGateway ตอบกลับการตรวจสอบ Webhook ของ LINE (GET) และเหตุการณ์ขาเข้า (POST)
หากคุณต้องใช้ path แบบกำหนดเอง ให้ตั้งค่า channels.line.webhookPath หรือ
channels.line.accounts.<id>.webhookPath แล้วอัปเดต URL ให้ตรงกัน
หมายเหตุด้านความปลอดภัย:
- การตรวจสอบ signature ของ LINE ขึ้นอยู่กับ body (HMAC บน raw body) ดังนั้น OpenClaw จึงใช้ขีดจำกัด body ก่อนการยืนยันตัวตนและ timeout แบบเข้มงวดก่อนการตรวจสอบ
- OpenClaw ประมวลผลเหตุการณ์ Webhook จากไบต์คำขอ raw ที่ผ่านการตรวจสอบแล้ว ค่า
req.bodyที่ถูก middleware ต้นทางแปลงจะถูกละเว้นเพื่อความปลอดภัยของความสมบูรณ์ของ signature
กำหนดค่า
การกำหนดค่าขั้นต่ำ:
{ channels: { line: { enabled: true, channelAccessToken: "LINE_CHANNEL_ACCESS_TOKEN", channelSecret: "LINE_CHANNEL_SECRET", dmPolicy: "pairing", }, },}การกำหนดค่า DM สาธารณะ:
{ channels: { line: { enabled: true, channelAccessToken: "LINE_CHANNEL_ACCESS_TOKEN", channelSecret: "LINE_CHANNEL_SECRET", dmPolicy: "open", allowFrom: ["*"], }, },}ตัวแปรแวดล้อม (บัญชีเริ่มต้นเท่านั้น):
LINE_CHANNEL_ACCESS_TOKENLINE_CHANNEL_SECRET
ไฟล์ token/secret:
{ channels: { line: { tokenFile: "/path/to/line-token.txt", secretFile: "/path/to/line-secret.txt", }, },}tokenFile และ secretFile ต้องชี้ไปยังไฟล์ปกติ ไม่ยอมรับ symlinks
หลายบัญชี:
{ channels: { line: { accounts: { marketing: { channelAccessToken: "...", channelSecret: "...", webhookPath: "/line/marketing", }, }, }, },}การควบคุมการเข้าถึง
ข้อความส่วนตัวมีค่าเริ่มต้นเป็นการจับคู่ ผู้ส่งที่ไม่รู้จักจะได้รับรหัสจับคู่ และ ข้อความของพวกเขาจะถูกละเว้นจนกว่าจะได้รับการอนุมัติ
openclaw pairing list lineopenclaw pairing approve line <CODE>allowlists และนโยบาย:
channels.line.dmPolicy:pairing | allowlist | open | disabledchannels.line.allowFrom: LINE user IDs ที่อยู่ใน allowlist สำหรับ DMs;dmPolicy: "open"ต้องใช้["*"]channels.line.groupPolicy:allowlist | open | disabledchannels.line.groupAllowFrom: LINE user IDs ที่อยู่ใน allowlist สำหรับกลุ่ม- การ override รายกลุ่ม:
channels.line.groups.<groupId>.allowFrom - กลุ่มการเข้าถึงผู้ส่งแบบ static สามารถอ้างอิงได้จาก
allowFrom,groupAllowFromและallowFromรายกลุ่มด้วยaccessGroup:<name> - หมายเหตุ runtime: หาก
channels.lineหายไปทั้งหมด runtime จะ fallback เป็นgroupPolicy="allowlist"สำหรับการตรวจสอบกลุ่ม (แม้จะตั้งค่าchannels.defaults.groupPolicyไว้ก็ตาม)
LINE IDs คำนึงถึงตัวพิมพ์ใหญ่เล็ก ID ที่ถูกต้องมีลักษณะดังนี้:
- ผู้ใช้:
U+ อักขระ hex 32 ตัว - กลุ่ม:
C+ อักขระ hex 32 ตัว - ห้อง:
R+ อักขระ hex 32 ตัว
พฤติกรรมของข้อความ
- ข้อความจะถูกแบ่งเป็นช่วงละ 5000 อักขระ
- การจัดรูปแบบ Markdown จะถูกลบออก; code blocks และตารางจะถูกแปลงเป็นการ์ด Flex เมื่อทำได้
- การตอบกลับแบบ streaming จะถูก buffer; LINE จะได้รับ chunk แบบเต็มพร้อมแอนิเมชัน loading ขณะที่ agent ทำงาน
- การดาวน์โหลดสื่อถูกจำกัดโดย
channels.line.mediaMaxMb(ค่าเริ่มต้น 10) - สื่อขาเข้าจะถูกบันทึกไว้ใต้
~/.openclaw/media/inbound/ก่อนส่งต่อ ไปยัง agent ให้ตรงกับ media store ร่วมที่ใช้โดย Plugin channel แบบ bundled อื่นๆ
ข้อมูล channel (ข้อความแบบ rich)
ใช้ channelData.line เพื่อส่ง quick replies, ตำแหน่งที่ตั้ง, การ์ด Flex หรือข้อความ template
{ text: "Here you go", channelData: { line: { quickReplies: ["Status", "Help"], location: { title: "Office", address: "123 Main St", latitude: 35.681236, longitude: 139.767125, }, flexMessage: { altText: "Status card", contents: { /* Flex payload */ }, }, templateMessage: { type: "confirm", text: "Proceed?", confirmLabel: "Yes", confirmData: "yes", cancelLabel: "No", cancelData: "no", }, }, },}Plugin ของ LINE ยังมาพร้อมคำสั่ง /card สำหรับ preset ข้อความ Flex:
/card info "Welcome" "Thanks for joining!"การรองรับ ACP
LINE รองรับ binding การสนทนา ACP (Agent Communication Protocol):
/acp spawn <agent> --bind hereผูกแชท LINE ปัจจุบันกับเซสชัน ACP โดยไม่สร้าง child thread- binding ACP ที่กำหนดค่าไว้และเซสชัน ACP ที่ผูกกับการสนทนาที่ active ทำงานบน LINE ได้เหมือน channel การสนทนาอื่นๆ
ดูรายละเอียดที่ agent ACP
สื่อขาออก
Plugin ของ LINE รองรับการส่งไฟล์รูปภาพ วิดีโอ และเสียงผ่านเครื่องมือข้อความของ agent สื่อจะถูกส่งผ่าน path การส่งเฉพาะของ LINE พร้อมการจัดการ preview และ tracking ที่เหมาะสม:
- รูปภาพ: ส่งเป็นข้อความรูปภาพ LINE พร้อมการสร้าง preview อัตโนมัติ
- วิดีโอ: ส่งพร้อมการจัดการ preview และ content-type แบบชัดเจน
- เสียง: ส่งเป็นข้อความเสียง LINE
URL สื่อขาออกต้องเป็น URL HTTPS สาธารณะ OpenClaw ตรวจสอบ hostname เป้าหมายก่อนส่ง URL ให้ LINE และปฏิเสธเป้าหมายที่เป็น loopback, link-local และเครือข่ายส่วนตัว
การส่งสื่อทั่วไปจะ fallback ไปยัง route ที่รองรับเฉพาะรูปภาพเดิมเมื่อไม่มี path เฉพาะของ LINE
การแก้ไขปัญหา
- การตรวจสอบ Webhook ล้มเหลว: ตรวจสอบให้แน่ใจว่า URL ของ Webhook เป็น HTTPS และ
channelSecretตรงกับ LINE console - ไม่มีเหตุการณ์ขาเข้า: ยืนยันว่า path ของ Webhook ตรงกับ
channels.line.webhookPathและ Gateway สามารถเข้าถึงได้จาก LINE - ข้อผิดพลาดในการดาวน์โหลดสื่อ: เพิ่ม
channels.line.mediaMaxMbหากสื่อเกิน ขีดจำกัดเริ่มต้น
ที่เกี่ยวข้อง
- ภาพรวม Channels — channel ทั้งหมดที่รองรับ
- การจับคู่ — การยืนยันตัวตน DM และขั้นตอนการจับคู่
- กลุ่ม — พฤติกรรมแชทกลุ่มและการควบคุมด้วยการ mention
- การกำหนดเส้นทาง Channel — การกำหนดเส้นทาง session สำหรับข้อความ
- ความปลอดภัย — โมเดลการเข้าถึงและการ hardening