---
read_when:
    - การตั้งค่าการควบคุมการเข้าถึง DM
    - การจับคู่ Node iOS/Android ใหม่
    - การตรวจสอบสถานะด้านความปลอดภัยของ OpenClaw
summary: 'ภาพรวมการจับคู่: อนุมัติว่าใครสามารถส่งข้อความโดยตรงถึงคุณได้ + โหนดใดสามารถเข้าร่วมได้'
title: การจับคู่
x-i18n:
    generated_at: "2026-05-10T19:23:31Z"
    model: gpt-5.5
    provider: openai
    source_hash: 0e26bfd98d9de3b834b737be1aa70eb2272267b3cb9cf6d66b030629111a12fc
    source_path: channels/pairing.md
    workflow: 16
---

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

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

บริบทด้านความปลอดภัย: [ความปลอดภัย](/th/gateway/security)

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

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

นโยบาย DM เริ่มต้นมีเอกสารไว้ที่: [ความปลอดภัย](/th/gateway/security)

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

โค้ดจับคู่:

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

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

```bash
openclaw pairing list telegram
openclaw 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` ระดับบนสุดเมื่อชุดผู้ส่งที่เชื่อถือได้เดียวกันควรถูกใช้กับ
หลายช่องทางข้อความ หรือกับทั้ง allowlist ของ DM และกลุ่ม

กลุ่มแบบคงที่ใช้ `type: "message.senders"` และถูกอ้างอิงด้วย
`accessGroup:<name>` จาก allowlist ของช่องทาง:

```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"] },
  },
}
```

กลุ่มสิทธิ์เข้าถึงมีเอกสารโดยละเอียดที่นี่: [กลุ่มสิทธิ์เข้าถึง](/th/channels/access-groups)

### ตำแหน่งที่จัดเก็บสถานะ

จัดเก็บภายใต้ `~/.openclaw/credentials/`:

- คำขอที่รอดำเนินการ: `<channel>-pairing.json`
- ที่เก็บ allowlist ที่อนุมัติแล้ว:
  - บัญชีเริ่มต้น: `<channel>-allowFrom.json`
  - บัญชีที่ไม่ใช่ค่าเริ่มต้น: `<channel>-<accountId>-allowFrom.json`

พฤติกรรมการกำหนดขอบเขตบัญชี:

- บัญชีที่ไม่ใช่ค่าเริ่มต้นอ่าน/เขียนเฉพาะไฟล์ allowlist ที่กำหนดขอบเขตของตน
- บัญชีเริ่มต้นใช้ไฟล์ allowlist แบบไม่กำหนดขอบเขตตามช่องทาง

ให้ถือว่าสิ่งเหล่านี้เป็นข้อมูลอ่อนไหว (เพราะควบคุมสิทธิ์เข้าถึงผู้ช่วยของคุณ)

<Note>
ที่เก็บ allowlist สำหรับการจับคู่ใช้สำหรับการเข้าถึง DM การอนุญาตกลุ่มแยกออกมาต่างหาก
การอนุมัติโค้ดจับคู่ DM ไม่ได้อนุญาตให้ผู้ส่งนั้นรันคำสั่งกลุ่ม
หรือควบคุมบอตในกลุ่มโดยอัตโนมัติ การบูตสแตรปเจ้าของคนแรกเป็นสถานะการกำหนดค่า
แยกต่างหากใน `commands.ownerAllowFrom` และการส่งมอบแชตกลุ่มยังคงทำตาม
allowlist กลุ่มของช่องทาง (เช่น `groupAllowFrom`, `groups` หรือการแทนที่แบบต่อกลุ่ม
หรือต่อหัวข้อ ขึ้นอยู่กับช่องทาง)
</Note>

## 2) การจับคู่อุปกรณ์ Node (Node iOS/Android/macOS/headless)

Node เชื่อมต่อกับ Gateway ในฐานะ **อุปกรณ์** ด้วย `role: node` Gateway
สร้างคำขอจับคู่อุปกรณ์ที่ต้องได้รับการอนุมัติ

### จับคู่ผ่าน Telegram (แนะนำสำหรับ iOS)

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

1. ใน Telegram ให้ส่งข้อความถึงบอตของคุณ: `/pair`
2. บอตตอบกลับด้วยสองข้อความ: ข้อความคำแนะนำและข้อความ **โค้ดตั้งค่า** แยกต่างหาก (คัดลอก/วางใน Telegram ได้ง่าย)
3. บนโทรศัพท์ของคุณ เปิดแอป OpenClaw iOS → Settings → Gateway
4. สแกน QR code หรือวางโค้ดตั้งค่าและเชื่อมต่อ
5. กลับไปที่ Telegram: `/pair pending` (ตรวจสอบ ID คำขอ บทบาท และขอบเขต) จากนั้นอนุมัติ

โค้ดตั้งค่าเป็น payload JSON ที่เข้ารหัส base64 ซึ่งประกอบด้วย:

- `url`: URL WebSocket ของ Gateway (`ws://...` หรือ `wss://...`)
- `bootstrapToken`: โทเค็นบูตสแตรปแบบอายุสั้นสำหรับอุปกรณ์เดียวที่ใช้สำหรับ handshake การจับคู่ครั้งแรก

โทเค็นบูตสแตรปนั้นพาโปรไฟล์บูตสแตรปการจับคู่ในตัวมาด้วย:

- โทเค็น `node` หลักที่ส่งต่อให้ยังคงเป็น `scopes: []`
- โทเค็น `operator` ใด ๆ ที่ส่งต่อให้ยังคงถูกจำกัดอยู่กับ allowlist บูตสแตรป:
  `operator.approvals`, `operator.read`, `operator.talk.secrets`, `operator.write`
- การตรวจสอบ scope ของบูตสแตรปมีคำนำหน้าตามบทบาท ไม่ใช่ pool scope แบบแบนเดียว:
  รายการ scope ของ operator จะตอบสนองเฉพาะคำขอ operator เท่านั้น และบทบาทที่ไม่ใช่ operator
  ยังต้องขอ scope ภายใต้คำนำหน้าบทบาทของตนเอง
- การหมุนเวียน/เพิกถอนโทเค็นในภายหลังยังคงถูกจำกัดทั้งโดยสัญญาบทบาทที่อุปกรณ์ได้รับอนุมัติ
  และ scope operator ของเซสชันผู้เรียก

ปฏิบัติกับโค้ดตั้งค่าเหมือนรหัสผ่านในช่วงที่ยังใช้ได้

สำหรับการจับคู่มือถือผ่าน Tailscale, สาธารณะ หรือระยะไกลอื่น ๆ ให้ใช้ Tailscale Serve/Funnel
หรือ URL Gateway `wss://` อื่น โค้ดตั้งค่าแบบข้อความธรรมดา `ws://` จะยอมรับเฉพาะ
local loopback, ที่อยู่ LAN ส่วนตัว, โฮสต์ Bonjour `.local` และโฮสต์ Android
emulator เท่านั้น ที่อยู่ CGNAT ของ tailnet, ชื่อ `.ts.net` และโฮสต์สาธารณะยังคง
ปิดไม่ให้ผ่านก่อนออก QR/โค้ดตั้งค่า

### อนุมัติอุปกรณ์ Node

```bash
openclaw devices list
openclaw devices approve <requestId>
openclaw devices reject <requestId>
```

เมื่อการอนุมัติแบบชัดเจนถูกปฏิเสธเพราะเซสชันอุปกรณ์ที่จับคู่แล้วซึ่งอนุมัติ
ถูกเปิดด้วย scope สำหรับการจับคู่เท่านั้น CLI จะลองส่งคำขอเดิมซ้ำด้วย
`operator.admin` วิธีนี้ทำให้อุปกรณ์ที่จับคู่แล้วและมีความสามารถระดับ admin สามารถกู้คืนการจับคู่
Control UI/เบราว์เซอร์ใหม่ได้โดยไม่ต้องแก้ไข `devices/paired.json` ด้วยมือ
Gateway ยังคงตรวจสอบการเชื่อมต่อที่ลองซ้ำ โทเค็นที่ไม่สามารถยืนยันตัวตน
ด้วย `operator.admin` จะยังคงถูกบล็อก

หากอุปกรณ์เดิมลองใหม่ด้วยรายละเอียดการยืนยันตัวตนที่ต่างออกไป (เช่น
บทบาท/scope/public key ต่างกัน) คำขอที่รอดำเนินการก่อนหน้าจะถูกแทนที่ และจะมีการสร้าง
`requestId` ใหม่

<Note>
อุปกรณ์ที่จับคู่แล้วจะไม่ได้รับสิทธิ์เข้าถึงที่กว้างขึ้นอย่างเงียบ ๆ หากอุปกรณ์เชื่อมต่อใหม่โดยขอ scope เพิ่มเติมหรือบทบาทที่กว้างขึ้น OpenClaw จะคงการอนุมัติเดิมไว้ตามเดิมและสร้างคำขออัปเกรดที่รอดำเนินการใหม่ ใช้ `openclaw devices list` เพื่อเปรียบเทียบสิทธิ์เข้าถึงที่อนุมัติอยู่ในปัจจุบันกับสิทธิ์เข้าถึงที่เพิ่งร้องขอก่อนที่คุณจะอนุมัติ
</Note>

### การอนุมัติอัตโนมัติสำหรับ Node แบบ trusted-CIDR ที่เป็นตัวเลือก

การจับคู่อุปกรณ์ยังคงเป็นแบบทำเองโดยค่าเริ่มต้น สำหรับเครือข่าย Node ที่ควบคุมอย่างเข้มงวด
คุณสามารถเลือกใช้การอนุมัติอัตโนมัติสำหรับ Node ครั้งแรกด้วย CIDR หรือ IP แบบเจาะจงอย่างชัดเจน:

```json5
{
  gateway: {
    nodes: {
      pairing: {
        autoApproveCidrs: ["192.168.1.0/24"],
      },
    },
  },
}
```

สิ่งนี้ใช้เฉพาะกับคำขอจับคู่ `role: node` ใหม่ที่ไม่มี
scope ที่ร้องขอเท่านั้น ไคลเอนต์ Operator, เบราว์เซอร์, Control UI และ WebChat ยังต้องการ
การอนุมัติด้วยมือ การเปลี่ยนบทบาท, scope, metadata และ public-key ยังต้องการ
การอนุมัติด้วยมือ

### ที่จัดเก็บสถานะการจับคู่ Node

จัดเก็บภายใต้ `~/.openclaw/devices/`:

- `pending.json` (อายุสั้น; คำขอที่รอดำเนินการจะหมดอายุ)
- `paired.json` (อุปกรณ์ที่จับคู่แล้ว + โทเค็น)

### หมายเหตุ

- API เดิม `node.pair.*` (CLI: `openclaw nodes pending|approve|reject|remove|rename`) เป็น
  ที่เก็บการจับคู่แยกต่างหากที่ Gateway เป็นเจ้าของ Node แบบ WS ยังต้องใช้การจับคู่อุปกรณ์
- ระเบียนการจับคู่คือแหล่งความจริงถาวรสำหรับบทบาทที่อนุมัติ โทเค็นอุปกรณ์ที่ใช้งานอยู่
  ยังคงถูกจำกัดอยู่กับชุดบทบาทที่อนุมัตินั้น รายการโทเค็นหลงเหลือ
  นอกบทบาทที่อนุมัติจะไม่สร้างสิทธิ์เข้าถึงใหม่

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

- โมเดลความปลอดภัย + prompt injection: [ความปลอดภัย](/th/gateway/security)
- การอัปเดตอย่างปลอดภัย (รัน doctor): [การอัปเดต](/th/install/updating)
- การกำหนดค่าช่องทาง:
  - Telegram: [Telegram](/th/channels/telegram)
  - WhatsApp: [WhatsApp](/th/channels/whatsapp)
  - Signal: [Signal](/th/channels/signal)
  - iMessage: [iMessage](/th/channels/imessage)
  - Discord: [Discord](/th/channels/discord)
  - Slack: [Slack](/th/channels/slack)
