Platforms overview

แอป Android

ภาพรวมการรองรับ

การควบคุมระบบ (launchd/systemd) อยู่บนโฮสต์ Gateway — ดู Gateway

ติดตั้งภายนอก Google Play

GitHub Releases รุ่นสมบูรณ์และรุ่นแก้ไขตามปกติประกอบด้วย OpenClaw-Android.apk แบบสากลและ OpenClaw-Android-SHA256SUMS.txt APK นี้บิลด์จากแท็กรีลีส ลงนามด้วยคีย์รีลีส Android ของ OpenClaw และมีหลักฐานแหล่งที่มาจาก GitHub Actions

เลือก รีลีส ที่แสดงแอสเซ็ตทั้งสองรายการ จากนั้นดาวน์โหลดและตรวจสอบแท็กนั้นให้ตรงกันก่อนติดตั้งจากภายนอก:

bash
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 เข้ากับคอมพิวเตอร์ที่เชื่อถือได้และอนุมัติ ข้อความแจ้งการแก้ไขข้อบกพร่อง จากนั้นเรียกใช้:

bash
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 แบบคงที่ของอุปกรณ์ทั้งสองเครื่อง:

json5
{  grants: [    {      src: ["<remote-mac-tailnet-ip>"],      dst: ["<android-tailnet-ip>"],      ip: ["tcp:5555"],    },  ],}

ดู การให้สิทธิ์ของ Tailscale สำหรับนามแฝงโฮสต์และตัวเลือก อื่น ๆ อย่าให้สิทธิ์พอร์ตนี้กับอินเทอร์เน็ตสาธารณะหรือเปิดเผยผ่าน Funnel เพราะไคลเอ็นต์ ADB ที่ได้รับอนุญาตสามารถควบคุมอุปกรณ์ได้อย่างกว้างขวาง

เชื่อมต่อและเริ่มมิเรอร์

บน Mac ระยะไกล:

bash
adb connect <android-tailnet-ip>:5555adb devicesscrcpy --serial <android-tailnet-ip>:5555

adb 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 จาก Mac
  • unauthorized: ปลดล็อก Android และอนุมัติคีย์ ADB ของ Mac ระยะไกล หรือลบเวิร์กสเตชันเก่า ใต้ Wireless debugging > Paired devices แล้วจับคู่อีกครั้ง
  • Connection refused: เชื่อมต่อภายในเครื่องอีกครั้งและเรียกใช้ adb tcpip 5555 อีกครั้ง
  • มีอุปกรณ์แสดงมากกว่าหนึ่งเครื่อง: คงอาร์กิวเมนต์ --serial <android-tailnet-ip>:5555 ที่ระบุไว้อย่างชัดเจน

เมื่อใช้งานเสร็จ ให้ปิด scrcpy และตัดการเชื่อมต่อ ADB:

bash
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

bash
openclaw gateway --port 18789 --verbose

ตรวจสอบว่าในบันทึกมีข้อความลักษณะดังนี้:

  • listening on ws://0.0.0.0:18789

สำหรับการเข้าถึง Android ระยะไกลผ่าน Tailscale ให้เลือกใช้ Serve/Funnel แทนการผูกกับ tailnet แบบดิบ:

bash
openclaw gateway --tailscale serve

วิธีนี้ทำให้ Android มีปลายทาง wss:// / https:// ที่ปลอดภัย การตั้งค่า gateway.bind: "tailnet" แบบธรรมดาไม่เพียงพอสำหรับการจับคู่ Android ระยะไกลครั้งแรก เว้นแต่จะยุติ TLS แยกต่างหากด้วย

2. ตรวจสอบการค้นหา (ไม่บังคับ)

จากเครื่อง Gateway:

bash
dns-sd -B _openclaw-gw._tcp local.

หมายเหตุเพิ่มเติมสำหรับการแก้ไขข้อบกพร่อง: Bonjour

หากกำหนดค่าโดเมนการค้นหาแบบ Wide-Area ไว้ด้วย ให้เปรียบเทียบกับ:

bash
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):

  1. ตั้งค่าโซน DNS-SD (ตัวอย่าง openclaw.internal.) บนโฮสต์ Gateway และเผยแพร่ระเบียน _openclaw-gw._tcp
  2. กำหนดค่า 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:

bash
openclaw devices listopenclaw devices approve <requestId>openclaw devices reject <requestId>

รายละเอียดการจับคู่: การจับคู่

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

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

ฟีเจอร์นี้ปิดใช้งานโดยค่าเริ่มต้น และใช้เฉพาะกับการจับคู่ role: node ใหม่ที่ไม่ได้ร้องขอขอบเขตสิทธิ์เท่านั้น การจับคู่ของผู้ดำเนินการ/เบราว์เซอร์ รวมถึงการเปลี่ยนแปลงบทบาท ขอบเขตสิทธิ์ ข้อมูลเมตา หรือคีย์สาธารณะใดๆ ยังคงต้องได้รับการอนุมัติด้วยตนเอง

5. ตรวจสอบว่า Node เชื่อมต่อแล้ว

bash
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

  1. สร้าง ~/.openclaw/workspace/canvas/index.html บนโฮสต์ Gateway
  2. นำทาง Node ไปยังตำแหน่งดังกล่าว (LAN):
bash
openclaw nodes invoke --node "&lt;Android Node&gt;" --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.health
    • device.apps เฉพาะเมื่อเปิดใช้ การตั้งค่า > ความสามารถของโทรศัพท์ > แอปที่ติดตั้ง โดยค่าเริ่มต้นจะแสดงรายการแอปที่มองเห็นได้ในตัวเปิดแอป (ส่ง includeNonLaunchable เพื่อดูรายการทั้งหมด)
    • notifications.list, notifications.actions (ดู การส่งต่อการแจ้งเตือน ด้านล่าง)
    • photos.latest
    • contacts.search, contacts.add
    • calendar.events, calendar.add
    • callLog.search
    • sms.search
    • motion.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 แยกต่างหากอาจกำหนดเส้นทางการตอบกลับไปยังการสนทนาที่ไม่ถูกต้อง

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page