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
ติดตั้งภายนอก Google Play
GitHub Releases รุ่นสมบูรณ์และรุ่นแก้ไขตามปกติประกอบด้วย OpenClaw-Android.apk แบบสากลและ OpenClaw-Android-SHA256SUMS.txt APK นี้บิลด์จากแท็กรีลีส ลงนามด้วยคีย์รีลีส Android ของ OpenClaw และมีหลักฐานแหล่งที่มาจาก 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); การตั้งค่าแบบ non-loopback จะใช้สิทธิ์ผู้ปฏิบัติงานแบบจำกัดโดยอัตโนมัติ
ข้อกำหนดเบื้องต้น
- Gateway ทำงานอยู่บนเครื่องอื่น (หรือเข้าถึงได้ผ่าน SSH)
- อุปกรณ์/โปรแกรมจำลอง Android สามารถเข้าถึง WebSocket ของ Gateway:
- อยู่ใน LAN เดียวกันพร้อม mDNS/NSD หรือ
- อยู่ใน tailnet ของ Tailscale เดียวกันโดยใช้ 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วิธีนี้ทำให้ Android มีปลายทาง wss:// / https:// ที่ปลอดภัย การตั้งค่า gateway.bind: "tailnet" แบบธรรมดาไม่เพียงพอสำหรับการจับคู่ Android ระยะไกลครั้งแรก เว้นแต่จะยุติ TLS แยกต่างหากด้วย
2. ตรวจสอบการค้นหา (ไม่บังคับ)
จากเครื่อง Gateway:
dns-sd -B _openclaw-gw._tcp local.หมายเหตุเพิ่มเติมสำหรับการแก้ไขข้อบกพร่อง: Bonjour
หากกำหนดค่าโดเมนการค้นหาแบบ Wide-Area ไว้ด้วย ให้เปรียบเทียบกับ:
openclaw gateway discover --jsonคำสั่งนี้แสดง local. พร้อมโดเมน Wide-Area ที่กำหนดค่าไว้ในการทำงานครั้งเดียว โดยใช้ปลายทางบริการที่แก้ไขแล้วแทนคำใบ้จาก 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:// แบบข้อความธรรมดาและ non-loopback
จะใช้สิทธิ์แบบจำกัดโดยอัตโนมัติเพื่อความปลอดภัยของ bearer token Settings → Gateway
แสดงสิทธิ์ Full หรือ Limited สำหรับการเชื่อมต่อแบบจำกัด ให้กำหนดค่า
wss:// หรือ Tailscale Serve สร้างโค้ดสิทธิ์เต็มใหม่ใน Control UI หรือ
ด้วย openclaw qr จากนั้นสแกนหรือวางโค้ดบนหน้านั้นแล้วเชื่อมต่อใหม่ ผู้ปฏิบัติงาน
ที่ต้องการโปรไฟล์แบบลดสิทธิ์สามารถเลือก Limited access ใน Control UI หรือเรียกใช้
openclaw qr --limited
Gateway หลายรายการ
แอปเก็บรีจิสทรีของ Gateway ทุกตัวที่เคยจับคู่ไว้ จึงสามารถสลับระหว่าง Gateway เหล่านั้นได้โดยไม่ต้องจับคู่ใหม่:
- Settings -> Gateways แสดงรายการ Gateway ที่จับคู่แล้วพร้อมทำเครื่องหมายรายการที่ใช้งานอยู่ แตะรายการเพื่อสลับ แอปจะยุติเซสชันปัจจุบันและเชื่อมต่อกับ Gateway ที่เลือกใหม่
- แท็บ Connect แสดงตัวสลับด่วนเมื่อจับคู่ Gateway มากกว่าหนึ่งรายการ
- ข้อมูลประจำตัว โทเค็นอุปกรณ์ ความเชื่อถือ TLS ประวัติการแชต และข้อความออฟไลน์ในคิวจะจัดเก็บแยกตาม Gateway การสลับจะไม่ผสมสถานะระหว่าง Gateway และข้อความที่เข้าคิวขณะออฟไลน์จะส่งไปยัง Gateway ที่ข้อความนั้นเขียนไว้ให้เท่านั้น
- Forget จะลบรายการรีจิสทรีของ Gateway พร้อมข้อมูลประจำตัว โทเค็นอุปกรณ์ พิน TLS และแชตที่แคชไว้
บีคอนแจ้งสถานะการทำงาน
หลังจากเซสชัน Node ที่ผ่านการตรวจสอบสิทธิ์เชื่อมต่อแล้ว และเมื่อแอปย้ายไปทำงานเบื้องหลังขณะที่ foreground service ยังคงเชื่อมต่ออยู่ 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. แชตและประวัติ
แท็บแชตของ Android รองรับการเลือกเซสชัน (ค่าเริ่มต้น main รวมถึงเซสชันอื่นที่มีอยู่):
- ประวัติ:
chat.history(ปรับรูปแบบเพื่อการแสดงผลแล้ว — แท็กคำสั่งแบบอินไลน์ เพย์โหลด XML การเรียกใช้เครื่องมือที่เป็นข้อความธรรมดา (<tool_call>,<function_call>,<tool_calls>,<function_calls>และรูปแบบที่ถูกตัดทอน) รวมถึงโทเค็นควบคุมโมเดลแบบ ASCII/อักขระเต็มความกว้างที่รั่วไหลจะถูกลบออก แถวของผู้ช่วยที่มีเฉพาะโทเค็นเงียบ เช่นNO_REPLY/no_replyที่ตรงกันทุกประการจะถูกละเว้น และแถวที่มีขนาดใหญ่เกินไปอาจถูกแทนที่ด้วยตัวยึดตำแหน่ง) - ส่ง:
chat.send - การส่งที่คงทน: ทุกการส่ง (ข้อความ รูปภาพที่เลือก และข้อความเสียง) จะถูกบันทึกลงในกล่องขาออกบนอุปกรณ์ที่แยกตาม Gateway ก่อนพยายามเชื่อมต่อเครือข่าย เพื่อให้การปิดแอปไม่ทำให้อินพุตที่ส่งแล้วสูญหาย รายการส่งที่เข้าคิวขณะออฟไลน์จะถูกส่งตามลำดับเมื่อเชื่อมต่อใหม่โดยใช้คีย์ป้องกันการทำซ้ำที่คงที่ และรายการส่งจะถูกนำออกจากคิวต่อเมื่อเทิร์นนั้นปรากฏใน
chat.historyมาตรฐานแล้วเท่านั้น — การตอบรับเพียงอย่างเดียวไม่ถือเป็นหลักฐานการส่งถึง ผลลัพธ์ที่ไม่แน่นอน (การตอบรับสูญหาย แอปถูกปิดระหว่างส่ง หรือ Gateway รีสตาร์ตก่อนเขียนทรานสคริปต์) จะแสดงเป็นแถวที่มองเห็นได้พร้อมตัวเลือก ลองอีกครั้ง/ลบ อย่างชัดเจนแทนการส่งซ้ำโดยอัตโนมัติ คำสั่งที่ขึ้นต้นด้วยเครื่องหมายทับจะไม่ถูกเล่นซ้ำโดยอัตโนมัติหลังเชื่อมต่อใหม่ แต่จะพักไว้เพื่อให้ลองอีกครั้งอย่างชัดเจน คิวมีขีดจำกัด (50 ข้อความและข้อมูลไฟล์แนบ 48 MB ต่อ Gateway) และแถวที่ยังไม่ได้ส่งจะหมดอายุหลังจาก 48 ชั่วโมง ร่างข้อความในช่องเขียนที่ไม่เคยถูกส่งจะไม่คงอยู่ข้ามการสิ้นสุดโปรเซส - การอัปเดตแบบพุช (พยายามส่งให้ดีที่สุด):
chat.subscribe->event:"chat" - ฟัง: กดข้อความของผู้ช่วยค้างไว้แล้วเลือก ฟัง เพื่อฟังเสียง ระบบจะเรนเดอร์เสียงผ่าน
tts.speakของ Gateway โดยใช้ลำดับผู้ให้บริการ 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 มีโหมดบันทึกเสียงที่ชัดเจนสองโหมด ไมโครโฟน คือเซสชันในแท็บเสียงแบบควบคุมด้วยตนเอง ซึ่งจะส่งแต่ละช่วงหยุดพูดเป็นหนึ่งเทิร์นแชต และหยุดเมื่อแอปออกจากเบื้องหน้าหรือผู้ใช้ออกจากแท็บเสียง พูดคุย คือโหมดพูดคุยอย่างต่อเนื่อง ซึ่งจะฟังต่อไปจนกว่าจะปิดด้วยสวิตช์หรือ Node ตัดการเชื่อมต่อ
- โหมดพูดคุยจะยกระดับบริการเบื้องหน้าที่มีอยู่จาก
connectedDeviceเป็นconnectedDevice|microphoneก่อนเริ่มบันทึกเสียง แล้วลดระดับเมื่อโหมดพูดคุยหยุดลง บริการ Node ประกาศFOREGROUND_SERVICE_CONNECTED_DEVICEพร้อมCHANGE_NETWORK_STATEส่วน Android 14+ ยังกำหนดให้ต้องมีการประกาศFOREGROUND_SERVICE_MICROPHONEการให้สิทธิ์ขณะรันRECORD_AUDIOและประเภทบริการไมโครโฟนขณะรัน - โดยค่าเริ่มต้น การพูดคุยบน Android ใช้การรู้จำเสียงพูดแบบเนทีฟ แชตของ Gateway และ
talk.speakผ่านผู้ให้บริการการพูดคุยของ Gateway ที่กำหนดค่าไว้ ระบบจะใช้ TTS ภายในอุปกรณ์เฉพาะเมื่อtalk.speakไม่พร้อมใช้งานเท่านั้น - การพูดคุยบน Android ใช้รีเลย์ Gateway แบบเรียลไทม์เฉพาะเมื่อ
talk.realtime.modeเป็นrealtimeและtalk.realtime.transportเป็นgateway-relay - Android ไม่ประกาศความสามารถ
voiceWakeให้ใช้ ไมโครโฟน หรือ พูดคุย สำหรับอินพุตเสียง - กลุ่มคำสั่ง Android เพิ่มเติม (ความพร้อมใช้งานขึ้นอยู่กับอุปกรณ์ สิทธิ์ และการตั้งค่าของผู้ใช้):
device.status,device.info,device.permissions,device.healthdevice.appsเฉพาะเมื่อเปิดใช้ การตั้งค่า > ความสามารถของโทรศัพท์ > แอปที่ติดตั้ง โดยค่าเริ่มต้นจะแสดงรายการแอปที่มองเห็นได้ในตัวเปิดแอป (ส่งincludeNonLaunchableเพื่อดูรายการทั้งหมด)notifications.list,notifications.actions(ดู การส่งต่อการแจ้งเตือน ด้านล่าง)photos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
9. ไฟล์ในพื้นที่ทำงาน (อ่านอย่างเดียว)
ภาพรวมหน้าแรกมีการ์ด ไฟล์ สำหรับเรียกดูพื้นที่ทำงานของเอเจนต์ที่ใช้งานอยู่ผ่าน RPC ของ Gateway แบบอ่านอย่างเดียว agents.workspace.list / agents.workspace.get: ไล่ดูไดเรกทอรี แสดงตัวอย่างข้อความและรูปภาพ และส่งออกผ่านแผ่นแชร์ของ Android ไม่มีการดำเนินการเขียน และ Gateway จำกัดขนาดของตัวอย่าง
ตรวจสอบการอนุมัติคำสั่ง
การเชื่อมต่อของผู้ดำเนินการที่มี operator.admin หรือการเชื่อมต่อ
operator.approvals ที่จับคู่แล้วและถูก Gateway ระบุเป็นเป้าหมายอย่างชัดเจน สามารถตรวจสอบ
คำขอเรียกใช้ที่รอดำเนินการได้ใน การตั้งค่า -> การอนุมัติ แอปจะโหลด
ระเบียนการอนุมัติที่ Gateway ผ่านการกรองข้อมูลแล้วก่อนเปิดใช้งานปุ่ม แสดง
คำเตือนด้านความปลอดภัยและตัวเลือกการตัดสินใจที่คำขอนั้นเสนอไว้อย่างครบถ้วน แล้วส่ง
ID การอนุมัติและประเภทเจ้าของกลับไปยัง Gateway
สถานะการอนุมัติใช้ร่วมกับ Control UI และพื้นผิวแชตที่รองรับ คำตอบแรกที่ยืนยันแล้วจะมีผล Android จะแสดงผลลัพธ์มาตรฐานนั้น แม้ว่า พื้นผิวอื่นจะตอบก่อนก็ตาม หากการตอบกลับการแก้ไขสูญหายหรือ Gateway ตัดการเชื่อมต่อ แอปจะล็อกการดำเนินการไว้และอ่านการอนุมัติอีกครั้ง ก่อนเสนอตัวเลือกการตัดสินใจใหม่
Gateway ที่เก่ากว่าวิธีการอนุมัติแบบรวมศูนย์จะย้อนกลับไปใช้ วิธีการเฉพาะสำหรับการเรียกใช้ที่มาพร้อมกับรุ่นนั้น การตรวจสอบรายการที่รอดำเนินการยังคงทำงานได้ แต่สถานะเทอร์มินัลที่เก็บไว้ และผลลัพธ์ข้ามพื้นผิวที่สมบูรณ์ยิ่งขึ้นต้องใช้ Gateway ที่อัปเดตแล้ว
จุดเริ่มต้นของผู้ช่วย
Android รองรับการเปิด OpenClaw จากทริกเกอร์ผู้ช่วยของระบบ (Google Assistant) การกดปุ่มโฮมค้างไว้ (หรือใช้ทริกเกอร์ 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
| การตั้งค่า | คำอธิบาย |
|---|---|
| ส่งต่อเหตุการณ์การแจ้งเตือน | สวิตช์หลัก ปิดโดยค่าเริ่มต้น และต้องให้สิทธิ์เข้าถึงตัวฟังการแจ้งเตือนก่อน |
| ตัวกรองแพ็กเกจ | รายการอนุญาต (ส่งต่อเฉพาะ ID แพ็กเกจที่ระบุ) หรือ รายการบล็อก (ค่าเริ่มต้น: ทุกแพ็กเกจยกเว้น ID ที่ระบุ) แพ็กเกจของ OpenClaw จะถูกยกเว้นเสมอในโหมดรายการบล็อกเพื่อป้องกันวงจรการส่งต่อ |
| ช่วงเวลางดรบกวน | ช่วงเวลาเริ่มต้น/สิ้นสุดตามเวลาท้องถิ่นในรูปแบบ HH:mm ซึ่งระงับการส่งต่อ ปิดใช้งานโดยค่าเริ่มต้น และมีค่าเริ่มต้นเป็น 22:00-07:00 เมื่อเปิดใช้ |
| จำนวนเหตุการณ์สูงสุด / นาที | ขีดจำกัดอัตราการส่งต่อการแจ้งเตือนต่ออุปกรณ์ ค่าเริ่มต้น 20 |
| คีย์เซสชันสำหรับกำหนดเส้นทาง | ไม่บังคับ ปักหมุดเหตุการณ์การแจ้งเตือนที่ส่งต่อไปยังเซสชันที่ระบุ แทนเส้นทางการแจ้งเตือนเริ่มต้นของอุปกรณ์ |
การแจ้งเตือนจาก WhatsApp, WhatsApp Business, Telegram, Telegram X, Discord และ Signal จะถูกยกเว้นเสมอ ข้อความเหล่านี้อยู่ภายใต้เซสชันช่องทางเนทีฟของ OpenClaw อยู่แล้ว การส่งต่อการแจ้งเตือนของ Android เป็นเหตุการณ์ Node แยกต่างหากอาจกำหนดเส้นทางการตอบกลับไปยังการสนทนาที่ไม่ถูกต้อง