Configuration
การจับคู่
"การจับคู่" คือขั้นตอนอนุมัติการเข้าถึงอย่างชัดแจ้งของ OpenClaw ขั้นตอนนี้ใช้ในสองส่วน:
- การจับคู่ DM (ใครบ้างที่ได้รับอนุญาตให้พูดคุยกับบอต)
- การจับคู่ Node (อุปกรณ์/Node ใดบ้างที่ได้รับอนุญาตให้เข้าร่วมเครือข่าย Gateway)
บริบทด้านความปลอดภัย: ความปลอดภัย
1) การจับคู่ DM (การเข้าถึงแชตขาเข้า)
เมื่อกำหนดค่าช่องทางด้วยนโยบาย DM pairing ผู้ส่งที่ไม่รู้จักจะได้รับรหัสสั้น และข้อความของผู้ส่งจะ ไม่ถูกประมวลผล จนกว่าจะได้รับอนุมัติ
นโยบาย DM เริ่มต้นมีคำอธิบายอยู่ใน: ความปลอดภัย
dmPolicy: "open" จะเปิดเป็นสาธารณะต่อเมื่อรายการอนุญาต DM ที่มีผลมี "*" อยู่ด้วย
การตั้งค่าและการตรวจสอบความถูกต้องกำหนดให้การกำหนดค่าที่เปิดเป็นสาธารณะต้องมีไวลด์การ์ดดังกล่าว หากสถานะที่มีอยู่
มี open พร้อมรายการ allowFrom ที่ระบุอย่างชัดเจน รันไทม์จะยังคงอนุญาต
เฉพาะผู้ส่งเหล่านั้น และการอนุมัติในที่เก็บการจับคู่จะไม่ขยายการเข้าถึง open
รหัสการจับคู่:
- 8 อักขระ เป็นตัวพิมพ์ใหญ่ และไม่มีอักขระที่ทำให้สับสน (
0O1I) - หมดอายุหลังจาก 1 ชั่วโมง บอตจะส่งข้อความการจับคู่เฉพาะเมื่อมีการสร้างคำขอใหม่เท่านั้น (โดยประมาณหนึ่งครั้งต่อชั่วโมงต่อผู้ส่ง)
- คำขอจับคู่ DM ที่รอดำเนินการจำกัดไว้ที่ 3 รายการต่อบัญชีช่องทาง คำขอเพิ่มเติมจะถูกละเว้นจนกว่าจะมีรายการหนึ่งหมดอายุหรือได้รับอนุมัติ
อนุมัติผู้ส่ง
openclaw pairing list telegramopenclaw pairing approve telegram <CODE>เพิ่ม --notify ในคำสั่งอนุมัติเพื่อแจ้งผู้ร้องขอผ่านช่องทางเดียวกัน ช่องทางที่มีหลายบัญชีรับค่า --account <id>
หากยังไม่ได้กำหนดค่าเจ้าของคำสั่ง การอนุมัติรหัสจับคู่ DM จะเริ่มต้นกำหนด
commands.ownerAllowFrom ให้กับผู้ส่งที่ได้รับอนุมัติด้วย เช่น telegram:123456789
ซึ่งทำให้การตั้งค่าครั้งแรกมีเจ้าของที่ระบุอย่างชัดเจนสำหรับคำสั่งที่มีสิทธิ์พิเศษและพรอมต์
อนุมัติการดำเนินการ หลังจากมีเจ้าของแล้ว การอนุมัติการจับคู่ครั้งต่อไปจะให้สิทธิ์เฉพาะการเข้าถึง DM
เท่านั้น และจะไม่เพิ่มเจ้าของรายอื่น
ช่องทางที่รองรับ (Plugin ช่องทางใด ๆ ที่ติดตั้งและประกาศการจับคู่ โดย Plugin ภายนอก เช่น openclaw-weixin สามารถเพิ่มได้อีก): discord, feishu, googlechat, imessage, irc, line, matrix, mattermost, msteams, nextcloud-talk, nostr, signal, slack, sms, 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"] }, },}คำอธิบายโดยละเอียดของกลุ่มการเข้าถึงอยู่ที่นี่: กลุ่มการเข้าถึง
ตำแหน่งที่จัดเก็บสถานะ
จัดเก็บในฐานข้อมูลสถานะ SQLite ที่ใช้ร่วมกันที่
~/.openclaw/state/openclaw.sqlite:
- คำขอที่รอดำเนินการใน
channel_pairing_requests - ผู้ส่งที่ได้รับอนุมัติใน
channel_pairing_allow_entries
ลักษณะการกำหนดขอบเขตตามบัญชี:
- แต่ละคำขอและผู้ส่งที่ได้รับอนุมัติจะมีคีย์ตามช่องทางและบัญชี
- รันไทม์อ่านเฉพาะแถว SQLite ตามรูปแบบมาตรฐาน และไม่ผสานไฟล์แบบเดิม
Gateway รุ่นเก่าเขียน <channel>-pairing.json และ
<channel>-<accountId>-allowFrom.json ไว้ภายใต้ ~/.openclaw/credentials/
การย้ายข้อมูลเมื่อเริ่มต้นและ openclaw doctor --fix จะนำเข้าไฟล์เหล่านั้นไปยัง SQLite และ
นำไฟล์ต้นทางแต่ละไฟล์ออกหลังจากนำเข้าสำเร็จ ให้ถือว่าฐานข้อมูล SQLite เป็นข้อมูล
ที่ละเอียดอ่อน เนื่องจากแถวเหล่านี้ควบคุมการเข้าถึงผู้ช่วย
2) การจับคู่อุปกรณ์ Node (Node สำหรับ iOS/Android/macOS/แบบไม่มีส่วนติดต่อผู้ใช้)
Node เชื่อมต่อกับ Gateway ในฐานะ อุปกรณ์ ด้วย role: node โดย Gateway
จะสร้างคำขอจับคู่อุปกรณ์ที่ต้องได้รับอนุมัติ
จับคู่จาก Control UI (แนะนำ)
ใช้เซสชัน Control UI ที่เชื่อมต่ออยู่แล้วและมีสิทธิ์เข้าถึง operator.admin:
- เปิด Control UI แล้วไปที่ Settings → Devices
- ในหน้า Devices ให้คลิก Pair mobile device
- คงค่า Full access (recommended) ไว้ หรือเลือก Limited access เพื่อไม่รวม การควบคุม Gateway สำหรับผู้ดูแลระบบ
- คลิก Create setup code
- เปิดแอป OpenClaw บนโทรศัพท์ → Settings → Gateway
- สแกนคิวอาร์โค้ดหรือวางรหัสตั้งค่า แล้วเชื่อมต่อ
แอป OpenClaw อย่างเป็นทางการสำหรับ iOS และ Android จะได้รับอนุมัติโดยอัตโนมัติเมื่อ ข้อมูลเมตาของรหัสตั้งค่าตรงกัน หาก Pending approval แสดงคำขอ (เช่น สำหรับไคลเอนต์ที่ไม่เป็นทางการหรือข้อมูลเมตาไม่ตรงกัน) ให้ตรวจสอบบทบาทและ ขอบเขตสิทธิ์ก่อนอนุมัติ
ปุ่มจะถูกปิดใช้งานเมื่อเซสชัน Control UI ปัจจุบันไม่มีสิทธิ์เข้าถึง ระดับผู้ดูแลระบบ ในกรณีดังกล่าว ให้ใช้ขั้นตอนอนุมัติผ่าน CLI ด้านล่างจากโฮสต์ Gateway
จับคู่ผ่าน Telegram
หากใช้ Plugin device-pair สามารถจับคู่อุปกรณ์ครั้งแรกผ่าน Telegram ได้ทั้งหมด:
- ใน Telegram ให้ส่งข้อความถึงบอตว่า:
/pair - บอตจะตอบกลับด้วยสองข้อความ ได้แก่ ข้อความคำแนะนำและข้อความ รหัสตั้งค่า แยกต่างหาก (คัดลอก/วางใน Telegram ได้ง่าย)
- เปิดแอป OpenClaw สำหรับ iOS บนโทรศัพท์ → Settings → Gateway
- สแกนคิวอาร์โค้ด (
/pair qr) หรือวางรหัสตั้งค่าแล้วเชื่อมต่อ - แอปมือถืออย่างเป็นทางการจะเชื่อมต่อโดยอัตโนมัติ หาก
/pair pendingแสดง คำขอ ให้ตรวจสอบบทบาทและขอบเขตสิทธิ์ก่อนอนุมัติ
รหัสตั้งค่าเป็นเพย์โหลด JSON ที่เข้ารหัสแบบ base64 ซึ่งประกอบด้วย:
url: URL WebSocket ของ Gateway (ws://...หรือwss://...)urls: เส้นทาง LAN/Tailnet ตามลำดับที่แอปมือถือสามารถลองใช้ได้ เมื่อมีbootstrapToken: โทเค็นเริ่มต้นแบบใช้ครั้งเดียวสำหรับแฮนด์เชกการจับคู่ครั้งแรก โดย Gateway จะทำให้หมดอายุหลังจาก 10 นาที
เรียกใช้ /pair cleanup เพื่อทำให้รหัสตั้งค่าที่ยังไม่ได้ใช้เป็นโมฆะเมื่อการจับคู่เสร็จสิ้น
โทเค็นเริ่มต้นดังกล่าวมีโปรไฟล์เริ่มต้นสำหรับการจับคู่ในตัว:
- การตั้งค่า
wss://ที่ปลอดภัย (หรือลูปแบ็กบนโฮสต์เดียวกัน) จะใช้ค่าเริ่มต้นเป็นnodeพร้อมสิทธิ์เข้าถึงoperatorแบบเนทีฟสำหรับมือถืออย่างเต็มรูปแบบ - โทเค็น
nodeที่ส่งต่อไปยังคงเป็นscopes: [] - โทเค็น
operatorที่ส่งต่อตามค่าเริ่มต้นประกอบด้วยoperator.admin,operator.approvals,operator.read,operator.talk.secretsและoperator.write - Limited access ของ Control UI และ
openclaw qr --limitedจะไม่รวมoperator.adminแต่ยังคงขอบเขตสิทธิ์อื่นของผู้ปฏิบัติงานไว้ - การตั้งค่า
ws://ผ่าน LAN แบบข้อความธรรมดาจะใช้โปรไฟล์แบบจำกัดเดียวกันโดยอัตโนมัติ ให้กำหนดค่าwss://หรือ Tailscale Serve และสร้างรหัสใหม่เพื่อรับสิทธิ์เข้าถึงเต็มรูปแบบ - การหมุนเวียน/เพิกถอนโทเค็นภายหลังยังคงถูกจำกัดด้วยทั้งสัญญาบทบาทที่ได้รับอนุมัติ ของอุปกรณ์และขอบเขตสิทธิ์ของผู้ปฏิบัติงานในเซสชันผู้เรียก
ให้ปฏิบัติต่อรหัสตั้งค่าเสมือนรหัสผ่านขณะที่ยังใช้ได้
หน้า Settings → Gateway ของ iOS และ Android จะแสดงสิทธิ์เข้าถึงแบบ Full หรือ Limited
หากต้องการอัปเกรดโทรศัพท์ที่มีสิทธิ์แบบจำกัด ขั้นแรกให้กำหนดค่า wss:// ที่ปลอดภัยหรือ
เส้นทาง Tailscale Serve จากนั้นสร้างรหัสตั้งค่าที่มีสิทธิ์เข้าถึงเต็มรูปแบบใหม่ สแกนหรือวาง
รหัสในหน้าการตั้งค่าดังกล่าว แล้วเชื่อมต่อใหม่
สำหรับการจับคู่มือถือผ่าน Tailscale, สาธารณะ หรือระยะไกลในรูปแบบอื่น ให้ใช้ Tailscale Serve/Funnel
หรือ URL Gateway แบบ wss:// อื่น รหัสตั้งค่า ws:// แบบข้อความธรรมดาจะได้รับการยอมรับเฉพาะ
สำหรับลูปแบ็ก ที่อยู่ LAN ส่วนตัว โฮสต์ Bonjour แบบ .local และโฮสต์
อีมูเลเตอร์ Android เท่านั้น เส้นทางข้อความธรรมดาที่ไม่ใช่ลูปแบ็กจะได้รับสิทธิ์เข้าถึงแบบจำกัด ที่อยู่ CGNAT
ของ Tailnet, ชื่อ .ts.net และโฮสต์สาธารณะจะยังคงปฏิเสธโดยค่าเริ่มต้นก่อน
ออกคิวอาร์โค้ด/รหัสตั้งค่า
สำหรับ URL ตั้งค่า gateway.bind=lan OpenClaw จะตรวจหารูท HTTPS ของ Tailscale Serve
แบบถาวรที่ทำพร็อกซีพอร์ตลูปแบ็กของ Gateway ที่ทำงานอยู่ และประกาศรูทเหล่านั้น
ควบคู่กับเส้นทาง LAN คำสั่งตั้งค่าจะเพิ่มทางเลือกสำรองนี้เฉพาะ
สำหรับ lan เท่านั้น ส่วน custom และ tailnet จะคงเส้นทางที่ประกาศไว้อย่างชัดเจน แอป
iOS จะตรวจสอบเส้นทางที่ประกาศตามลำดับและบันทึกปลายทางแรกที่เข้าถึงได้
อนุมัติอุปกรณ์ Node
openclaw devices listopenclaw devices approve <requestId>openclaw devices reject <requestId>เมื่อการอนุมัติแบบชัดแจ้งถูกปฏิเสธเนื่องจากเซสชันอุปกรณ์ที่จับคู่ซึ่งใช้อนุมัติ
เปิดด้วยขอบเขตสิทธิ์สำหรับการจับคู่เท่านั้น CLI จะลองคำขอเดิมอีกครั้งด้วย
operator.admin ซึ่งทำให้อุปกรณ์ที่จับคู่และรองรับสิทธิ์ผู้ดูแลระบบอยู่แล้วสามารถกู้คืนการจับคู่
Control UI/เบราว์เซอร์ใหม่ได้โดยไม่ต้องแก้ไขที่เก็บการจับคู่ด้วยตนเอง โดย Gateway
ยังคงตรวจสอบความถูกต้องของการเชื่อมต่อที่ลองใหม่ และโทเค็นที่ไม่สามารถยืนยันตัวตน
ด้วย operator.admin จะยังคงถูกบล็อก
หากอุปกรณ์เดิมลองใหม่ด้วยรายละเอียดการยืนยันตัวตนที่ต่างออกไป (เช่น
บทบาท/ขอบเขตสิทธิ์/กุญแจสาธารณะต่างกัน) คำขอที่รอดำเนินการก่อนหน้าจะถูกแทนที่ และระบบจะสร้าง
requestId ใหม่
การอนุมัติ Node อัตโนมัติตาม CIDR ที่เชื่อถือได้แบบไม่บังคับ
การจับคู่อุปกรณ์ยังคงต้องดำเนินการด้วยตนเองตามค่าเริ่มต้น สำหรับเครือข่าย Node ที่ควบคุมอย่างเข้มงวด สามารถเลือกใช้การอนุมัติ Node ครั้งแรกโดยอัตโนมัติด้วย CIDR หรือ IP ที่ระบุอย่างชัดเจน:
{ gateway: { nodes: { pairing: { autoApproveCidrs: ["192.168.1.0/24"], }, }, },}การตั้งค่านี้ใช้เฉพาะกับคำขอจับคู่ role: node ใหม่ที่ไม่มีขอบเขตสิทธิ์
ที่ร้องขอเท่านั้น ไคลเอนต์ผู้ปฏิบัติงาน เบราว์เซอร์ Control UI และ WebChat ยังคงต้องได้รับการ
อนุมัติด้วยตนเอง การเปลี่ยนแปลงบทบาท ขอบเขตสิทธิ์ ข้อมูลเมตา และกุญแจสาธารณะยังคงต้องได้รับการ
อนุมัติด้วยตนเอง
การจัดเก็บสถานะการจับคู่ Node
จัดเก็บในฐานข้อมูลสถานะ SQLite ที่ใช้ร่วมกันที่ ~/.openclaw/state/openclaw.sqlite:
- คำขอจับคู่อุปกรณ์ที่รอดำเนินการ (มีอายุสั้น และหมดอายุหลังจาก 5 นาที)
- อุปกรณ์ที่จับคู่แล้ว + โทเค็น
Gateway รุ่นเก่าเก็บสถานะนี้ไว้ใน ~/.openclaw/devices/*.json โดยไฟล์เหล่านั้นจะถูก
นำเข้าไปยัง SQLite เมื่อ Gateway เริ่มต้น และจัดเก็บถาวรโดยเติมส่วนต่อท้าย .migrated
หมายเหตุ
- API
node.pair.*(CLI:openclaw nodes pending|approve|reject|remove|rename) จัดการ การอนุมัติความสามารถของ Node ที่จัดเก็บในระเบียนอุปกรณ์ที่จับคู่เดียวกัน Node แบบ WS ยังคงต้องจับคู่อุปกรณ์ โปรดดู การจับคู่ Node - ระเบียนการจับคู่เป็นแหล่งข้อมูลจริงถาวรสำหรับบทบาทที่ได้รับอนุมัติ โทเค็น อุปกรณ์ที่ใช้งานอยู่ยังคงถูกจำกัดตามชุดบทบาทที่ได้รับอนุมัตินั้น รายการโทเค็นที่หลงเหลือ นอกบทบาทที่ได้รับอนุมัติจะไม่สร้างสิทธิ์เข้าถึงใหม่