Developer and self-hosted
Synology Chat
สถานะ: ช่องทางข้อความตรงของ bundled plugin โดยใช้ Synology Chat webhooks. Plugin รับข้อความขาเข้าจาก Synology Chat outgoing webhooks และส่งการตอบกลับ ผ่าน Synology Chat incoming webhook.
bundled plugin
Synology Chat จัดส่งเป็น bundled plugin ใน OpenClaw รุ่นปัจจุบัน ดังนั้นบิลด์แบบ แพ็กเกจปกติจึงไม่ต้องติดตั้งแยกต่างหาก
หากคุณใช้บิลด์เก่าหรือการติดตั้งแบบกำหนดเองที่ไม่รวม Synology Chat ให้ติดตั้งด้วยตนเอง:
ติดตั้งจาก checkout ในเครื่อง:
openclaw plugins install ./path/to/local/synology-chat-plugin
รายละเอียด: Plugins
ตั้งค่าอย่างรวดเร็ว
- ตรวจสอบให้แน่ใจว่า Synology Chat plugin พร้อมใช้งาน
- OpenClaw รุ่นแพ็กเกจปัจจุบันรวมไว้แล้ว
- การติดตั้งรุ่นเก่า/แบบกำหนดเองสามารถเพิ่มด้วยตนเองจาก source checkout โดยใช้คำสั่งด้านบน
openclaw onboardตอนนี้แสดง Synology Chat ในรายการตั้งค่าช่องทางเดียวกับopenclaw channels add- การตั้งค่าแบบไม่โต้ตอบ:
openclaw channels add --channel synology-chat --token <token> --url <incoming-webhook-url>
- ใน Synology Chat integrations:
- สร้าง incoming webhook แล้วคัดลอก URL
- สร้าง outgoing webhook พร้อม token ลับของคุณ
- ชี้ URL ของ outgoing webhook ไปยัง OpenClaw gateway ของคุณ:
https://gateway-host/webhook/synologyโดยค่าเริ่มต้น- หรือ
channels.synology-chat.webhookPathแบบกำหนดเองของคุณ
- ตั้งค่าให้เสร็จใน OpenClaw
- แบบมีคำแนะนำ:
openclaw onboard - แบบตรง:
openclaw channels add --channel synology-chat --token <token> --url <incoming-webhook-url>
- แบบมีคำแนะนำ:
- รีสตาร์ท gateway แล้วส่ง DM ไปยังบอต Synology Chat
รายละเอียดการยืนยันตัวตน Webhook:
- OpenClaw ยอมรับ token ของ outgoing webhook จาก
body.tokenจากนั้น?token=...แล้วจึงเป็น headers - รูปแบบ header ที่ยอมรับ:
x-synology-tokenx-webhook-tokenx-openclaw-tokenAuthorization: Bearer <token>
- token ที่ว่างหรือขาดหายจะล้มเหลวแบบปิด
config ขั้นต่ำ:
{
channels: {
"synology-chat": {
enabled: true,
token: "synology-outgoing-token",
incomingUrl: "https://nas.example.com/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=...",
webhookPath: "/webhook/synology",
dmPolicy: "allowlist",
allowedUserIds: ["123456"],
rateLimitPerMinute: 30,
allowInsecureSsl: false,
},
},
}
ตัวแปรสภาพแวดล้อม
สำหรับบัญชีเริ่มต้น คุณสามารถใช้ env vars:
SYNOLOGY_CHAT_TOKENSYNOLOGY_CHAT_INCOMING_URLSYNOLOGY_NAS_HOSTSYNOLOGY_ALLOWED_USER_IDS(คั่นด้วยจุลภาค)SYNOLOGY_RATE_LIMITOPENCLAW_BOT_NAME
ค่า config จะแทนที่ env vars
ไม่สามารถตั้งค่า SYNOLOGY_CHAT_INCOMING_URL จาก workspace .env; ดู ไฟล์ Workspace .env
นโยบาย DM และการควบคุมการเข้าถึง
dmPolicy: "allowlist"เป็นค่าเริ่มต้นที่แนะนำallowedUserIdsรับรายการ (หรือสตริงที่คั่นด้วยจุลภาค) ของ Synology user IDs- ในโหมด
allowlistรายการallowedUserIdsที่ว่างจะถือว่าเป็นการกำหนดค่าผิดพลาด และ webhook route จะไม่เริ่มทำงาน (ใช้dmPolicy: "open"พร้อมallowedUserIds: ["*"]สำหรับอนุญาตทั้งหมด) dmPolicy: "open"อนุญาต DM สาธารณะเฉพาะเมื่อallowedUserIdsมี"*"; หากมีรายการแบบจำกัด เฉพาะผู้ใช้ที่ตรงกันเท่านั้นจึงจะแชตได้dmPolicy: "disabled"บล็อก DM- การผูกผู้รับการตอบกลับจะคงอยู่กับ
user_idแบบตัวเลขที่เสถียรโดยค่าเริ่มต้นchannels.synology-chat.dangerouslyAllowNameMatching: trueคือโหมดความเข้ากันได้กรณีฉุกเฉินที่เปิดใช้การค้นหาชื่อผู้ใช้/ชื่อเล่นที่เปลี่ยนแปลงได้อีกครั้งสำหรับการส่งการตอบกลับ - การอนุมัติการจับคู่ทำงานกับ:
openclaw pairing list synology-chatopenclaw pairing approve synology-chat <CODE>
การส่งขาออก
ใช้ Synology Chat user IDs แบบตัวเลขเป็นเป้าหมาย
ตัวอย่าง:
openclaw message send --channel synology-chat --target 123456 --text "Hello from OpenClaw"
openclaw message send --channel synology-chat --target synology-chat:123456 --text "Hello again"
openclaw message send --channel synology-chat --target synology:123456 --text "Short prefix"
รองรับการส่งสื่อด้วยการส่งไฟล์ตาม URL
URL ไฟล์ขาออกต้องใช้ http หรือ https และเป้าหมายเครือข่ายส่วนตัวหรือที่ถูกบล็อกด้วยเหตุอื่นจะถูกปฏิเสธก่อนที่ OpenClaw จะส่งต่อ URL ไปยัง NAS webhook
หลายบัญชี
รองรับบัญชี Synology Chat หลายบัญชีภายใต้ channels.synology-chat.accounts
แต่ละบัญชีสามารถแทนที่ token, incoming URL, webhook path, นโยบาย DM และขีดจำกัดได้
เซสชันข้อความตรงจะแยกตามบัญชีและผู้ใช้ ดังนั้น user_id แบบตัวเลขเดียวกัน
ในบัญชี Synology สองบัญชีที่ต่างกันจะไม่ใช้สถานะ transcript ร่วมกัน
ให้ webhookPath ที่แตกต่างกันกับแต่ละบัญชีที่เปิดใช้ OpenClaw ตอนนี้ปฏิเสธ path ที่ซ้ำกันแบบตรงทั้งหมด
และปฏิเสธไม่เริ่มบัญชีที่มีชื่อซึ่งรับช่วงเฉพาะ webhook path ร่วมกันในการตั้งค่าแบบหลายบัญชี
หากคุณตั้งใจต้องการการรับช่วงแบบเดิมสำหรับบัญชีที่มีชื่อ ให้ตั้งค่า
dangerouslyAllowInheritedWebhookPath: true ในบัญชีนั้นหรือที่ channels.synology-chat
แต่ path ที่ซ้ำกันแบบตรงทั้งหมดยังคงถูกปฏิเสธแบบล้มเหลวปิด ควรใช้ path ที่ระบุชัดเจนต่อบัญชี
{
channels: {
"synology-chat": {
enabled: true,
accounts: {
default: {
token: "token-a",
incomingUrl: "https://nas-a.example.com/...token=...",
},
alerts: {
token: "token-b",
incomingUrl: "https://nas-b.example.com/...token=...",
webhookPath: "/webhook/synology-alerts",
dmPolicy: "allowlist",
allowedUserIds: ["987654"],
},
},
},
},
}
หมายเหตุด้านความปลอดภัย
- เก็บ
tokenเป็นความลับและหมุนเวียนหากรั่วไหล - คง
allowInsecureSsl: falseไว้ เว้นแต่คุณจะไว้วางใจ cert ของ NAS ในเครื่องที่ลงนามเองอย่างชัดเจน - คำขอ inbound webhook จะได้รับการตรวจสอบ token และจำกัดอัตราต่อผู้ส่ง
- การตรวจสอบ token ที่ไม่ถูกต้องใช้การเปรียบเทียบ secret แบบ constant-time และล้มเหลวแบบปิด
- ควรใช้
dmPolicy: "allowlist"สำหรับ production - ปิด
dangerouslyAllowNameMatchingไว้ เว้นแต่คุณต้องการการส่งการตอบกลับตามชื่อผู้ใช้แบบเดิมอย่างชัดเจน - ปิด
dangerouslyAllowInheritedWebhookPathไว้ เว้นแต่คุณยอมรับความเสี่ยงในการ route ผ่าน shared-path ในการตั้งค่าแบบหลายบัญชีอย่างชัดเจน
การแก้ไขปัญหา
Missing required fields (token, user_id, text):- payload ของ outgoing webhook ขาดหนึ่งในฟิลด์ที่จำเป็น
- หาก Synology ส่ง token ใน headers ให้ตรวจสอบว่า gateway/proxy เก็บ headers เหล่านั้นไว้
Invalid token:- secret ของ outgoing webhook ไม่ตรงกับ
channels.synology-chat.token - คำขอกำลังไปยังบัญชี/webhook path ที่ไม่ถูกต้อง
- reverse proxy ลบ token header ออกก่อนที่คำขอจะถึง OpenClaw
- secret ของ outgoing webhook ไม่ตรงกับ
Rate limit exceeded:- ความพยายามใช้ token ที่ไม่ถูกต้องจำนวนมากเกินไปจากแหล่งเดียวกันอาจล็อกแหล่งนั้นชั่วคราว
- ผู้ส่งที่ยืนยันตัวตนแล้วยังมีขีดจำกัดอัตราข้อความต่อผู้ใช้อีกชุดหนึ่ง
Allowlist is empty. Configure allowedUserIds or use dmPolicy=open with allowedUserIds=["*"].:- เปิดใช้
dmPolicy="allowlist"แล้วแต่ยังไม่ได้กำหนดค่าผู้ใช้
- เปิดใช้
User not authorized:user_idแบบตัวเลขของผู้ส่งไม่อยู่ในallowedUserIds
ที่เกี่ยวข้อง
- ภาพรวมช่องทาง — ช่องทางทั้งหมดที่รองรับ
- การจับคู่ — การยืนยันตัวตน DM และขั้นตอนการจับคู่
- กลุ่ม — พฤติกรรมแชตกลุ่มและการควบคุมด้วยการกล่าวถึง
- การกำหนดเส้นทางช่องทาง — การกำหนดเส้นทางเซสชันสำหรับข้อความ
- ความปลอดภัย — โมเดลการเข้าถึงและการเสริมความปลอดภัย