Gateway आर्किटेक्चर
अंतिम अपडेट: 2026-01-22अवलोकन
- एक एकल, दीर्घ‑जीवी Gateway सभी मैसेजिंग सतहों का स्वामित्व रखता है (Baileys के माध्यम से WhatsApp, grammY के माध्यम से Telegram, Slack, Discord, Signal, iMessage, WebChat)।
- कंट्रोल‑प्लेन क्लाइंट्स (macOS ऐप, CLI, वेब UI, ऑटोमेशन्स) कॉन्फ़िगर किए गए bind होस्ट (डिफ़ॉल्ट
127.0.0.1:18789) पर WebSocket के माध्यम से Gateway से जुड़ते हैं। - Nodes (macOS/iOS/Android/headless) भी WebSocket के माध्यम से कनेक्ट होते हैं, लेकिन स्पष्ट caps/commands के साथ
role: nodeघोषित करते हैं। - प्रति होस्ट एक Gateway; वही एकमात्र स्थान है जहाँ WhatsApp सत्र खोला जाता है।
- एक canvas host (डिफ़ॉल्ट
18793) एजेंट‑संपादन योग्य HTML और A2UI परोसता है।/__openclaw__/canvas/(एजेंट द्वारा संपादन योग्य HTML/CSS/JS)/__openclaw__/a2ui/(A2UI होस्ट) यह Gateway के समान पोर्ट का उपयोग करता है (डिफ़ॉल्ट18789)।
घटक और फ्लो
Gateway (डेमन)
- प्रदाता कनेक्शनों को बनाए रखता है।
- एक typed WS API उजागर करता है (रिक्वेस्ट, रिस्पॉन्स, सर्वर‑पुश इवेंट्स)।
- इनबाउंड फ्रेम्स को JSON Schema के विरुद्ध वैलिडेट करता है।
agent,chat,presence,health,heartbeat,cronजैसे इवेंट्स उत्सर्जित करता है।
क्लाइंट्स (mac ऐप / CLI / वेब एडमिन)
- प्रति क्लाइंट एक WS कनेक्शन।
- रिक्वेस्ट भेजते हैं (
health,status,send,agent,system-presence)। - इवेंट्स की सदस्यता लेते हैं (
tick,agent,presence,shutdown)।
Nodes (macOS / iOS / Android / headless)
- उसी WS सर्वर से
role: nodeके साथ कनेक्ट होते हैं। connectमें एक डिवाइस पहचान प्रदान करते हैं; पेयरिंग डिवाइस‑आधारित होती है (भूमिकाnode) और अनुमोदन डिवाइस पेयरिंग स्टोर में रहता है।canvas.*,camera.*,screen.record,location.getजैसे कमांड्स उजागर करते हैं।
WebChat
- एक स्टैटिक UI जो चैट इतिहास और सेंड्स के लिए Gateway WS API का उपयोग करता है।
- रिमोट सेटअप्स में, अन्य क्लाइंट्स की तरह उसी SSH/Tailscale टनल के माध्यम से कनेक्ट होता है।
कनेक्शन लाइफसाइकल (एकल क्लाइंट)
वायर प्रोटोकॉल (सारांश)
- ट्रांसपोर्ट: WebSocket, JSON पेलोड्स के साथ टेक्स्ट फ्रेम्स।
- पहला फ्रेम अनिवार्य रूप से
connectहोना चाहिए। - हैंडशेक के बाद:
- रिक्वेस्ट्स:
{type:"req", id, method, params}→{type:"res", id, ok, payload|error} - इवेंट्स:
{type:"event", event, payload, seq?, stateVersion?}
- रिक्वेस्ट्स:
- यदि
OPENCLAW_GATEWAY_TOKEN(या--token) सेट है, तोconnect.params.auth.tokenका मिलान होना चाहिए; अन्यथा सॉकेट बंद हो जाता है। - साइड‑इफ़ेक्टिंग मेथड्स (
send,agent) के लिए आइडेम्पोटेंसी कीज़ आवश्यक हैं ताकि सुरक्षित रूप से री‑ट्राई किया जा सके; सर्वर एक अल्प‑आयु डिड्यूप कैश रखता है। - Nodes को
role: "node"के साथ‑साथ caps/commands/permissions कोconnectमें शामिल करना चाहिए।
पेयरिंग + स्थानीय ट्रस्ट
- सभी WS क्लाइंट्स (ऑपरेटर्स + nodes)
connectपर एक डिवाइस पहचान शामिल करते हैं। - नए डिवाइस IDs के लिए पेयरिंग अनुमोदन आवश्यक है; Gateway बाद के कनेक्ट्स के लिए एक डिवाइस टोकन जारी करता है।
- स्थानीय कनेक्ट्स (loopback या Gateway होस्ट का अपना tailnet पता) को समान‑होस्ट UX को सहज रखने के लिए स्वतः‑अनुमोदित किया जा सकता है।
- गैर‑स्थानीय कनेक्ट्स को
connect.challengenonce पर साइन करना होता है और स्पष्ट अनुमोदन आवश्यक होता है। - Gateway प्रमाणीकरण (
gateway.auth.*) सभी कनेक्शनों पर लागू रहता है, स्थानीय हों या रिमोट।
प्रोटोकॉल टाइपिंग और कोडजन
- TypeBox स्कीमाएँ प्रोटोकॉल को परिभाषित करती हैं।
- उन स्कीमाओं से JSON Schema जनरेट किया जाता है।
- JSON Schema से Swift मॉडल्स जनरेट किए जाते हैं।
रिमोट एक्सेस
- प्राथमिक: Tailscale या VPN।
-
वैकल्पिक: SSH टनल
- टनल के ऊपर वही हैंडशेक + ऑथ टोकन लागू होते हैं।
- रिमोट सेटअप्स में WS के लिए TLS + वैकल्पिक पिनिंग सक्षम की जा सकती है।
ऑपरेशन्स स्नैपशॉट
- स्टार्ट:
openclaw gateway(फ़ोरग्राउंड, stdout पर लॉग्स)। - हेल्थ: WS के माध्यम से
health(hello-okमें भी शामिल)। - सुपरविज़न: ऑटो‑रीस्टार्ट के लिए launchd/systemd।
इनवेरिएंट्स
- प्रति होस्ट ठीक एक Gateway एकल Baileys सत्र को नियंत्रित करता है।
- हैंडशेक अनिवार्य है; कोई भी non‑JSON या non‑connect पहला फ्रेम हार्ड क्लोज़ है।
- इवेंट्स रिप्ले नहीं किए जाते; गैप्स पर क्लाइंट्स को रिफ़्रेश करना चाहिए।