Regional platforms
LINE
LINE เชื่อมต่อกับ OpenClaw ผ่าน LINE Messaging API โดย Plugin ทำงานเป็นตัวรับ Webhook บน Gateway และใช้ channel access token + channel secret ของคุณสำหรับ การยืนยันตัวตน
สถานะ: Plugin ที่ดาวน์โหลดได้ รองรับข้อความส่วนตัว แชตกลุ่ม สื่อ ตำแหน่งที่ตั้ง ข้อความ Flex ข้อความเทมเพลต และการตอบกลับด่วน ไม่รองรับรีแอ็กชันและเธรด
ติดตั้ง
ติดตั้ง LINE ก่อนกำหนดค่าช่องทาง:
openclaw plugins install @openclaw/lineเช็กเอาต์ในเครื่อง (เมื่อรันจาก repo 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 ขึ้นกับเนื้อหา body (HMAC บน raw body) ดังนั้น OpenClaw จึงใช้ขีดจำกัด body ก่อนยืนยันตัวตนและ timeout อย่างเข้มงวดก่อนตรวจสอบ
- OpenClaw ประมวลผลเหตุการณ์ Webhook จากไบต์คำขอดิบที่ตรวจสอบแล้ว ค่า
req.bodyที่ถูกแปลงโดยมิดเดิลแวร์ต้นทางจะถูกละเว้นเพื่อความปลอดภัยด้านความถูกต้องของลายเซ็น
กำหนดค่า
ค่ากำหนดขั้นต่ำ:
{ 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
ไฟล์โทเค็น/ความลับ:
{ channels: { line: { tokenFile: "/path/to/line-token.txt", secretFile: "/path/to/line-secret.txt", }, },}tokenFile และ secretFile ต้องชี้ไปยังไฟล์ปกติ Symlink จะถูกปฏิเสธ
หลายบัญชี:
{ channels: { line: { accounts: { marketing: { channelAccessToken: "...", channelSecret: "...", webhookPath: "/line/marketing", }, }, }, },}การควบคุมการเข้าถึง
ข้อความส่วนตัวมีค่าเริ่มต้นเป็นการจับคู่ ผู้ส่งที่ไม่รู้จักจะได้รับรหัสจับคู่ และข้อความของพวกเขา จะถูกละเว้นจนกว่าจะได้รับอนุมัติ
openclaw pairing list lineopenclaw pairing approve line <CODE>รายการอนุญาตและนโยบาย:
channels.line.dmPolicy:pairing | allowlist | open | disabledchannels.line.allowFrom: ID ผู้ใช้ LINE ที่อยู่ในรายการอนุญาตสำหรับ DM;dmPolicy: "open"ต้องใช้["*"]channels.line.groupPolicy:allowlist | open | disabledchannels.line.groupAllowFrom: ID ผู้ใช้ LINE ที่อยู่ในรายการอนุญาตสำหรับกลุ่ม- การแทนที่รายกลุ่ม:
channels.line.groups.<groupId>.allowFrom - กลุ่มการเข้าถึงผู้ส่งแบบคงที่สามารถอ้างอิงได้จาก
allowFrom,groupAllowFromและallowFromรายกลุ่ม ด้วยaccessGroup:<name> - หมายเหตุรันไทม์: หาก
channels.lineหายไปทั้งหมด รันไทม์จะ fallback ไปที่groupPolicy="allowlist"สำหรับการตรวจสอบกลุ่ม (แม้จะตั้งค่าchannels.defaults.groupPolicyไว้ก็ตาม)
ID ของ LINE แยกตัวพิมพ์ใหญ่-เล็ก ID ที่ถูกต้องมีลักษณะดังนี้:
- ผู้ใช้:
U+ อักขระ hex 32 ตัว - กลุ่ม:
C+ อักขระ hex 32 ตัว - ห้อง:
R+ อักขระ hex 32 ตัว
พฤติกรรมของข้อความ
- ข้อความจะถูกแบ่งเป็นช่วงละ 5000 อักขระ
- การจัดรูปแบบ Markdown จะถูกลบออก; บล็อกโค้ดและตารางจะถูกแปลงเป็นการ์ด Flex เมื่อทำได้
- การตอบกลับแบบสตรีมจะถูกบัฟเฟอร์; LINE ได้รับช่วงข้อความแบบเต็มพร้อมแอนิเมชันโหลด ระหว่างที่เอเจนต์ทำงาน
- การดาวน์โหลดสื่อถูกจำกัดด้วย
channels.line.mediaMaxMb(ค่าเริ่มต้น 10) - สื่อขาเข้าจะถูกบันทึกไว้ใต้
~/.openclaw/media/inbound/ก่อนส่งต่อ ไปยังเอเจนต์ โดยสอดคล้องกับที่เก็บสื่อร่วมที่ Plugins ช่องทางแบบ bundled อื่นใช้
ข้อมูลช่องทาง (ข้อความแบบ rich)
ใช้ 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 (Agent Communication Protocol):
/acp spawn <agent> --bind hereผูกแชต LINE ปัจจุบันกับเซสชัน ACP โดยไม่สร้างเธรดย่อย- การผูก ACP ที่กำหนดค่าไว้และเซสชัน ACP ที่ผูกกับการสนทนาซึ่งกำลังใช้งาน ทำงานบน LINE ได้เหมือนช่องทางการสนทนาอื่น
ดูรายละเอียดที่ เอเจนต์ ACP
สื่อขาออก
Plugin LINE รองรับการส่งรูปภาพ วิดีโอ และไฟล์เสียงผ่านเครื่องมือข้อความของเอเจนต์ สื่อจะถูกส่งผ่านพาธการส่งเฉพาะของ LINE พร้อมการจัดการพรีวิวและการติดตามที่เหมาะสม:
- รูปภาพ: ส่งเป็นข้อความรูปภาพ LINE พร้อมสร้างพรีวิวอัตโนมัติ
- วิดีโอ: ส่งพร้อมการจัดการพรีวิวและ content-type อย่างชัดเจน
- เสียง: ส่งเป็นข้อความเสียง LINE
URL สื่อขาออกต้องเป็น URL HTTPS สาธารณะ OpenClaw ตรวจสอบชื่อโฮสต์เป้าหมายก่อนส่ง URL ให้ LINE และปฏิเสธเป้าหมายแบบ loopback, link-local และเครือข่ายส่วนตัว
การส่งสื่อทั่วไปจะ fallback ไปยังเส้นทางที่มีอยู่สำหรับรูปภาพเท่านั้นเมื่อไม่มีพาธเฉพาะของ LINE
การแก้ไขปัญหา
- การตรวจสอบ Webhook ล้มเหลว: ตรวจสอบให้แน่ใจว่า URL ของ Webhook เป็น HTTPS และ
channelSecretตรงกับ LINE console - ไม่มีเหตุการณ์ขาเข้า: ยืนยันว่าพาธ Webhook ตรงกับ
channels.line.webhookPathและ Gateway สามารถเข้าถึงได้จาก LINE - ข้อผิดพลาดในการดาวน์โหลดสื่อ: เพิ่ม
channels.line.mediaMaxMbหากสื่อเกิน ขีดจำกัดเริ่มต้น
ที่เกี่ยวข้อง
- ภาพรวมช่องทาง — ช่องทางที่รองรับทั้งหมด
- การจับคู่ — การยืนยันตัวตน DM และโฟลว์การจับคู่
- กลุ่ม — พฤติกรรมแชตกลุ่มและการควบคุมด้วยการ mention
- การกำหนดเส้นทางช่องทาง — การกำหนดเส้นทางเซสชันสำหรับข้อความ
- ความปลอดภัย — โมเดลการเข้าถึงและการเสริมความแข็งแกร่ง