Regional platforms
บรรทัด
LINE เชื่อมต่อกับ OpenClaw ผ่าน LINE Messaging API โดย Plugin ทำงานเป็นตัวรับ Webhook บน Gateway และใช้ channel access token + channel secret ของคุณสำหรับ การยืนยันตัวตน
สถานะ: 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/webhook
Gateway ตอบกลับการตรวจสอบ Webhook ของ LINE (GET) และอีเวนต์ขาเข้า (POST)
หากคุณต้องการพาธแบบกำหนดเอง ให้ตั้งค่า channels.line.webhookPath หรือ
channels.line.accounts.<id>.webhookPath แล้วอัปเดต URL ให้ตรงกัน
หมายเหตุด้านความปลอดภัย:
- การตรวจสอบลายเซ็นของ LINE ขึ้นกับเนื้อหาบอดี (HMAC บนบอดีดิบ) ดังนั้น OpenClaw จึงใช้ขีดจำกัดบอดีก่อนยืนยันตัวตนและการหมดเวลาอย่างเข้มงวดก่อนตรวจสอบ
- 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 line
openclaw 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 - หมายเหตุรันไทม์: หาก
channels.lineหายไปทั้งหมด รันไทม์จะย้อนกลับไปใช้groupPolicy="allowlist"สำหรับการตรวจสอบกลุ่ม (แม้จะตั้งค่าchannels.defaults.groupPolicyแล้วก็ตาม)
ID ของ LINE แยกตัวพิมพ์ใหญ่-เล็ก ID ที่ถูกต้องมีลักษณะดังนี้:
- ผู้ใช้:
U+ อักขระฐานสิบหก 32 ตัว - กลุ่ม:
C+ อักขระฐานสิบหก 32 ตัว - ห้อง:
R+ อักขระฐานสิบหก 32 ตัว
ลักษณะการทำงานของข้อความ
- ข้อความจะถูกแบ่งเป็นชิ้นที่ 5000 อักขระ
- การจัดรูปแบบ Markdown จะถูกตัดออก บล็อกโค้ดและตารางจะถูกแปลงเป็นการ์ด Flex เมื่อทำได้
- คำตอบแบบสตรีมจะถูกบัฟเฟอร์ LINE จะได้รับชิ้นข้อความเต็มพร้อมแอนิเมชันกำลังโหลด ระหว่างที่ agent ทำงาน
- การดาวน์โหลดสื่อถูกจำกัดโดย
channels.line.mediaMaxMb(ค่าเริ่มต้น 10) - สื่อขาเข้าจะถูกบันทึกไว้ใต้
~/.openclaw/media/inbound/ก่อนส่งต่อ ให้ agent โดยตรงกับที่เก็บสื่อร่วมที่ 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 (Agent Communication Protocol):
/acp spawn <agent> --bind hereผูกแชท LINE ปัจจุบันกับเซสชัน ACP โดยไม่สร้างเธรดย่อย- การผูก ACP ที่กำหนดค่าไว้และเซสชัน ACP ที่ผูกกับการสนทนาและกำลังทำงาน ใช้งานบน LINE ได้เหมือนแชนเนลการสนทนาอื่น
ดูรายละเอียดที่ agent ACP
สื่อขาออก
Plugin LINE รองรับการส่งรูปภาพ วิดีโอ และไฟล์เสียงผ่านเครื่องมือข้อความของ agent สื่อจะถูกส่งผ่านพาธการส่งมอบเฉพาะของ LINE พร้อมการจัดการพรีวิวและการติดตามที่เหมาะสม:
- รูปภาพ: ส่งเป็นข้อความรูปภาพของ LINE พร้อมการสร้างพรีวิวอัตโนมัติ
- วิดีโอ: ส่งพร้อมการจัดการพรีวิวและชนิดเนื้อหาอย่างชัดเจน
- เสียง: ส่งเป็นข้อความเสียงของ LINE
URL สื่อขาออกต้องเป็น URL HTTPS สาธารณะ OpenClaw ตรวจสอบชื่อโฮสต์เป้าหมายก่อนส่ง URL ให้ LINE และปฏิเสธเป้าหมายแบบ loopback, link-local และเครือข่ายส่วนตัว
การส่งสื่อทั่วไปจะย้อนกลับไปใช้เส้นทางรูปภาพเท่านั้นที่มีอยู่ เมื่อไม่มีพาธเฉพาะของ LINE
การแก้ไขปัญหา
- การตรวจสอบ Webhook ล้มเหลว: ตรวจสอบให้แน่ใจว่า URL ของ Webhook เป็น HTTPS และ
channelSecretตรงกับ LINE console - ไม่มีอีเวนต์ขาเข้า: ยืนยันว่าพาธ Webhook ตรงกับ
channels.line.webhookPathและ Gateway เข้าถึงได้จาก LINE - ข้อผิดพลาดในการดาวน์โหลดสื่อ: เพิ่ม
channels.line.mediaMaxMbหากสื่อเกิน ขีดจำกัดเริ่มต้น
ที่เกี่ยวข้อง
- ภาพรวมแชนเนล — แชนเนลที่รองรับทั้งหมด
- การจับคู่ — การยืนยันตัวตน DM และโฟลว์การจับคู่
- กลุ่ม — ลักษณะการทำงานของแชทกลุ่มและการกั้นด้วยการกล่าวถึง
- การกำหนดเส้นทางแชนเนล — การกำหนดเส้นทางเซสชันสำหรับข้อความ
- ความปลอดภัย — โมเดลการเข้าถึงและการเสริมความแข็งแกร่ง