Regional platforms
LINE
LINE เชื่อมต่อกับ OpenClaw ผ่าน LINE Messaging API โดย Plugin ทำงานเป็นตัวรับ Webhook บน Gateway และใช้โทเค็นการเข้าถึงช่องทางร่วมกับข้อมูลลับของช่องทางเพื่อ ยืนยันตัวตน
สถานะ: Plugin อย่างเป็นทางการ ติดตั้งแยกต่างหาก รองรับข้อความโดยตรง แชตกลุ่ม สื่อ ตำแหน่งที่ตั้ง ข้อความ Flex ข้อความเทมเพลต และการตอบกลับด่วน ไม่รองรับรีแอ็กชันและเธรด
การติดตั้ง
ติดตั้ง LINE ก่อนกำหนดค่าช่องทาง:
openclaw plugins install @openclaw/lineเช็กเอาต์ในเครื่อง (เมื่อเรียกใช้จากรีโพซิทอรี git):
openclaw plugins install ./path/to/local/line-pluginการตั้งค่า
- สร้างบัญชี LINE Developers และเปิด Console: https://developers.line.biz/console/
- สร้าง (หรือเลือก) Provider แล้วเพิ่มช่องทาง Messaging API
- คัดลอก Channel access token และ Channel secret จากการตั้งค่าช่องทาง
- เปิดใช้ Use webhook ในการตั้งค่า Messaging API
- ตั้งค่า URL ของ Webhook เป็นปลายทาง Gateway ของคุณ (ต้องใช้ HTTPS):
https://gateway-host/line/webhookGateway ตอบกลับการตรวจสอบ Webhook ของ LINE (GET) และยืนยันการรับอีเวนต์ขาเข้า
ที่มีลายเซ็น (POST) ทันทีหลังจากตรวจสอบลายเซ็นและเพย์โหลดแล้ว ส่วนการประมวลผล
ของเอเจนต์จะดำเนินต่อแบบอะซิงโครนัส
หากต้องการใช้พาธแบบกำหนดเอง ให้ตั้งค่า channels.line.webhookPath หรือ
channels.line.accounts.<id>.webhookPath และแก้ไข URL ให้สอดคล้องกัน
หมายเหตุด้านความปลอดภัย:
- การตรวจสอบลายเซ็นของ LINE ขึ้นอยู่กับเนื้อหาบอดี (HMAC ของบอดีดิบ) ดังนั้น OpenClaw จึงบังคับใช้ขีดจำกัดขนาดบอดีก่อนการยืนยันตัวตนอย่างเข้มงวด (64 KB) และระยะหมดเวลาในการอ่านก่อนตรวจสอบ
- OpenClaw ประมวลผลอีเวนต์ Webhook จากไบต์คำขอดิบที่ผ่านการตรวจสอบแล้ว โดยจะละเว้นค่า
req.bodyที่ถูกมิดเดิลแวร์ต้นทางแปลง เพื่อรักษาความสมบูรณ์ของลายเซ็น
การกำหนดค่า
การกำหนดค่าขั้นต่ำ:
{ channels: { line: { enabled: true, channelAccessToken: "LINE_CHANNEL_ACCESS_TOKEN", channelSecret: "LINE_CHANNEL_SECRET", dmPolicy: "pairing", }, },}การกำหนดค่าข้อความโดยตรงแบบสาธารณะ:
{ channels: { line: { enabled: true, channelAccessToken: "LINE_CHANNEL_ACCESS_TOKEN", channelSecret: "LINE_CHANNEL_SECRET", dmPolicy: "open", allowFrom: ["*"], }, },}ตัวแปรสภาพแวดล้อม (เฉพาะบัญชีเริ่มต้น):
LINE_CHANNEL_ACCESS_TOKENLINE_CHANNEL_SECRET
ไฟล์โทเค็น/ข้อมูลลับ:
{ channels: { line: { tokenFile: "/path/to/line-token.txt", secretFile: "/path/to/line-secret.txt", }, },}tokenFile และ secretFile ต้องชี้ไปยังไฟล์ปกติ ระบบจะปฏิเสธลิงก์สัญลักษณ์
ค่าการกำหนดค่าแบบอินไลน์มีลำดับความสำคัญเหนือไฟล์ ส่วนตัวแปรสภาพแวดล้อมเป็นทางเลือกสำรองสุดท้ายสำหรับบัญชีเริ่มต้น
หลายบัญชี:
{ channels: { line: { accounts: { marketing: { channelAccessToken: "...", channelSecret: "...", webhookPath: "/line/marketing", }, }, }, },}การควบคุมการเข้าถึง
ข้อความโดยตรงใช้การจับคู่เป็นค่าเริ่มต้น ผู้ส่งที่ไม่รู้จักจะได้รับรหัสจับคู่ และระบบ จะละเว้นข้อความของผู้ส่งเหล่านั้นจนกว่าจะได้รับการอนุมัติ:
openclaw pairing list lineopenclaw pairing approve line <CODE>รายการอนุญาตและนโยบาย:
channels.line.dmPolicy:pairing | allowlist | open | disabled(ค่าเริ่มต้นpairing)channels.line.allowFrom: ID ผู้ใช้ LINE ที่อยู่ในรายการอนุญาตสำหรับข้อความโดยตรง โดยdmPolicy: "open"ต้องใช้["*"]channels.line.groupPolicy:allowlist | open | disabled(ค่าเริ่มต้นallowlist)channels.line.groupAllowFrom: ID ผู้ใช้ LINE ที่อยู่ในรายการอนุญาตสำหรับกลุ่ม- การกำหนดทับเฉพาะกลุ่ม:
channels.line.groups.<groupId>.allowFrom(รวมถึงenabled,requireMention,systemPrompt,skills) - กลุ่มการเข้าถึงของผู้ส่งแบบคงที่สามารถอ้างอิงจาก
allowFrom,groupAllowFromและallowFromเฉพาะกลุ่มด้วยaccessGroup:<name>โปรดดู กลุ่มการเข้าถึง - หมายเหตุขณะทำงาน: หากไม่มี
channels.lineโดยสิ้นเชิง ระบบขณะทำงานจะย้อนกลับไปใช้groupPolicy="allowlist"สำหรับการตรวจสอบกลุ่ม (แม้จะตั้งค่าchannels.defaults.groupPolicyไว้ก็ตาม)
ID ของ LINE แยกแยะตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ID ที่ถูกต้องมีลักษณะดังนี้:
- ผู้ใช้:
U+ อักขระเลขฐานสิบหก 32 ตัว - กลุ่ม:
C+ อักขระเลขฐานสิบหก 32 ตัว - ห้อง:
R+ อักขระเลขฐานสิบหก 32 ตัว
ลักษณะการทำงานของข้อความ
- ข้อความจะถูกแบ่งเป็นส่วนละ 5,000 อักขระ
- ระบบจะนำการจัดรูปแบบ Markdown ออก ส่วนบล็อกโค้ดและตารางจะถูกแปลงเป็นการ์ด Flex เมื่อทำได้
- ระบบจะบัฟเฟอร์การตอบกลับแบบสตรีม โดย LINE จะได้รับส่วนข้อความที่สมบูรณ์พร้อมภาพเคลื่อนไหว การโหลดระหว่างที่เอเจนต์กำลังทำงาน
- การดาวน์โหลดสื่อถูกจำกัดด้วย
channels.line.mediaMaxMb(ค่าเริ่มต้น 10) - สื่อขาเข้าจะถูกบันทึกไว้ที่
~/.openclaw/media/inbound/ก่อนส่งต่อ ให้เอเจนต์ ซึ่งสอดคล้องกับที่เก็บสื่อร่วมที่ Plugin ช่องทางอื่นใช้
ข้อมูลช่องทาง (ข้อความแบบสมบูรณ์)
ใช้ channelData.line เพื่อส่งการตอบกลับด่วน ตำแหน่งที่ตั้ง การ์ด Flex หรือข้อความ
เทมเพลต
{ 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 สำหรับรูปแบบข้อความ Flex ที่กำหนดไว้ล่วงหน้า:
/card info "Welcome" "Thanks for joining!"การรองรับ ACP
LINE รองรับการผูกการสนทนาด้วย ACP (โปรโตคอลการสื่อสารของเอเจนต์):
/acp spawn <agent> --bind hereผูกแชต LINE ปัจจุบันเข้ากับเซสชัน ACP โดยไม่สร้างเธรดย่อย- การผูก ACP ที่กำหนดค่าไว้และเซสชัน ACP ที่ผูกกับการสนทนาและกำลังใช้งาน ทำงานบน LINE ได้เช่นเดียวกับช่องทางการสนทนาอื่น
ดูรายละเอียดที่ เอเจนต์ ACP
สื่อขาออก
Plugin LINE ส่งรูปภาพ วิดีโอ และเสียงผ่านเครื่องมือข้อความของเอเจนต์:
- รูปภาพ: ส่งเป็นข้อความรูปภาพของ LINE โดยรูปภาพตัวอย่างจะใช้ URL ของสื่อเป็นค่าเริ่มต้น
- วิดีโอ: ต้องมีรูปภาพตัวอย่าง ให้ตั้งค่า
channelData.line.previewImageUrlเป็น URL รูปภาพ - เสียง: ส่งเป็นข้อความเสียงของ LINE โดยระยะเวลาเริ่มต้นคือ 60 วินาที เว้นแต่จะตั้งค่า
channelData.line.durationMs
ประเภทของสื่อจะนำมาจาก channelData.line.mediaKind หากมีการตั้งค่า มิฉะนั้นระบบจะอนุมาน
จากตัวเลือก LINE อื่นหรือนามสกุลไฟล์ใน URL โดยใช้รูปภาพเป็นทางเลือกสำรอง
URL สื่อขาออกต้องเป็น URL HTTPS สาธารณะที่มีความยาวไม่เกิน 2,000 อักขระ OpenClaw จะตรวจสอบชื่อโฮสต์ปลายทางก่อนส่ง URL ให้ LINE และปฏิเสธเป้าหมายที่เป็น local loopback, ลิงก์ภายในเครื่อง และเครือข่ายส่วนตัว
การส่งสื่อทั่วไปที่ไม่มีตัวเลือกเฉพาะของ LINE จะใช้เส้นทางรูปภาพ
การแก้ไขปัญหา
- การตรวจสอบ Webhook ล้มเหลว: ตรวจสอบว่า URL ของ Webhook ใช้ HTTPS และ
channelSecretตรงกับ LINE Console - ไม่มีอีเวนต์ขาเข้า: ตรวจสอบว่าพาธของ Webhook ตรงกับ
channels.line.webhookPathและ LINE สามารถเข้าถึง Gateway ได้ - ข้อผิดพลาดในการดาวน์โหลดสื่อ: เพิ่มค่า
channels.line.mediaMaxMbหากสื่อมีขนาดเกิน ขีดจำกัดเริ่มต้น
เนื้อหาที่เกี่ยวข้อง
- ภาพรวมช่องทาง — ช่องทางทั้งหมดที่รองรับ
- การจับคู่ — การยืนยันตัวตนของข้อความโดยตรงและขั้นตอนการจับคู่
- กลุ่ม — ลักษณะการทำงานของแชตกลุ่มและการควบคุมด้วยการกล่าวถึง
- การกำหนดเส้นทางช่องทาง — การกำหนดเส้นทางเซสชันสำหรับข้อความ
- ความปลอดภัย — โมเดลการเข้าถึงและการเสริมความปลอดภัย