Configuration
การจับคู่
"การจับคู่" คือขั้นตอนการอนุมัติการเข้าถึงอย่างชัดเจนของ OpenClaw ใช้ในสองที่:
- การจับคู่ DM (ใครได้รับอนุญาตให้คุยกับบอต)
- การจับคู่ Node (อุปกรณ์/โหนดใดได้รับอนุญาตให้เข้าร่วมเครือข่าย Gateway)
บริบทความปลอดภัย: ความปลอดภัย
1) การจับคู่ DM (การเข้าถึงแชทขาเข้า)
เมื่อช่องทางถูกกำหนดค่าด้วยนโยบาย DM pairing ผู้ส่งที่ไม่รู้จักจะได้รับโค้ดสั้น ๆ และข้อความของพวกเขาจะ ไม่ถูกประมวลผล จนกว่าคุณจะอนุมัติ
นโยบาย DM เริ่มต้นมีเอกสารอยู่ใน: ความปลอดภัย
dmPolicy: "open" จะเป็นสาธารณะก็ต่อเมื่อรายการอนุญาต DM ที่มีผลรวม "*" อยู่ด้วย
การตั้งค่าและการตรวจสอบความถูกต้องต้องใช้ไวลด์การ์ดนี้สำหรับการกำหนดค่าแบบเปิดสาธารณะ หากสถานะที่มีอยู่
มี open พร้อมรายการ allowFrom แบบเจาะจง runtime จะยังคงรับเฉพาะ
ผู้ส่งเหล่านั้น และการอนุมัติใน pairing-store จะไม่ขยายการเข้าถึง open
โค้ดการจับคู่:
- 8 ตัวอักษร เป็นตัวพิมพ์ใหญ่ ไม่มีอักขระที่สับสนได้ (
0O1I) - หมดอายุหลัง 1 ชั่วโมง บอตจะส่งข้อความการจับคู่เฉพาะเมื่อมีการสร้างคำขอใหม่ (ประมาณหนึ่งครั้งต่อชั่วโมงต่อผู้ส่งหนึ่งราย)
- คำขอจับคู่ DM ที่รอดำเนินการถูกจำกัดไว้ที่ 3 รายการต่อช่องทาง โดยค่าเริ่มต้น คำขอเพิ่มเติมจะถูกละเว้นจนกว่ารายการหนึ่งจะหมดอายุหรือได้รับการอนุมัติ
อนุมัติผู้ส่ง
openclaw pairing list telegramopenclaw pairing approve telegram <CODE>หากยังไม่ได้กำหนดค่าเจ้าของคำสั่ง การอนุมัติโค้ดจับคู่ DM จะบูตสแตรป
commands.ownerAllowFrom ไปยังผู้ส่งที่ได้รับอนุมัติด้วย เช่น telegram:123456789
ซึ่งทำให้การตั้งค่าครั้งแรกมีเจ้าของอย่างชัดเจนสำหรับคำสั่งที่มีสิทธิ์พิเศษและพรอมป์อนุมัติ
การ exec หลังจากมีเจ้าของแล้ว การอนุมัติการจับคู่ครั้งถัดไปจะให้เฉพาะการเข้าถึง DM
เท่านั้น และจะไม่เพิ่มเจ้าของเพิ่มเติม
ช่องทางที่รองรับ: discord, feishu, googlechat, imessage, irc, line, matrix, mattermost, msteams, nextcloud-talk, nostr, openclaw-weixin, signal, slack, synology-chat, telegram, twitch, whatsapp, zalo, zalouser
กลุ่มผู้ส่งที่นำกลับมาใช้ได้
ใช้ accessGroups ระดับบนสุดเมื่อชุดผู้ส่งที่เชื่อถือได้เดียวกันควรใช้กับ
หลายช่องทางข้อความ หรือใช้กับทั้งรายการอนุญาต DM และกลุ่ม
กลุ่มแบบคงที่ใช้ type: "message.senders" และถูกอ้างอิงด้วย
accessGroup:<name> จากรายการอนุญาตของช่องทาง:
{ accessGroups: { operators: { type: "message.senders", members: { discord: ["discord:123456789012345678"], telegram: ["987654321"], whatsapp: ["+15551234567"], }, }, }, channels: { telegram: { dmPolicy: "allowlist", allowFrom: ["accessGroup:operators"] }, whatsapp: { groupPolicy: "allowlist", groupAllowFrom: ["accessGroup:operators"] }, },}กลุ่มการเข้าถึงมีเอกสารโดยละเอียดที่นี่: กลุ่มการเข้าถึง
สถานะอยู่ที่ใด
จัดเก็บภายใต้ ~/.openclaw/credentials/:
- คำขอที่รอดำเนินการ:
<channel>-pairing.json - ที่เก็บรายการอนุญาตที่ได้รับอนุมัติ:
- บัญชีเริ่มต้น:
<channel>-allowFrom.json - บัญชีที่ไม่ใช่ค่าเริ่มต้น:
<channel>-<accountId>-allowFrom.json
- บัญชีเริ่มต้น:
พฤติกรรมการกำหนดขอบเขตบัญชี:
- บัญชีที่ไม่ใช่ค่าเริ่มต้นจะอ่าน/เขียนเฉพาะไฟล์รายการอนุญาตในขอบเขตของตน
- บัญชีเริ่มต้นใช้ไฟล์รายการอนุญาตแบบไม่มีขอบเขตระดับช่องทาง
ถือว่าสิ่งเหล่านี้เป็นข้อมูลละเอียดอ่อน (เพราะเป็นตัวควบคุมการเข้าถึงผู้ช่วยของคุณ)
2) การจับคู่อุปกรณ์ Node (Node บน iOS/Android/macOS/headless)
Node เชื่อมต่อกับ Gateway เป็น อุปกรณ์ ด้วย role: node Gateway
จะสร้างคำขอจับคู่อุปกรณ์ที่ต้องได้รับการอนุมัติ
จับคู่ผ่าน Telegram (แนะนำสำหรับ iOS)
หากคุณใช้ Plugin device-pair คุณสามารถจับคู่อุปกรณ์ครั้งแรกทั้งหมดจาก Telegram ได้:
- ใน Telegram ให้ส่งข้อความหาบอตของคุณ:
/pair - บอตจะตอบกลับด้วยสองข้อความ: ข้อความคำแนะนำและข้อความ โค้ดตั้งค่า แยกต่างหาก (คัดลอก/วางใน Telegram ได้ง่าย)
- บนโทรศัพท์ของคุณ เปิดแอป OpenClaw iOS → Settings → Gateway
- สแกนคิวอาร์โค้ดหรือวางโค้ดตั้งค่าแล้วเชื่อมต่อ
- กลับไปที่ Telegram:
/pair pending(ตรวจสอบ ID คำขอ บทบาท และขอบเขต) จากนั้นอนุมัติ
โค้ดตั้งค่าเป็นเพย์โหลด JSON ที่เข้ารหัส base64 ซึ่งประกอบด้วย:
url: URL WebSocket ของ Gateway (ws://...หรือwss://...)bootstrapToken: โทเค็นบูตสแตรปแบบอายุสั้นสำหรับอุปกรณ์เดียว ใช้สำหรับแฮนด์เชคการจับคู่ครั้งแรก
โทเค็นบูตสแตรปนั้นมีโปรไฟล์บูตสแตรปการจับคู่ในตัว:
- โปรไฟล์ตั้งค่าในตัวอนุญาตเฉพาะฐาน QR/โค้ดตั้งค่าใหม่เท่านั้น:
nodeพร้อมการส่งต่อoperatorที่มีขอบเขตจำกัด - โทเค็น
nodeที่ส่งต่อยังคงเป็นscopes: [] - โทเค็น
operatorที่ส่งต่อถูกจำกัดไว้ที่operator.approvals,operator.readและoperator.write operator.adminและoperator.pairingจะไม่ได้รับผ่านบูตสแตรป QR/โค้ดตั้งค่า แต่ต้องใช้การจับคู่ operator ที่อนุมัติแยกต่างหากหรือโฟลว์โทเค็นแยกต่างหาก- การหมุนเวียน/เพิกถอนโทเค็นภายหลังยังคงถูกจำกัดทั้งโดยสัญญาบทบาท ที่อนุมัติของอุปกรณ์และขอบเขต operator ของเซสชันผู้เรียก
ปฏิบัติต่อโค้ดตั้งค่าเหมือนรหัสผ่านระหว่างที่ยังใช้งานได้
สำหรับ Tailscale, สาธารณะ หรือการจับคู่อุปกรณ์มือถือระยะไกลแบบอื่น ให้ใช้ Tailscale Serve/Funnel
หรือ URL Gateway wss:// อื่น โค้ดตั้งค่า ws:// แบบข้อความธรรมดาจะถูกยอมรับเฉพาะ
สำหรับ loopback, ที่อยู่ LAN ส่วนตัว, โฮสต์ Bonjour .local และโฮสต์ Android
emulator เท่านั้น ที่อยู่ CGNAT ของ Tailnet, ชื่อ .ts.net และโฮสต์สาธารณะจะยังคง
ปิดกั้นก่อนออก QR/โค้ดตั้งค่า
อนุมัติอุปกรณ์ Node
openclaw devices listopenclaw devices approve <requestId>openclaw devices reject <requestId>เมื่อการอนุมัติแบบชัดเจนถูกปฏิเสธเพราะเซสชันอุปกรณ์ที่จับคู่ซึ่งเป็นผู้อนุมัติ
ถูกเปิดด้วยขอบเขตสำหรับการจับคู่เท่านั้น CLI จะลองคำขอเดิมอีกครั้งด้วย
operator.admin ซึ่งทำให้อุปกรณ์ที่จับคู่แล้วและมีความสามารถระดับแอดมินสามารถกู้คืนการจับคู่
Control UI/เบราว์เซอร์ใหม่ได้โดยไม่ต้องแก้ไข devices/paired.json ด้วยมือ
Gateway ยังคงตรวจสอบการเชื่อมต่อที่ลองซ้ำ โทเค็นที่ไม่สามารถยืนยันตัวตน
ด้วย operator.admin จะยังคงถูกบล็อก
หากอุปกรณ์เดิมลองใหม่ด้วยรายละเอียด auth ที่ต่างกัน (เช่น
บทบาท/ขอบเขต/คีย์สาธารณะต่างกัน) คำขอที่รอดำเนินการก่อนหน้าจะถูกแทนที่และสร้าง
requestId ใหม่
การอนุมัติ Node อัตโนมัติด้วย trusted-CIDR แบบไม่บังคับ
การจับคู่อุปกรณ์ยังคงเป็นแบบแมนนวลโดยค่าเริ่มต้น สำหรับเครือข่าย Node ที่ควบคุมอย่างเข้มงวด คุณสามารถเลือกใช้การอนุมัติ Node ครั้งแรกอัตโนมัติด้วย CIDR หรือ IP แบบเจาะจงได้:
{ gateway: { nodes: { pairing: { autoApproveCidrs: ["192.168.1.0/24"], }, }, },}สิ่งนี้ใช้เฉพาะกับคำขอจับคู่ role: node ใหม่ที่ไม่มีขอบเขตที่ร้องขอ
เท่านั้น ไคลเอนต์ operator, เบราว์เซอร์, Control UI และ WebChat ยังคงต้องอนุมัติ
ด้วยตนเอง การเปลี่ยนบทบาท ขอบเขต เมตาดาตา และคีย์สาธารณะยังคงต้องอนุมัติ
ด้วยตนเอง
การจัดเก็บสถานะการจับคู่ Node
จัดเก็บภายใต้ ~/.openclaw/devices/:
pending.json(อายุสั้น; คำขอที่รอดำเนินการจะหมดอายุ)paired.json(อุปกรณ์ที่จับคู่แล้ว + โทเค็น)
หมายเหตุ
- API เดิม
node.pair.*(CLI:openclaw nodes pending|approve|reject|remove|rename) เป็น ที่เก็บการจับคู่ที่ Gateway เป็นเจ้าของแยกต่างหาก Node ผ่าน WS ยังคงต้องใช้การจับคู่อุปกรณ์ - ระเบียนการจับคู่คือแหล่งข้อมูลจริงที่คงทนสำหรับบทบาทที่อนุมัติ โทเค็นอุปกรณ์ ที่ใช้งานอยู่ยังคงถูกจำกัดอยู่กับชุดบทบาทที่อนุมัตินั้น รายการโทเค็นหลงเหลือ ที่อยู่นอกบทบาทที่อนุมัติจะไม่สร้างการเข้าถึงใหม่