Configuration

การจับคู่

"การจับคู่" คือขั้นตอนอนุมัติการเข้าถึงอย่างชัดแจ้งของ OpenClaw ขั้นตอนนี้ใช้ในสองส่วน:

  1. การจับคู่ DM (ใครบ้างที่ได้รับอนุญาตให้พูดคุยกับบอต)
  2. การจับคู่ Node (อุปกรณ์/Node ใดบ้างที่ได้รับอนุญาตให้เข้าร่วมเครือข่าย Gateway)

บริบทด้านความปลอดภัย: ความปลอดภัย

1) การจับคู่ DM (การเข้าถึงแชตขาเข้า)

เมื่อกำหนดค่าช่องทางด้วยนโยบาย DM pairing ผู้ส่งที่ไม่รู้จักจะได้รับรหัสสั้น และข้อความของผู้ส่งจะ ไม่ถูกประมวลผล จนกว่าจะได้รับอนุมัติ

นโยบาย DM เริ่มต้นมีคำอธิบายอยู่ใน: ความปลอดภัย

dmPolicy: "open" จะเปิดเป็นสาธารณะต่อเมื่อรายการอนุญาต DM ที่มีผลมี "*" อยู่ด้วย การตั้งค่าและการตรวจสอบความถูกต้องกำหนดให้การกำหนดค่าที่เปิดเป็นสาธารณะต้องมีไวลด์การ์ดดังกล่าว หากสถานะที่มีอยู่ มี open พร้อมรายการ allowFrom ที่ระบุอย่างชัดเจน รันไทม์จะยังคงอนุญาต เฉพาะผู้ส่งเหล่านั้น และการอนุมัติในที่เก็บการจับคู่จะไม่ขยายการเข้าถึง open

รหัสการจับคู่:

  • 8 อักขระ เป็นตัวพิมพ์ใหญ่ และไม่มีอักขระที่ทำให้สับสน (0O1I)
  • หมดอายุหลังจาก 1 ชั่วโมง บอตจะส่งข้อความการจับคู่เฉพาะเมื่อมีการสร้างคำขอใหม่เท่านั้น (โดยประมาณหนึ่งครั้งต่อชั่วโมงต่อผู้ส่ง)
  • คำขอจับคู่ DM ที่รอดำเนินการจำกัดไว้ที่ 3 รายการต่อบัญชีช่องทาง คำขอเพิ่มเติมจะถูกละเว้นจนกว่าจะมีรายการหนึ่งหมดอายุหรือได้รับอนุมัติ

อนุมัติผู้ส่ง

bash
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> จากรายการอนุญาตของช่องทาง:

json5
{  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:

  1. เปิด Control UI แล้วไปที่ Settings → Devices
  2. ในหน้า Devices ให้คลิก Pair mobile device
  3. คงค่า Full access (recommended) ไว้ หรือเลือก Limited access เพื่อไม่รวม การควบคุม Gateway สำหรับผู้ดูแลระบบ
  4. คลิก Create setup code
  5. เปิดแอป OpenClaw บนโทรศัพท์ → SettingsGateway
  6. สแกนคิวอาร์โค้ดหรือวางรหัสตั้งค่า แล้วเชื่อมต่อ

แอป OpenClaw อย่างเป็นทางการสำหรับ iOS และ Android จะได้รับอนุมัติโดยอัตโนมัติเมื่อ ข้อมูลเมตาของรหัสตั้งค่าตรงกัน หาก Pending approval แสดงคำขอ (เช่น สำหรับไคลเอนต์ที่ไม่เป็นทางการหรือข้อมูลเมตาไม่ตรงกัน) ให้ตรวจสอบบทบาทและ ขอบเขตสิทธิ์ก่อนอนุมัติ

ปุ่มจะถูกปิดใช้งานเมื่อเซสชัน Control UI ปัจจุบันไม่มีสิทธิ์เข้าถึง ระดับผู้ดูแลระบบ ในกรณีดังกล่าว ให้ใช้ขั้นตอนอนุมัติผ่าน CLI ด้านล่างจากโฮสต์ Gateway

จับคู่ผ่าน Telegram

หากใช้ Plugin device-pair สามารถจับคู่อุปกรณ์ครั้งแรกผ่าน Telegram ได้ทั้งหมด:

  1. ใน Telegram ให้ส่งข้อความถึงบอตว่า: /pair
  2. บอตจะตอบกลับด้วยสองข้อความ ได้แก่ ข้อความคำแนะนำและข้อความ รหัสตั้งค่า แยกต่างหาก (คัดลอก/วางใน Telegram ได้ง่าย)
  3. เปิดแอป OpenClaw สำหรับ iOS บนโทรศัพท์ → Settings → Gateway
  4. สแกนคิวอาร์โค้ด (/pair qr) หรือวางรหัสตั้งค่าแล้วเชื่อมต่อ
  5. แอปมือถืออย่างเป็นทางการจะเชื่อมต่อโดยอัตโนมัติ หาก /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

bash
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 ที่ระบุอย่างชัดเจน:

json5
{  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
  • ระเบียนการจับคู่เป็นแหล่งข้อมูลจริงถาวรสำหรับบทบาทที่ได้รับอนุมัติ โทเค็น อุปกรณ์ที่ใช้งานอยู่ยังคงถูกจำกัดตามชุดบทบาทที่ได้รับอนุมัตินั้น รายการโทเค็นที่หลงเหลือ นอกบทบาทที่ได้รับอนุมัติจะไม่สร้างสิทธิ์เข้าถึงใหม่

เอกสารที่เกี่ยวข้อง

Was this useful?
On this page

On this page