Platforms overview
Android ऐप
समर्थन स्नैपशॉट
- भूमिका: साथी नोड ऐप (Android Gateway होस्ट नहीं करता)।
- Gateway आवश्यक: हाँ (इसे macOS, Linux, या WSL2 के माध्यम से Windows पर चलाएँ)।
- इंस्टॉल करें: ऐप के लिए Google Play, Gateway के लिए प्रारंभ करना, फिर पेयरिंग।
- Gateway: रनबुक + कॉन्फ़िगरेशन।
- प्रोटोकॉल: Gateway प्रोटोकॉल (नोड + नियंत्रण प्लेन)।
सिस्टम नियंत्रण
सिस्टम नियंत्रण (launchd/systemd) Gateway होस्ट पर रहता है। Gateway देखें।
कनेक्शन रनबुक
Android नोड ऐप ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway
Android सीधे Gateway WebSocket से जुड़ता है और डिवाइस पेयरिंग (role: node) का उपयोग करता है।
Tailscale या सार्वजनिक होस्ट के लिए, Android को सुरक्षित एंडपॉइंट चाहिए:
- प्राथमिकता: Tailscale Serve / Funnel,
https://<magicdns>/wss://<magicdns>के साथ - समर्थित भी: वास्तविक TLS एंडपॉइंट वाला कोई अन्य
wss://Gateway URL - क्लियरटेक्स्ट
ws://निजी LAN पतों /.localहोस्टों, साथ हीlocalhost,127.0.0.1, और Android एम्युलेटर ब्रिज (10.0.2.2) पर समर्थित रहता है
पूर्वापेक्षाएँ
- आप "मास्टर" मशीन पर Gateway चला सकते हैं।
- Android डिवाइस/एम्युलेटर Gateway WebSocket तक पहुँच सकता है:
- mDNS/NSD के साथ वही LAN, या
- Wide-Area Bonjour / unicast DNS-SD का उपयोग करके वही Tailscale tailnet (नीचे देखें), या
- मैनुअल Gateway होस्ट/पोर्ट (fallback)
- Tailnet/सार्वजनिक मोबाइल पेयरिंग कच्चे tailnet IP
ws://एंडपॉइंट का उपयोग नहीं करती। इसके बजाय Tailscale Serve या किसी अन्यwss://URL का उपयोग करें। - आप Gateway मशीन पर CLI (
openclaw) चला सकते हैं (या SSH के माध्यम से)।
1) Gateway शुरू करें
openclaw gateway --port 18789 --verboseलॉग में पुष्टि करें कि आपको कुछ ऐसा दिखता है:
listening on ws://0.0.0.0:18789
Tailscale पर दूरस्थ Android पहुँच के लिए, कच्चे tailnet bind के बजाय Serve/Funnel को प्राथमिकता दें:
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-केवल संकेतों के बजाय resolved
सेवा एंडपॉइंट का उपयोग करता है।
unicast DNS-SD के माध्यम से Tailnet (Vienna ⇄ London) डिस्कवरी
Android NSD/mDNS डिस्कवरी नेटवर्कों के पार नहीं जाएगी। यदि आपका Android नोड और Gateway अलग-अलग नेटवर्कों पर हैं लेकिन Tailscale के माध्यम से जुड़े हैं, तो इसके बजाय Wide-Area Bonjour / unicast DNS-SD का उपयोग करें।
केवल डिस्कवरी tailnet/सार्वजनिक Android पेयरिंग के लिए पर्याप्त नहीं है। खोजे गए रूट को फिर भी सुरक्षित एंडपॉइंट (wss:// या Tailscale Serve) चाहिए:
- Gateway होस्ट पर DNS-SD ज़ोन (उदाहरण
openclaw.internal.) सेट अप करें और_openclaw-gw._tcpरिकॉर्ड प्रकाशित करें। - अपने चुने हुए डोमेन के लिए Tailscale split DNS कॉन्फ़िगर करें, जो उस DNS सर्वर की ओर संकेत करे।
विवरण और उदाहरण CoreDNS कॉन्फ़िगरेशन: Bonjour।
3) Android से कनेक्ट करें
Android ऐप में:
- ऐप अपनी Gateway कनेक्शन को फ़ोरग्राउंड सेवा (स्थायी नोटिफ़िकेशन) के माध्यम से जीवित रखता है।
- कनेक्ट टैब खोलें।
- सेटअप कोड या मैनुअल मोड का उपयोग करें।
- यदि डिस्कवरी अवरुद्ध है, तो उन्नत नियंत्रण में मैनुअल होस्ट/पोर्ट का उपयोग करें। निजी LAN होस्टों के लिए,
ws://अभी भी काम करता है। Tailscale/सार्वजनिक होस्टों के लिए, TLS चालू करें औरwss:/// Tailscale Serve एंडपॉइंट का उपयोग करें।
पहली सफल पेयरिंग के बाद, Android लॉन्च पर अपने-आप फिर से कनेक्ट होता है:
- मैनुअल एंडपॉइंट (यदि सक्षम हो), अन्यथा
- पिछला खोजा गया Gateway (सर्वोत्तम प्रयास)।
Presence alive बीकन
प्रमाणित नोड सत्र कनेक्ट होने के बाद, और जब ऐप पृष्ठभूमि में चला जाता है जबकि
फ़ोरग्राउंड सेवा अभी भी कनेक्टेड होती है, Android node.event को
event: "node.presence.alive" के साथ कॉल करता है। Gateway इसे पेयर किए गए नोड/डिवाइस मेटाडेटा पर
lastSeenAtMs/lastSeenReason के रूप में तभी रिकॉर्ड करता है जब प्रमाणित नोड डिवाइस पहचान ज्ञात हो।
ऐप बीकन को सफलतापूर्वक रिकॉर्ड किया गया तभी मानता है जब Gateway प्रतिक्रिया में
handled: true शामिल हो। पुराने Gateways node.event को { "ok": true } के साथ स्वीकार कर सकते हैं; वह प्रतिक्रिया
संगत है लेकिन टिकाऊ last-seen अपडेट के रूप में नहीं गिनी जाती।
4) पेयरिंग अनुमोदित करें (CLI)
Gateway मशीन पर:
openclaw devices listopenclaw devices approve <requestId>openclaw devices reject <requestId>पेयरिंग विवरण: पेयरिंग।
वैकल्पिक: यदि Android नोड हमेशा कड़े नियंत्रण वाले subnet से कनेक्ट होता है, तो आप स्पष्ट CIDR या exact IPs के साथ पहली बार नोड auto-approval में opt in कर सकते हैं:
{ gateway: { nodes: { pairing: { autoApproveCidrs: ["192.168.1.0/24"], }, }, },}यह डिफ़ॉल्ट रूप से अक्षम है। यह केवल नए role: node पेयरिंग पर लागू होता है, जहाँ
कोई requested scopes नहीं हैं। Operator/browser पेयरिंग और कोई भी role, scope, metadata, या
public-key बदलाव अब भी मैनुअल approval मांगता है।
5) सत्यापित करें कि नोड कनेक्टेड है
-
नोड स्थिति के माध्यम से:
bash openclaw nodes status -
Gateway के माध्यम से:
bash openclaw gateway call node.list --params "{}"
6) चैट + इतिहास
Android चैट टैब सत्र चयन का समर्थन करता है (डिफ़ॉल्ट main, साथ ही अन्य मौजूदा सत्र):
- इतिहास:
chat.history(display-normalized; inline directive tags को visible text से हटाया जाता है, plain-text tool-call XML payloads (जिसमें<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>, और truncated tool-call blocks शामिल हैं) और leaked ASCII/full-width model control tokens हटाए जाते हैं, exactNO_REPLY/no_replyजैसी pure silent-token assistant rows छोड़ी जाती हैं, और oversized rows को placeholders से बदला जा सकता है) - भेजें:
chat.send - Push updates (best-effort):
chat.subscribe→event:"chat"
7) Canvas + कैमरा
Gateway Canvas Host (वेब सामग्री के लिए अनुशंसित)
यदि आप चाहते हैं कि नोड वास्तविक HTML/CSS/JS दिखाए जिसे एजेंट डिस्क पर संपादित कर सके, तो नोड को Gateway canvas host की ओर इंगित करें।
-
Gateway होस्ट पर
~/.openclaw/workspace/canvas/index.htmlबनाएँ। -
नोड को उस पर नेविगेट करें (LAN):
openclaw nodes invoke --node "<Android Node>" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18789/__openclaw__/canvas/"}'Tailnet (वैकल्पिक): यदि दोनों डिवाइस Tailscale पर हैं, तो .local के बजाय MagicDNS नाम या tailnet IP का उपयोग करें, जैसे http://<gateway-magicdns>:18789/__openclaw__/canvas/।
यह सर्वर HTML में live-reload client इंजेक्ट करता है और फ़ाइल बदलावों पर reload करता है।
Gateway /__openclaw__/a2ui/ भी serve करता है, लेकिन Android ऐप remote A2UI pages को render-only मानता है। Action-capable A2UI commands messages लागू करने से पहले bundled app-owned A2UI page का उपयोग करते हैं।
Canvas commands (केवल foreground):
canvas.eval,canvas.snapshot,canvas.navigate(डिफ़ॉल्ट scaffold पर लौटने के लिए{"url":""}या{"url":"/"}का उपयोग करें)।canvas.snapshot{ format, base64 }लौटाता है (डिफ़ॉल्टformat="jpeg")।- A2UI:
canvas.a2ui.push,canvas.a2ui.reset(canvas.a2ui.pushJSONLlegacy alias)। ये commands action-capable rendering के लिए bundled app-owned A2UI page का उपयोग करते हैं।
कैमरा commands (केवल foreground; permission-gated):
camera.snap(jpg)camera.clip(mp4)
पैरामीटर और CLI helpers के लिए Camera node देखें।
8) वॉइस + विस्तृत Android command surface
- वॉइस टैब: Android में दो explicit capture modes हैं। Mic एक मैनुअल वॉइस-टैब सत्र है जो प्रत्येक pause को chat turn के रूप में भेजता है और ऐप के foreground छोड़ने या उपयोगकर्ता के वॉइस टैब छोड़ने पर रुक जाता है। Talk निरंतर Talk Mode है और toggled off होने या नोड disconnect होने तक सुनता रहता है।
- Talk Mode capture शुरू होने से पहले मौजूदा foreground service को
connectedDeviceसेconnectedDevice|microphoneमें promote करता है, फिर Talk Mode रुकने पर उसे demote करता है। नोड सेवाCHANGE_NETWORK_STATEके साथFOREGROUND_SERVICE_CONNECTED_DEVICEघोषित करती है; Android 14+ कोFOREGROUND_SERVICE_MICROPHONEघोषणा,RECORD_AUDIOruntime grant, और runtime पर microphone service type भी चाहिए। - डिफ़ॉल्ट रूप से, Android Talk native speech recognition, Gateway chat, और configured gateway Talk provider के माध्यम से
talk.speakका उपयोग करता है। Local system TTS का उपयोग केवल तब होता है जबtalk.speakउपलब्ध नहीं होता। - Android Talk realtime Gateway relay का उपयोग केवल तब करता है जब
talk.realtime.moderealtimeहो औरtalk.realtime.transportgateway-relayहो। - वॉइस wake Android UX/runtime में अक्षम रहता है।
- अतिरिक्त Android command families (उपलब्धता डिवाइस, permissions, और user settings पर निर्भर करती है):
device.status,device.info,device.permissions,device.healthdevice.appsकेवल तब जब Settings > Phone Capabilities > Installed Apps सक्षम हो; यह डिफ़ॉल्ट रूप से launcher-visible apps सूचीबद्ध करता है।notifications.list,notifications.actions(नीचे नोटिफ़िकेशन फ़ॉरवर्डिंग देखें)photos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
सहायक entrypoints
Android system assistant trigger (Google Assistant) से OpenClaw launch करने का समर्थन करता है। कॉन्फ़िगर होने पर, home button दबाए रखना या "Hey Google, ask OpenClaw..." कहना ऐप खोलता है और prompt को chat composer में सौंप देता है।
यह ऐप manifest में घोषित Android App Actions metadata का उपयोग करता है। Gateway side पर कोई अतिरिक्त configuration आवश्यक नहीं है -- assistant intent पूरी तरह Android ऐप द्वारा handled होता है और सामान्य chat message के रूप में forward किया जाता है।
नोटिफ़िकेशन फ़ॉरवर्डिंग
Android डिवाइस notifications को events के रूप में Gateway को forward कर सकता है। कई controls आपको scope करने देते हैं कि कौन-से notifications forward हों और कब।
| कुंजी | प्रकार | विवरण |
|---|---|---|
notifications.allowPackages |
string[] | केवल इन package names से notifications forward करें। यदि set है, तो अन्य सभी packages ignored होते हैं। |
notifications.denyPackages |
string[] | इन package names से notifications कभी forward न करें। allowPackages के बाद applied होता है। |
notifications.quietHours.start |
string (HH:mm) | quiet hours window की शुरुआत (local device time)। इस window के दौरान notifications suppressed होते हैं। |
notifications.quietHours.end |
string (HH:mm) | quiet hours window का अंत। |
notifications.rateLimit |
number | प्रति package प्रति minute अधिकतम forwarded notifications। अतिरिक्त notifications dropped होते हैं। |
notification picker forwarded notification events के लिए safer behavior भी उपयोग करता है, जिससे sensitive system notifications की accidental forwarding रुकती है।
उदाहरण कॉन्फ़िगरेशन:
{ notifications: { allowPackages: ["com.slack", "com.whatsapp"], denyPackages: ["com.android.systemui"], quietHours: { start: "22:00", end: "07:00", }, rateLimit: 5, },}