Platforms overview
แอป Android
ภาพรวมการรองรับ
- บทบาท: แอป Node ร่วม (Android ไม่ได้โฮสต์ Gateway)
- ต้องมี Gateway: ใช่ (เรียกใช้บน macOS, Linux หรือ Windows ผ่าน WSL2)
- การติดตั้ง: Google Play หรือ
OpenClaw-Android.apkจาก GitHub Release ที่รองรับ, เริ่มต้นใช้งาน สำหรับ Gateway จากนั้นดู การจับคู่ - Gateway: คู่มือการดำเนินงาน + การกำหนดค่า
- โปรโตคอล: โปรโตคอล Gateway (Node + ระนาบควบคุม)
การควบคุมระบบ (launchd/systemd) อยู่บนโฮสต์ Gateway — ดู Gateway
เซสชัน Gateway พร้อมกัน
จับคู่ Gateway แต่ละรายการหนึ่งครั้ง จากนั้นเปิด Settings → Gateway เครื่องหมายถูกระบุ Gateway ที่โฟกัส และสวิตช์แต่ละรายการควบคุมว่าเซสชันผู้ควบคุมของ Gateway ที่ไม่ได้โฟกัส จะยังคงเชื่อมต่ออยู่หรือไม่ Gateway ที่เปิดใช้งานจะเชื่อมต่อใหม่อย่างเป็นอิสระ ขณะที่แอปอยู่เบื้องหน้า ดังนั้นการสลับโฟกัสจึงไม่ตัดการเชื่อมต่อรายการอื่น เฉพาะ Gateway ที่โฟกัสเท่านั้นที่เป็นเจ้าของเซสชัน Node ของ Android และ ความสามารถของอุปกรณ์ ซึ่งป้องกันไม่ให้ Gateway หลายรายการสั่งใช้กล้อง ตำแหน่งที่ตั้ง หน้าจอ หรือการแจ้งเตือนบนโทรศัพท์เครื่องเดียวกันพร้อมกัน Android อาจ ระงับการเชื่อมต่อรองหลังจากแอปออกจากเบื้องหน้า
แอปร่วม Wear OS
แอปร่วม Wear OS ใช้การเชื่อมต่อ Gateway ที่ผ่านการตรวจสอบสิทธิ์ของโทรศัพท์ Android ที่จับคู่ไว้ นาฬิกาจะไม่ได้รับหรือจัดเก็บข้อมูลประจำตัวของ Gateway นาฬิกาสามารถเลือกเอเจนต์และเซสชัน อ่านบทสนทนาที่จำกัดขอบเขต ส่งข้อความหรือคำตอบที่ป้อนด้วยเสียง ยกเลิกการรันที่กำลังทำงาน เริ่ม Talk แบบเรียลไทม์ภายในเซสชันที่เลือก และเชื่อมต่อหรือยกเลิกการเชื่อมต่อ Gateway ของโทรศัพท์ที่จับคู่ไว้ นอกจากนี้ยังมีการแจ้งเตือนคำตอบภายในเครื่อง รูปลักษณ์แบบมืดหรือสว่าง และตัวเลือกการอ่านออกเสียงคำตอบโดยอัตโนมัติ การควบคุมเอเจนต์และ Gateway จะเจรจาตามความสามารถเพื่อรองรับการอัปเดตโทรศัพท์และนาฬิกาที่ไม่พร้อมกัน Talk แบบเรียลไทม์จะสตรีมเสียงไมโครโฟนและเสียงเล่นกลับผ่านช่อง Wear OS Data Layer ชั่วคราว และหยุดเมื่อโทรศัพท์ที่เลือก การเชื่อมต่อ Gateway หรือช่องเสียงขาดหาย
ติดตั้งจากภายนอก Google Play
GitHub Releases รุ่นสุดท้ายและรุ่นแก้ไขตามปกติมี OpenClaw-Android.apk แบบสากลและ OpenClaw-Android-SHA256SUMS.txt APK ถูกบิลด์จากแท็กรีลีส ลงนามด้วยคีย์รีลีส OpenClaw Android และมีหลักฐานแหล่งที่มาจาก GitHub Actions
เลือก รีลีส ที่แสดงแอสเซ็ตทั้งสองรายการ จากนั้นดาวน์โหลดและตรวจสอบแท็กนั้นโดยตรงก่อนติดตั้งจากภายนอก:
release_tag=vYYYY.M.PATCHgh release download "$release_tag" \ --repo openclaw/openclaw \ --pattern OpenClaw-Android.apk \ --pattern OpenClaw-Android-SHA256SUMS.txtsha256sum --check OpenClaw-Android-SHA256SUMS.txtgh attestation verify OpenClaw-Android.apk \ --repo openclaw/openclaw \ --signer-workflow openclaw/openclaw/.github/workflows/android-release.yml \ --source-ref "refs/tags/${release_tag}" \ --deny-self-hosted-runnersมิเรอร์และควบคุม Android จาก Mac ระยะไกล
scrcpy มิเรอร์หน้าจอ Android ในหน้าต่าง macOS และ ส่งต่ออินพุตจากแป้นพิมพ์และตัวชี้ผ่าน Android Debug Bridge (ADB) นี่เป็นเวิร์กโฟลว์ ฝั่งผู้ควบคุม ซึ่งแยกจากการเชื่อมต่อ Node ของ OpenClaw มีประโยชน์เมื่ออุปกรณ์ Android และ Mac อยู่คนละตำแหน่งแต่ใช้เครือข่าย Tailscale ส่วนตัวร่วมกัน
ก่อนเริ่มต้น
-
ติดตั้ง Tailscale บนอุปกรณ์ Android และ Mac แล้วเชื่อมต่อทั้งสองเครื่องกับ tailnet เดียวกัน
-
บน Android ให้เปิดใช้ Developer options และ USB debugging Android 16 วาง Wireless debugging ไว้ใต้ Settings > System > Developer options ดู ตัวเลือกสำหรับนักพัฒนา Android
-
ติดตั้ง scrcpy และ ADB บน Mac:
bash brew install scrcpybrew install --cask android-platform-tools -
ให้อุปกรณ์ Android พร้อมใช้งานสำหรับการเชื่อมต่อครั้งแรก Android ต้องอนุมัติคีย์ ADB ของ Mac แต่ละเครื่องก่อนที่ Mac เครื่องนั้นจะควบคุมอุปกรณ์ได้
เปิดใช้ ADB ผ่าน TCP
สำหรับการตั้งค่าเริ่มต้น ให้เชื่อมต่ออุปกรณ์ Android กับคอมพิวเตอร์ที่เชื่อถือได้ผ่าน USB และอนุมัติ พรอมต์การดีบัก จากนั้นรัน:
adb devicesadb tcpip 5555ขณะนี้สามารถถอด USB ได้ หากพอร์ต 5555 หยุดรับฟังหลังจากรีบูตอุปกรณ์หรือรีเซ็ตการดีบัก
ให้ทำขั้นตอนการตั้งค่าภายในเครื่องนี้ซ้ำ Android 11 และใหม่กว่ายังสามารถสร้างความไว้วางใจเริ่มต้นด้วย
Wireless debugging > Pair device with pairing code และ adb pair
อนุญาตเฉพาะ Mac ที่ใช้ควบคุม
Tailnet ที่มีกฎอนุญาตแบบเข้มงวดต้องอนุญาตอย่างชัดเจนให้ Mac ที่ใช้ควบคุมเข้าถึงพอร์ต TCP 5555 บนอุปกรณ์ Android เพิ่มกฎที่จำกัดขอบเขตลงในนโยบาย tailnet โดยแทนที่ที่อยู่ตัวอย่าง ด้วย IP ของ Tailscale แบบคงที่ของอุปกรณ์ทั้งสอง:
{ grants: [ { src: ["<remote-mac-tailnet-ip>"], dst: ["<android-tailnet-ip>"], ip: ["tcp:5555"], }, ],}ดู กฎอนุญาตของ Tailscale สำหรับนามแฝงโฮสต์และ ตัวเลือกอื่น อย่าเปิดพอร์ตนี้ให้อินเทอร์เน็ตสาธารณะหรือเผยแพร่ด้วย Funnel เพราะไคลเอนต์ ADB ที่ได้รับอนุญาตสามารถควบคุมอุปกรณ์ได้อย่างกว้างขวาง
เชื่อมต่อและเริ่มมิเรอร์
บน Mac ระยะไกล:
adb connect <android-tailnet-ip>:5555adb devicesscrcpy --serial <android-tailnet-ip>:5555adb connect ครั้งแรกจาก Mac เครื่องนี้จะแสดงกล่องโต้ตอบการอนุญาตบน Android ปลดล็อกอุปกรณ์
ยืนยันลายนิ้วมือของคีย์ และเลือก Always allow from this computer เฉพาะเมื่อ
เชื่อถือ Mac เครื่องนั้น รายการ adb devices ที่สำเร็จจะลงท้ายด้วย device; unauthorized หมายความว่ายังไม่ได้อนุมัติพรอมต์
บนอุปกรณ์
เมื่อหน้าต่าง scrcpy เปิดขึ้น ให้ใช้งานโดยตรงหรือกำหนดเป็นเป้าหมายด้วยเครื่องมือทำงานอัตโนมัติบนหน้าจอ macOS เช่น Peekaboo scrcpy ส่งภาพหน้าจอและอินพุต ส่วน Tailscale ให้เพียง เส้นทางเครือข่ายส่วนตัว
การแก้ไขปัญหา
Connection timed out: ตรวจสอบกฎอนุญาตของ tailnet สำหรับ TCP 5555 การที่tailscale pingสำเร็จพิสูจน์ได้เพียง ว่าเพียร์เข้าถึงกันได้ ไม่ได้พิสูจน์ว่านโยบายอนุญาตพอร์ต TCP นี้ ทดสอบด้วยnc -vz <android-tailnet-ip> 5555จาก Macunauthorized: ปลดล็อก Android และอนุมัติคีย์ ADB ของ Mac ระยะไกล หรือลบเวิร์กสเตชันเก่า ใต้ Wireless debugging > Paired devices แล้วจับคู่ใหม่Connection refused: เชื่อมต่อภายในเครื่องอีกครั้งแล้วรันadb tcpip 5555อีกครั้ง- มีอุปกรณ์มากกว่าหนึ่งรายการ: ให้คงอาร์กิวเมนต์
--serial <android-tailnet-ip>:5555ที่ระบุไว้อย่างชัดเจน
เมื่อเสร็จแล้ว ให้ปิด scrcpy และยกเลิกการเชื่อมต่อ ADB:
adb disconnect <android-tailnet-ip>:5555คู่มือการดำเนินงานด้านการเชื่อมต่อ
แอป Node ของ Android ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway
Android เชื่อมต่อโดยตรงกับ WebSocket ของ Gateway และใช้การจับคู่อุปกรณ์ (role: node)
สำหรับ Tailscale หรือโฮสต์สาธารณะ Android ต้องใช้ปลายทางที่ปลอดภัย:
- แนะนำ: Tailscale Serve / Funnel พร้อม
https://<magicdns>/wss://<magicdns> - รองรับด้วย: URL ของ Gateway แบบ
wss://อื่นใดที่มีปลายทาง TLS จริง ws://แบบข้อความธรรมดายังคงรองรับบนที่อยู่ LAN ส่วนตัว / โฮสต์.localรวมถึงlocalhost,127.0.0.1และบริดจ์อีมูเลเตอร์ Android (10.0.2.2); การตั้งค่าแบบไม่ใช่ลูปแบ็กจะใช้สิทธิ์ผู้ควบคุมแบบจำกัดโดยอัตโนมัติ
ข้อกำหนดเบื้องต้น
- Gateway กำลังทำงานบนเครื่องอื่น (หรือเข้าถึงได้ผ่าน SSH)
- อุปกรณ์/อีมูเลเตอร์ Android สามารถเข้าถึง WebSocket ของ Gateway ได้:
- อยู่บน LAN เดียวกันพร้อม mDNS/NSD หรือ
- อยู่บน Tailscale tailnet เดียวกันโดยใช้ Wide-Area Bonjour / unicast DNS-SD (ดูด้านล่าง) หรือ
- ระบุโฮสต์/พอร์ตของ Gateway ด้วยตนเอง (ทางเลือกสำรอง)
- การจับคู่ผ่าน tailnet/เครือข่ายมือถือสาธารณะ ไม่ ใช้ปลายทาง IP ของ tailnet แบบดิบ
ws://ให้ใช้ Tailscale Serve หรือ URL แบบwss://อื่นแทน - มี CLI
openclawบนเครื่อง Gateway (หรือผ่าน SSH) เพื่ออนุมัติคำขอจับคู่
1. เริ่ม Gateway
openclaw gateway --port 18789 --verboseตรวจสอบว่าในบันทึกมีข้อความคล้าย:
listening on ws://0.0.0.0:18789
สำหรับการเข้าถึง Android ระยะไกลผ่าน Tailscale ให้เลือกใช้ Serve/Funnel แทนการผูกกับ tailnet โดยตรง:
openclaw gateway --tailscale serveวิธีนี้มอบปลายทาง wss:// / https:// ที่ปลอดภัยให้ Android การตั้งค่า gateway.bind: "tailnet" แบบธรรมดาไม่เพียงพอสำหรับการจับคู่ Android ระยะไกลครั้งแรก เว้นแต่จะยุติ TLS แยกต่างหากด้วย
2. ตรวจสอบการค้นหา (ไม่บังคับ)
จากเครื่อง Gateway:
dns-sd -B _openclaw-gw._tcp local.หมายเหตุการดีบักเพิ่มเติม: Bonjour
หากกำหนดค่าโดเมนการค้นหาแบบบริเวณกว้างไว้ด้วย ให้เปรียบเทียบกับ:
openclaw gateway discover --jsonคำสั่งนี้แสดง local. พร้อมโดเมนแบบบริเวณกว้างที่กำหนดค่าไว้ในการรันครั้งเดียว โดยใช้ปลายทางบริการที่แปลงค่าแล้วแทนคำใบ้จาก TXT เท่านั้น
การค้นหาข้ามเครือข่ายผ่าน unicast DNS-SD
การค้นหา NSD/mDNS ของ Android ไม่สามารถข้ามเครือข่ายได้ หาก Node ของ Android และ Gateway อยู่ต่างเครือข่ายแต่เชื่อมต่อผ่าน Tailscale ให้ใช้ Wide-Area Bonjour / unicast DNS-SD แทน การค้นหาเพียงอย่างเดียวไม่เพียงพอสำหรับการจับคู่ Android ผ่าน tailnet/เครือข่ายสาธารณะ — เส้นทางที่ค้นพบยังต้องมีปลายทางที่ปลอดภัย (wss:// หรือ Tailscale Serve):
- ตั้งค่าโซน DNS-SD (ตัวอย่าง
openclaw.internal.) บนโฮสต์ Gateway และเผยแพร่ระเบียน_openclaw-gw._tcp - กำหนดค่า split DNS ของ Tailscale สำหรับโดเมนที่เลือกให้ชี้ไปยังเซิร์ฟเวอร์ DNS นั้น
รายละเอียดและตัวอย่างการกำหนดค่า CoreDNS: Bonjour
3. เชื่อมต่อจาก Android
ในแอป Android:
- แอปรักษาการเชื่อมต่อ Gateway ให้ทำงานอยู่ผ่าน foreground service (การแจ้งเตือนถาวร)
- เปิดแท็บ Connect
- ใช้โหมด Setup Code หรือ Manual
- หากการค้นหาถูกบล็อก ให้ใช้โฮสต์/พอร์ตแบบกำหนดเองใน Advanced controls สำหรับโฮสต์ LAN ส่วนตัว
ws://ยังคงใช้งานได้ สำหรับโฮสต์ Tailscale/สาธารณะ ให้เปิด TLS และใช้ปลายทางwss:/// Tailscale Serve
หลังจากจับคู่สำเร็จครั้งแรก Android จะเชื่อมต่อใหม่โดยอัตโนมัติเมื่อเปิดแอปไปยัง Gateway ที่จับคู่และใช้งานอยู่ (พยายามอย่างดีที่สุดสำหรับ Gateway ที่ค้นพบ ซึ่งต้องมองเห็นได้บนเครือข่าย)
รหัสตั้งค่าอย่างเป็นทางการจะเชื่อมต่อ Android เป็น Node และให้สิทธิ์ผู้ควบคุม Gateway
แบบเต็มตามค่าเริ่มต้นผ่าน wss:// การตั้งค่า ws:// แบบข้อความธรรมดาที่ไม่ใช่ลูปแบ็ก
จะใช้สิทธิ์แบบจำกัดโดยอัตโนมัติเพื่อความปลอดภัยของ bearer token Settings → Gateway
แสดงสิทธิ์ Full หรือ Limited สำหรับการเชื่อมต่อแบบจำกัด ให้กำหนดค่า
wss:// หรือ Tailscale Serve สร้างรหัสสิทธิ์เต็มใหม่ใน Control UI หรือ
ด้วย openclaw qr จากนั้นสแกนหรือวางรหัสบนหน้านั้นแล้วเชื่อมต่อใหม่ ผู้ควบคุม
ที่ต้องการโปรไฟล์แบบลดสิทธิ์สามารถเลือก Limited access ใน Control UI หรือรัน
openclaw qr --limited
จัดการ Gateway ที่จับคู่แล้ว
แอปเก็บทะเบียนของ Gateway ทุกตัวที่จับคู่ไว้ เพื่อให้สามารถคงเซสชันผู้ควบคุมให้เชื่อมต่ออยู่และเปลี่ยนโฟกัสได้โดยไม่ต้องจับคู่อีกครั้ง:
- Settings → Gateway แสดงรายการ Gateway ที่จับคู่แล้ว โดยทำเครื่องหมายรายการที่กำลังโฟกัส แตะรายการเพื่อโฟกัสรายการนั้น ส่วนเซสชันผู้ปฏิบัติงานอื่นที่เปิดใช้งานยังคงเชื่อมต่ออยู่
- สวิตช์แต่ละตัวควบคุมว่า Gateway ที่ไม่ได้โฟกัสนั้นจะยังคงเชื่อมต่ออยู่หรือไม่ขณะที่แอปอยู่เบื้องหน้า Gateway ที่โฟกัสยังคงเปิดใช้งาน และเป็นเจ้าของการเชื่อมต่อ Node ของโทรศัพท์รวมถึงความสามารถของอุปกรณ์
- แท็บ Connect แสดงตัวสลับแบบรวดเร็วเมื่อจับคู่ Gateway มากกว่าหนึ่งรายการ
- ข้อมูลประจำตัว โทเค็นอุปกรณ์ ความเชื่อถือ TLS ประวัติการแชต และข้อความออฟไลน์ที่เข้าคิว จะจัดเก็บแยกตาม Gateway การเปลี่ยนโฟกัสจะไม่ผสมสถานะระหว่าง Gateway และข้อความที่เข้าคิวขณะออฟไลน์จะส่งเฉพาะไปยัง Gateway ที่ข้อความนั้นเขียนไว้ให้
- Forget จะลบรายการรีจิสทรีของ Gateway พร้อมข้อมูลประจำตัว โทเค็นอุปกรณ์ พิน TLS และแชตที่แคชไว้
บีคอนยืนยันว่ายังออนไลน์
หลังจากเซสชัน Node ที่ผ่านการยืนยันตัวตนเชื่อมต่อแล้ว และเมื่อแอปย้ายไปทำงานเบื้องหลังขณะที่บริการเบื้องหน้ายังคงเชื่อมต่ออยู่ Android จะเรียก node.event ด้วย event: "node.presence.alive" Gateway จะบันทึกข้อมูลนี้เป็น lastSeenAtMs/lastSeenReason ในข้อมูลเมตาของ Node/อุปกรณ์ที่จับคู่แล้ว เฉพาะหลังจากทราบข้อมูลประจำตัวอุปกรณ์ Node ที่ผ่านการยืนยันตัวตนแล้วเท่านั้น
แอปจะนับว่าบันทึกบีคอนสำเร็จเฉพาะเมื่อการตอบกลับจาก Gateway มี handled: true Gateway รุ่นเก่าอาจตอบรับ node.event ด้วย { "ok": true } การตอบกลับดังกล่าวเข้ากันได้ แต่ไม่นับเป็นการอัปเดตเวลาที่พบล่าสุดแบบคงทน
4. อนุมัติการจับคู่ (CLI)
บนเครื่อง Gateway:
openclaw devices listopenclaw devices approve <requestId>openclaw devices reject <requestId>รายละเอียดการจับคู่: การจับคู่
ไม่บังคับ: หาก Node Android เชื่อมต่อจากซับเน็ตที่ควบคุมอย่างเข้มงวดเสมอ คุณสามารถเลือกเปิดใช้การอนุมัติ Node อัตโนมัติในการจับคู่ครั้งแรกด้วย CIDR หรือ IP ที่ระบุอย่างชัดเจน:
{ gateway: { nodes: { pairing: { autoApproveCidrs: ["192.168.1.0/24"], }, }, },}ค่าเริ่มต้นคือปิดใช้งาน การตั้งค่านี้ใช้เฉพาะกับการจับคู่ role: node ใหม่ที่ไม่ได้ขอขอบเขตสิทธิ์ การจับคู่ผู้ปฏิบัติงาน/เบราว์เซอร์ และการเปลี่ยนแปลงบทบาท ขอบเขตสิทธิ์ ข้อมูลเมตา หรือคีย์สาธารณะใด ๆ ยังคงต้องได้รับการอนุมัติด้วยตนเอง
5. ตรวจสอบว่า Node เชื่อมต่อแล้ว
openclaw nodes statusopenclaw gateway call node.list --params "{}"6. แชตและประวัติ
แท็บ Chat ของ Android รองรับการเลือกเซสชัน (ค่าเริ่มต้น main รวมถึงเซสชันอื่นที่มีอยู่):
- ประวัติ:
chat.history(ปรับรูปแบบเพื่อการแสดงผลแล้ว — แท็กคำสั่งแบบอินไลน์ เพย์โหลด XML ของการเรียกเครื่องมือที่เป็นข้อความล้วน (<tool_call>,<function_call>,<tool_calls>,<function_calls>และรูปแบบที่ถูกตัดทอน) และโทเค็นควบคุมโมเดลแบบ ASCII/ความกว้างเต็มที่รั่วออกมาจะถูกนำออก แถวผู้ช่วยที่มีเฉพาะโทเค็นเงียบ เช่นNO_REPLY/no_replyแบบตรงตัวจะถูกละเว้น และแถวที่มีขนาดใหญ่เกินไปอาจถูกแทนที่ด้วยตัวยึดตำแหน่ง) - ส่ง:
chat.send - การส่งแบบคงทน: การส่งทุกครั้ง (ข้อความ รูปภาพที่เลือก และข้อความเสียง) จะถูกบันทึกลงในกล่องขาออกบนอุปกรณ์แยกตาม Gateway ก่อนพยายามเชื่อมต่อเครือข่าย เพื่อให้การปิดแอปไม่ทำให้ข้อมูลที่ส่งแล้วสูญหาย รายการส่งที่เข้าคิวขณะออฟไลน์จะถูกส่งตามลำดับเมื่อเชื่อมต่อใหม่ โดยใช้คีย์ป้องกันการทำซ้ำที่คงที่ และรายการส่งจะถูกนำออกจากคิวเฉพาะหลังจากเทิร์นปรากฏใน
chat.historyซึ่งเป็นข้อมูลหลักแล้วเท่านั้น การตอบรับเพียงอย่างเดียวไม่ถือเป็นหลักฐานการส่งถึง ผลลัพธ์ที่ไม่ชัดเจน (การตอบรับสูญหาย แอปถูกปิดระหว่างส่ง หรือ Gateway รีสตาร์ตก่อนเขียนทรานสคริปต์) จะแสดงเป็นแถวที่มองเห็นได้พร้อม Retry/Delete อย่างชัดเจน แทนการส่งซ้ำโดยอัตโนมัติ คำสั่งแบบสแลชจะไม่เล่นซ้ำอัตโนมัติหลังเชื่อมต่อใหม่ แต่จะพักไว้เพื่อให้ลองใหม่อย่างชัดเจน คิวมีขีดจำกัด (50 ข้อความและข้อมูลไฟล์แนบ 48 MB ต่อ Gateway) และแถวที่ยังไม่ได้ส่งจะหมดอายุหลัง 48 ชั่วโมง ร่างในช่องเขียนที่ไม่เคยส่งจะไม่คงอยู่เมื่อกระบวนการสิ้นสุด - การอัปเดตแบบพุช (พยายามให้ดีที่สุด):
chat.subscribe->event:"chat" - ฟัง: กดข้อความของผู้ช่วยค้างไว้แล้วเลือก Listen เพื่อฟังเสียง เสียงจะเรนเดอร์ผ่าน Gateway
tts.speakโดยใช้ลำดับผู้ให้บริการ TTS ที่กำหนดค่าไว้ และจะใช้ TTS ระบบบนอุปกรณ์เมื่อ Gateway ไม่สามารถเรนเดอร์เสียงได้ การเล่นจะหยุดเมื่อสลับเซสชัน เริ่มแชตใหม่ แอปย้ายไปเบื้องหลัง หรือปิดแชต
7. Canvas และกล้อง
โฮสต์ Canvas ของ Gateway (แนะนำสำหรับเนื้อหาเว็บ)
หากต้องการให้ Node แสดง HTML/CSS/JS จริงที่เอเจนต์สามารถแก้ไขบนดิสก์ได้ ให้ชี้ Node ไปยังโฮสต์ Canvas ของ Gateway
- สร้าง
~/.openclaw/workspace/canvas/index.htmlบนโฮสต์ Gateway - นำทาง Node ไปยังรายการนั้น (LAN):
openclaw nodes invoke --node "<Android Node>" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18789/__openclaw__/canvas/"}'Tailnet (ไม่บังคับ): หากอุปกรณ์ทั้งสองอยู่บน Tailscale ให้ใช้ชื่อ MagicDNS หรือ IP ของ Tailnet แทน .local เช่น http://<gateway-magicdns>:18789/__openclaw__/canvas/
เซิร์ฟเวอร์นี้จะแทรกไคลเอนต์โหลดซ้ำแบบสดลงใน HTML และโหลดซ้ำเมื่อไฟล์เปลี่ยนแปลง Gateway ยังให้บริการ /__openclaw__/a2ui/ ด้วย แต่แอป Android จะถือว่าหน้า A2UI ระยะไกลใช้สำหรับเรนเดอร์เท่านั้น คำสั่ง A2UI ที่ดำเนินการได้จะใช้หน้า A2UI ที่มาพร้อมแอปและแอปเป็นเจ้าของ
คำสั่ง Canvas (เฉพาะเบื้องหน้า):
canvas.eval,canvas.snapshot,canvas.navigate(ใช้{"url":""}หรือ{"url":"/"}เพื่อกลับไปยังโครงเริ่มต้นค่าเริ่มต้น)canvas.snapshotส่งคืน{ format, base64 }(ค่าเริ่มต้นformat="jpeg")- A2UI:
canvas.a2ui.push,canvas.a2ui.reset(canvas.a2ui.pushJSONLเป็นนามแฝงเดิม) คำสั่งเหล่านี้ใช้หน้า A2UI ที่มาพร้อมแอปและแอปเป็นเจ้าของสำหรับการเรนเดอร์ที่ดำเนินการได้
คำสั่งกล้อง (เฉพาะเบื้องหน้า ต้องมีสิทธิ์): camera.snap (jpg), camera.clip (mp4) ดูพารามิเตอร์และตัวช่วย CLI ที่ Node กล้อง
8. เสียงและชุดคำสั่ง Android ที่ขยายเพิ่มเติม
- การนำทางหลักของ Android คือ Home, Chat และ Settings การป้อนข้อมูลด้วยเสียง อยู่ในช่องเขียน Chat โดยไม่มีแท็บ Voice แยกต่างหาก
- แตะไมโครโฟนในช่องเขียนเพื่อใช้การรู้จำเสียงพูดบนอุปกรณ์ ซึ่งจะแทรก ทรานสคริปต์ลงในร่าง กดไมโครโฟนค้างไว้เพื่อบันทึกไฟล์แนบข้อความเสียง UI จะแจ้งเมื่อการรู้จำไม่พร้อมใช้งาน ไม่มีสิทธิ์ เกิดข้อผิดพลาดเนื่องจากไม่ว่าง/เครือข่าย หรือไม่พบเสียงพูด แทนที่จะละทิ้ง ความพยายามนั้นโดยไม่แจ้งให้ทราบ
- เริ่ม Talk แบบต่อเนื่องจากรูปคลื่นใน Chat การป้อนตามคำบอก การบันทึกข้อความเสียง และ Talk เป็นเส้นทางไมโครโฟนที่ใช้พร้อมกันไม่ได้
- Talk Mode จะยกระดับบริการเบื้องหน้าที่มีอยู่จาก
connectedDeviceเป็นconnectedDevice|microphoneก่อนเริ่มจับเสียง แล้วลดระดับเมื่อ Talk Mode หยุด บริการ Node ประกาศFOREGROUND_SERVICE_CONNECTED_DEVICEพร้อมCHANGE_NETWORK_STATE; Android 14+ ยังต้องมีการประกาศFOREGROUND_SERVICE_MICROPHONEการอนุญาตRECORD_AUDIOขณะรันไทม์ และประเภทบริการไมโครโฟนขณะรันไทม์ - โดยค่าเริ่มต้น Android Talk ใช้การรู้จำเสียงพูดแบบเนทีฟ แชตผ่าน Gateway และ
talk.speakผ่านผู้ให้บริการ Talk ของ Gateway ที่กำหนดค่าไว้ ระบบ TTS ภายในเครื่องจะใช้เฉพาะเมื่อtalk.speakไม่พร้อมใช้งาน - Android Talk ใช้รีเลย์ Gateway แบบเรียลไทม์เฉพาะเมื่อ
talk.realtime.modeเป็นrealtimeและtalk.realtime.transportเป็นgateway-relay - Android ไม่ประกาศความสามารถ
voiceWakeใช้การป้อนตามคำบอกใน Chat ข้อความเสียง หรือ Talk สำหรับการป้อนข้อมูลด้วยเสียง - กลุ่มคำสั่ง Android เพิ่มเติม (ความพร้อมใช้งานขึ้นอยู่กับอุปกรณ์ สิทธิ์ และการตั้งค่าของผู้ใช้):
device.status,device.info,device.permissions,device.healthdevice.appsใช้ได้เฉพาะเมื่อเปิดใช้งาน Settings > Phone Capabilities > Installed Apps โดยค่าเริ่มต้นจะแสดงรายการแอปที่มองเห็นได้ใน Launcher (ส่งincludeNonLaunchableเพื่อดูรายการทั้งหมด)notifications.list,notifications.actions(ดู การส่งต่อการแจ้งเตือน ด้านล่าง)photos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
9. ไฟล์พื้นที่ทำงาน (อ่านอย่างเดียว)
ภาพรวม Home มีการ์ด Files สำหรับเรียกดูพื้นที่ทำงานของเอเจนต์ที่ใช้งานอยู่ผ่าน RPC ของ Gateway แบบอ่านอย่างเดียว agents.workspace.list / agents.workspace.get: การไล่ดูไดเรกทอรี การแสดงตัวอย่างข้อความและรูปภาพ และการส่งออกผ่านแผ่นแชร์ของ Android ไม่มีการดำเนินการเขียน และ Gateway จำกัดขนาดของตัวอย่าง
ตรวจสอบการอนุมัติคำสั่ง
การเชื่อมต่อของผู้ปฏิบัติงานที่มี operator.admin หรือการเชื่อมต่อ
operator.approvals ที่จับคู่แล้วและถูก Gateway ระบุเป็นเป้าหมายอย่างชัดเจน สามารถตรวจสอบ
คำขอ exec ที่รอดำเนินการได้ภายใต้ Settings -> Approvals แอปจะโหลด
ระเบียนการอนุมัติที่ Gateway ทำให้ปลอดภัยแล้วก่อนเปิดใช้งานปุ่ม แสดง
คำเตือนด้านความปลอดภัยและตัวเลือกการตัดสินใจที่คำขอนั้นเสนออย่างตรงตัว แล้วส่ง
ID การอนุมัติและชนิดเจ้าของกลับไปยัง Gateway
สถานะการอนุมัติใช้ร่วมกับ Control UI และพื้นผิวแชตที่รองรับ คำตอบแรกที่ยืนยันแล้วจะมีผล Android จะแสดงผลลัพธ์หลักนั้น แม้ว่า พื้นผิวอื่นจะตอบก่อน หากการตอบกลับการแก้ไขสูญหายหรือ Gateway ตัดการเชื่อมต่อ แอปจะล็อกการดำเนินการไว้และอ่านข้อมูลการอนุมัติอีกครั้ง ก่อนเสนอตัวเลือกการตัดสินใจอื่น
Gateway ที่เก่ากว่าวิธีการอนุมัติแบบรวมจะย้อนกลับไปใช้ วิธีเฉพาะสำหรับ exec ที่จัดส่งมา การตรวจสอบรายการที่รอดำเนินการยังคงใช้งานได้ แต่สถานะเทอร์มินัล ที่เก็บรักษาไว้และผลลัพธ์ข้ามพื้นผิวที่ละเอียดขึ้นต้องใช้ Gateway ที่อัปเดตแล้ว
ตอบคำถามของเอเจนต์
Chat แสดงคำถาม Gateway ที่รอดำเนินการเป็นการ์ดแบบเนทีฟสำหรับการเชื่อมต่อของผู้ปฏิบัติงาน
ที่มี operator.questions (หรือ operator.admin) การ์ดรองรับตัวเลือกแบบเลือกหนึ่งรายการและ
หลายรายการ คำอธิบายตัวเลือก คำตอบข้อความอิสระ Other และ
การนับถอยหลังจนหมดอายุ การเชื่อมต่อใหม่จะโหลดคำถามที่รอดำเนินการจาก Gateway อีกครั้ง การ์ด
จะล็อกเมื่ออุปกรณ์นี้ตอบ พื้นผิวอื่นตอบก่อน หรือ
คำถามหมดอายุหรือถูกยกเลิก
จุดเริ่มต้นของผู้ช่วย
Android รองรับการเปิด OpenClaw จากทริกเกอร์ผู้ช่วยของระบบ (Google Assistant) การกดปุ่ม Home ค้างไว้ (หรือทริกเกอร์ ACTION_ASSIST อื่น) จะเปิดแอป การพูดว่า "Hey Google, ask OpenClaw <prompt>" จะตรงกับรูปแบบคำค้นหา App Actions ที่แอปประกาศไว้ และส่งพรอมต์ไปยังช่องเขียนแชตโดยไม่ส่งอัตโนมัติ
ฟังก์ชันนี้ใช้ App Actions ของ Android (ความสามารถ shortcuts.xml) ที่ประกาศในไฟล์ Manifest ของแอป ไม่จำเป็นต้องกำหนดค่าฝั่ง Gateway เนื่องจากแอป Android จะจัดการ Intent ของผู้ช่วยทั้งหมด
การส่งต่อการแจ้งเตือน
Android สามารถส่งต่อการแจ้งเตือนของอุปกรณ์ไปยัง Gateway เป็นรายการ node.event การตั้งค่านี้กำหนดค่า บนอุปกรณ์ ในหน้าการตั้งค่าของแอป ไม่ใช่ในการกำหนดค่า gateway/openclaw.json
| การตั้งค่า | คำอธิบาย |
|---|---|
| ส่งต่อเหตุการณ์การแจ้งเตือน | สวิตช์หลัก ปิดไว้โดยค่าเริ่มต้น โดยต้องให้สิทธิ์เข้าถึง Notification Listener ก่อน |
| ตัวกรองแพ็กเกจ | รายการอนุญาต (ส่งต่อเฉพาะ ID แพ็กเกจที่ระบุ) หรือ รายการบล็อก (ค่าเริ่มต้น: แพ็กเกจทั้งหมด ยกเว้น ID ที่ระบุ) แพ็กเกจของ OpenClaw จะถูกยกเว้นเสมอในโหมดรายการบล็อกเพื่อป้องกันการส่งต่อวนซ้ำ |
| ช่วงเวลางดรบกวน | ช่วงเวลาเริ่มต้น/สิ้นสุดตามเวลาท้องถิ่นในรูปแบบ HH:mm ซึ่งระงับการส่งต่อ ปิดใช้งานไว้โดยค่าเริ่มต้น และเมื่อเปิดใช้งานจะมีค่าเริ่มต้นเป็น 22:00-07:00 |
| จำนวนเหตุการณ์สูงสุด / นาที | ขีดจำกัดอัตราการแจ้งเตือนที่ส่งต่อต่ออุปกรณ์ ค่าเริ่มต้นคือ 20 |
| คีย์เซสชันสำหรับกำหนดเส้นทาง | ไม่บังคับ กำหนดให้เหตุการณ์การแจ้งเตือนที่ส่งต่อเข้าสู่เซสชันที่ระบุ แทนเส้นทางการแจ้งเตือนเริ่มต้นของอุปกรณ์ |
การแจ้งเตือนจาก WhatsApp, WhatsApp Business, Telegram, Telegram X, Discord และ Signal จะถูกยกเว้นเสมอ ข้อความเหล่านี้อยู่ภายใต้เซสชันช่องทาง OpenClaw แบบเนทีฟอยู่แล้ว การส่งต่อการแจ้งเตือน Android เป็นเหตุการณ์ Node แยกต่างหากอาจทำให้การตอบกลับถูกส่งผ่านการสนทนาที่ไม่ถูกต้อง