Mainstream messaging
Google Chat
Google Chat आधिकारिक @openclaw/googlechat plugin के रूप में चलता है: Google Chat API webhooks के माध्यम से DMs और स्पेस (केवल HTTP endpoint, कोई Pub/Sub नहीं)।
इंस्टॉल करें
openclaw plugins install @openclaw/googlechatस्थानीय चेकआउट (git repo से चलाते समय):
openclaw plugins install ./path/to/local/googlechat-pluginत्वरित सेटअप (शुरुआती उपयोगकर्ताओं के लिए)
- एक Google Cloud प्रोजेक्ट बनाएँ और Google Chat API सक्षम करें।
- यहाँ जाएँ: Google Chat API Credentials
- यदि API पहले से सक्षम नहीं है, तो इसे सक्षम करें।
- एक Service Account बनाएँ:
- Create Credentials > Service Account दबाएँ।
- इसे अपनी पसंद का कोई भी नाम दें (उदाहरण के लिए,
openclaw-chat)। - अनुमतियाँ और प्रिंसिपल खाली छोड़ें (Continue, फिर Done)।
- JSON key बनाएँ और डाउनलोड करें:
- नए सर्विस अकाउंट पर क्लिक करें > Keys टैब > Add Key > Create new key > JSON > Create।
- डाउनलोड की गई JSON फ़ाइल को अपने Gateway होस्ट पर संग्रहीत करें (उदाहरण के लिए,
~/.openclaw/googlechat-service-account.json)। - Google Cloud Console Chat Configuration में एक Google Chat ऐप बनाएँ:
- Application info (ऐप का नाम, अवतार URL, विवरण) भरें।
- Interactive features सक्षम करें।
- Functionality के अंतर्गत, Join spaces and group conversations चुनें।
- Connection settings के अंतर्गत, HTTP endpoint URL चुनें।
- Triggers के अंतर्गत, Use a common HTTP endpoint URL for all triggers चुनें और इसे अपने सार्वजनिक Gateway URL के बाद
/googlechatलगाकर सेट करें (सार्वजनिक URL देखें)। - Visibility के अंतर्गत, Make this Chat app available to specific people and groups in
<Your Domain>चुनें और अपना ईमेल पता दर्ज करें। - Save पर क्लिक करें।
- ऐप की स्थिति सक्षम करें: पृष्ठ रीफ़्रेश करें, App status ढूँढें, इसे Live - available to users पर सेट करें और फिर से Save करें।
- OpenClaw को सर्विस अकाउंट और Webhook ऑडियंस के साथ कॉन्फ़िगर करें (यह Chat ऐप कॉन्फ़िगरेशन से मेल खाना चाहिए):
- पर्यावरण चर:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json(केवल डिफ़ॉल्ट अकाउंट), या - कॉन्फ़िगरेशन: कॉन्फ़िगरेशन की मुख्य बातें देखें।
openclaw channels add --channel googlechatमें--audience-type,--audience,--webhook-path, और--webhook-urlभी स्वीकार किए जाते हैं।
- पर्यावरण चर:
- Gateway शुरू करें। Google Chat आपके Webhook पथ (डिफ़ॉल्ट
/googlechat) पर POST करेगा।
Google Chat में जोड़ें
Gateway चलने और आपका ईमेल दृश्यता सूची में होने के बाद:
- Google Chat पर जाएँ।
- Direct Messages के बगल में स्थित + (प्लस) आइकन पर क्लिक करें।
- Google Cloud Console में कॉन्फ़िगर किया गया App name खोजें।
- बॉट Marketplace की ब्राउज़ सूची में नहीं दिखाई देता, क्योंकि यह एक निजी ऐप है; इसे नाम से खोजें।
- बॉट चुनें, Add या Chat पर क्लिक करें और संदेश भेजें।
सार्वजनिक URL (केवल Webhook)
Google Chat webhooks के लिए एक सार्वजनिक HTTPS endpoint आवश्यक है। सुरक्षा के लिए, इंटरनेट पर केवल /googlechat पथ उपलब्ध कराएँ और OpenClaw डैशबोर्ड तथा अन्य endpoints को निजी रखें।
विकल्प A: Tailscale Funnel (अनुशंसित)
निजी डैशबोर्ड के लिए Tailscale Serve और सार्वजनिक Webhook पथ के लिए Funnel का उपयोग करें।
-
जाँचें कि आपका Gateway किस पते से बँधा है:
bash ss -tlnp | grep 18789IP नोट करें (उदाहरण के लिए,
127.0.0.1,0.0.0.0, या कोई Tailscale100.x.x.xपता)। -
डैशबोर्ड को केवल tailnet पर उपलब्ध कराएँ (पोर्ट 8443):
bash # यदि localhost (127.0.0.1 या 0.0.0.0) से बँधा है:tailscale serve --bg --https 8443 http://127.0.0.1:18789 # यदि केवल Tailscale IP से बँधा है:tailscale serve --bg --https 8443 http://100.x.x.x:18789 -
केवल Webhook पथ को सार्वजनिक रूप से उपलब्ध कराएँ:
bash # यदि localhost (127.0.0.1 या 0.0.0.0) से बँधा है:tailscale funnel --bg --set-path /googlechat http://127.0.0.1:18789/googlechat # यदि केवल Tailscale IP से बँधा है:tailscale funnel --bg --set-path /googlechat http://100.x.x.x:18789/googlechat -
यदि संकेत दिया जाए, तो इस Node के लिए Funnel सक्षम करने हेतु आउटपुट में दिखाए गए प्राधिकरण URL पर जाएँ।
-
सत्यापित करें:
bash tailscale serve statustailscale funnel status
आपका सार्वजनिक Webhook URL https://<node-name>.<tailnet>.ts.net/googlechat है; डैशबोर्ड https://<node-name>.<tailnet>.ts.net:8443/ पर केवल tailnet के लिए उपलब्ध रहता है। Google Chat ऐप कॉन्फ़िगरेशन में सार्वजनिक URL (:8443 के बिना) का उपयोग करें।
नोट: यह कॉन्फ़िगरेशन रीबूट के बाद भी बना रहता है। इसे बाद में
tailscale funnel resetऔरtailscale serve resetसे हटाएँ।
विकल्प B: रिवर्स प्रॉक्सी (Caddy)
केवल Webhook पथ को प्रॉक्सी करें:
your-domain.com { reverse_proxy /googlechat* localhost:18789}your-domain.com/ के अनुरोधों को अनदेखा किया जाता है या 404 मिलता है, जबकि your-domain.com/googlechat OpenClaw पर रूट होता है।
विकल्प C: Cloudflare Tunnel
केवल Webhook पथ को रूट करने के लिए टनल इनग्रेस नियम कॉन्फ़िगर करें:
- Path:
/googlechat->http://localhost:18789/googlechat - Default rule: HTTP 404 (Not Found)
यह कैसे काम करता है
- Google Chat Gateway Webhook पथ पर JSON POST करता है (केवल POST, JSON सामग्री प्रकार आवश्यक, प्रति-IP दर सीमित)।
- OpenClaw प्रत्येक अनुरोध को भेजने से पहले प्रमाणित करता है:
- Chat ऐप इवेंट में
Authorization: Bearer <token>होता है; पूरा बॉडी पार्स करने से पहले टोकन सत्यापित किया जाता है। - Google Workspace ऐड-ऑन इवेंट में टोकन बॉडी (
authorizationEventObject.systemIdToken) में होता है और सत्यापन से पहले इसे अधिक कड़े पूर्व-प्रमाणीकरण बजट (16 KB, 3 s) के अंतर्गत पढ़ा जाता है।
- Chat ऐप इवेंट में
- टोकन की जाँच
audienceType+audienceके विरुद्ध की जाती है:audienceType: "app-url"→ ऑडियंस आपका HTTPS Webhook URL है।audienceType: "project-number"→ ऑडियंस Cloud प्रोजेक्ट नंबर है।app-urlके अंतर्गत ऐड-ऑन टोकन के लिए अतिरिक्त रूप सेappPrincipalको ऐप की संख्यात्मक OAuth 2.0 क्लाइंट ID (21 अंक, ईमेल नहीं) पर सेट करना आवश्यक है; अन्यथा लॉग चेतावनी के साथ सत्यापन विफल हो जाता है।
- संदेश स्पेस के अनुसार रूट होते हैं:
- स्पेस को प्रति-स्पेस सत्र
agent:<agentId>:googlechat:group:<spaceId>मिलते हैं; उत्तर संदेश थ्रेड में जाते हैं। - डिफ़ॉल्ट रूप से DMs एजेंट के मुख्य सत्र में समाहित हो जाते हैं; प्रति-पीयर DM सत्रों के लिए
session.dmScopeसेट करें (सत्र देखें)।
- स्पेस को प्रति-स्पेस सत्र
- DM एक्सेस डिफ़ॉल्ट रूप से पेयरिंग है। अज्ञात प्रेषकों को एक पेयरिंग कोड मिलता है; इससे स्वीकृत करें:
openclaw pairing approve googlechat <code>
- ग्रुप स्पेस में डिफ़ॉल्ट रूप से @-उल्लेख आवश्यक है। उल्लेखों का पता ऐप को लक्षित करने वाली Chat
USER_MENTIONटिप्पणियों से लगाया जाता है; यदि पहचान के लिए ऐप के उपयोगकर्ता संसाधन नाम की आवश्यकता हो, तोbotUser(उदाहरण के लिए,users/1234567890) सेट करें। - जब Google Chat से कोई exec या plugin अनुमोदन शुरू होता है और एक स्थिर
users/<id>अनुमोदक कॉन्फ़िगर किया गया हो, तो OpenClaw मूल स्पेस या थ्रेड में एक नेटिव अनुमोदन कार्ड (cardsV2) पोस्ट करता है। कार्ड बटन में अपारदर्शी कॉलबैक टोकन होते हैं; मैन्युअल/approve <id> <decision>प्रॉम्प्ट केवल तब दिखाई देता है, जब नेटिव डिलीवरी उपलब्ध नहीं होती।
इनबाउंड स्थायित्व
अनुरोध प्रमाणीकरण के बाद, OpenClaw ऐड-ऑन प्राधिकरण ऑब्जेक्ट को स्टोरेज से हटा देता है और 200 लौटाने से पहले Google Chat MESSAGE इवेंट को स्थायी रूप से कतारबद्ध करता है। स्थायित्व विफल होने पर 503 लौटाया जाता है, जिससे Google Chat किसी खो सकने वाले इवेंट को स्वीकार करने के बजाय फिर से प्रयास कर सकता है।
लंबित या पुनः प्रयास योग्य संदेश Gateway पुनरारंभ के बाद भी बने रहते हैं, प्रति स्पेस क्रमबद्ध रहते हैं और सक्रिय या सुरक्षित पूर्णता रिकॉर्ड मौजूद रहने तक डुप्लिकेट कतार प्रविष्टियों को रोकने के लिए Google Chat संदेश संसाधन नाम का उपयोग करते हैं। गैर-संदेश क्रियाएँ अपना मौजूदा अलग Webhook पथ बनाए रखती हैं और उन्हें स्थायी कतार की यह गारंटी नहीं मिलती। कतार-से-एजेंट सीमा पर डिलीवरी कम-से-कम-एक-बार बनी रहती है, इसलिए हैंडऑफ़ के दौरान क्रैश होने पर कोई टर्न फिर से चल सकता है।
लक्ष्य
डिलीवरी और अनुमतिसूचियों के लिए इन पहचानकर्ताओं का उपयोग करें:
- सीधे संदेश:
users/<userId>(अनुशंसित)। - स्पेस:
spaces/<spaceId>। - रॉ ईमेल
name@example.comपरिवर्तनशील है और अनुमतिसूची मिलान के लिए केवल तब उपयोग होता है, जबchannels.googlechat.dangerouslyAllowNameMatching: true। - बहिष्कृत:
users/<email>को उपयोगकर्ता ID माना जाता है, ईमेल अनुमतिसूची प्रविष्टि नहीं। - उपसर्ग
googlechat:,google-chat:, औरgchat:स्वीकार करके हटा दिए जाते हैं।
कॉन्फ़िगरेशन की मुख्य बातें
{ channels: { googlechat: { enabled: true, serviceAccountFile: "/path/to/service-account.json", // या serviceAccountRef: { source: "file", provider: "filemain", id: "/channels/googlechat/serviceAccount" } audienceType: "app-url", audience: "https://gateway.example.com/googlechat", appPrincipal: "123456789012345678901", // केवल ऐड-ऑन सत्यापन; संख्यात्मक OAuth क्लाइंट ID webhookPath: "/googlechat", botUser: "users/1234567890", // वैकल्पिक; उल्लेख पहचान में सहायता करता है allowBots: false, dmPolicy: "pairing", allowFrom: ["users/1234567890"], groupPolicy: "allowlist", groups: { "spaces/AAAA": { enabled: true, requireMention: true, users: ["users/1234567890"], systemPrompt: "केवल संक्षिप्त उत्तर।", }, }, typingIndicator: "message", mediaMaxMb: 20, }, },}नोट्स:
- सर्विस अकाउंट क्रेडेंशियल:
serviceAccountFile(पथ),serviceAccount(इनलाइन JSON स्ट्रिंग या ऑब्जेक्ट), याserviceAccountRef(पर्यावरण चर/फ़ाइल SecretRef)। पर्यावरण चरGOOGLE_CHAT_SERVICE_ACCOUNT(इनलाइन JSON) औरGOOGLE_CHAT_SERVICE_ACCOUNT_FILE(पथ) केवल डिफ़ॉल्ट अकाउंट पर लागू होते हैं। बहु-अकाउंट सेटअप समान कुंजियों के साथchannels.googlechat.accounts.<id>का उपयोग करते हैं, जिसमें प्रति-अकाउंटserviceAccountRefभी शामिल है। webhookPathसेट न होने पर डिफ़ॉल्ट Webhook पथ/googlechatहोता है; इसके बजायwebhookUrlपथ प्रदान कर सकता है।- ग्रुप कुंजियाँ स्थिर स्पेस ID (
spaces/<spaceId>) होनी चाहिए। प्रदर्शन-नाम कुंजियाँ बहिष्कृत हैं और उसी रूप में लॉग की जाती हैं। dangerouslyAllowNameMatchingअनुमतिसूचियों के लिए परिवर्तनशील ईमेल प्रिंसिपल मिलान को फिर से सक्षम करता है (आपातकालीन संगतता मोड); doctor ईमेल प्रविष्टियों के बारे में चेतावनी देता है।- Google Chat प्रतिक्रिया क्रियाएँ उपलब्ध नहीं कराई जातीं। plugin सर्विस-अकाउंट प्रमाणीकरण का उपयोग करता है, जबकि Google Chat प्रतिक्रिया endpoints के लिए उपयोगकर्ता प्रमाणीकरण आवश्यक है। मौजूदा
actions.reactionsकॉन्फ़िगरेशन संगतता के लिए स्वीकार किया जाता है, लेकिन इसका कोई प्रभाव नहीं पड़ता। - नेटिव अनुमोदन कार्ड प्रतिक्रिया इवेंट के बजाय Google Chat
cardsV2बटन क्लिक का उपयोग करते हैं। अनुमोदकallowFromयाdefaultToसे आते हैं और वे स्थिर संख्यात्मकusers/<id>मान होने चाहिए। - संदेश क्रियाएँ केवल टेक्स्ट
sendउपलब्ध कराती हैं। Google Chat अटैचमेंट अपलोड के लिए उपयोगकर्ता प्रमाणीकरण आवश्यक है, जबकि यह plugin सर्विस-अकाउंट प्रमाणीकरण का उपयोग करता है, इसलिए आउटबाउंड फ़ाइल अपलोड उपलब्ध नहीं कराया जाता। typingIndicator:message(डिफ़ॉल्ट) एक_<Bot> is typing..._प्लेसहोल्डर पोस्ट करता है और उसे पहले उत्तर में संपादित करता है;noneइसे अक्षम करता है;reactionके लिए उपयोगकर्ता OAuth आवश्यक है और फ़िलहाल सर्विस-अकाउंट प्रमाणीकरण के अंतर्गत लॉग की गई त्रुटि के साथmessageपर वापस जाता है।- इनबाउंड अटैचमेंट (प्रति संदेश पहला अटैचमेंट) Chat API के माध्यम से मीडिया पाइपलाइन में डाउनलोड किए जाते हैं और
mediaMaxMb(डिफ़ॉल्ट 20) द्वारा सीमित होते हैं। - बॉट द्वारा लिखे गए संदेश डिफ़ॉल्ट रूप से अनदेखे किए जाते हैं।
allowBots: trueके साथ, स्वीकार किए गए बॉट संदेश साझा बॉट लूप सुरक्षा का उपयोग करते हैं:channels.defaults.botLoopProtectionकॉन्फ़िगर करें, फिरchannels.googlechat.botLoopProtectionयाchannels.googlechat.groups.<space>.botLoopProtectionसे ओवरराइड करें।
सीक्रेट के संदर्भ विवरण: सीक्रेट प्रबंधन।
समस्या निवारण
405 Method Not Allowed
यदि Google Cloud Logs Explorer में इस तरह की त्रुटियाँ दिखाई देती हैं:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not AllowedWebhook हैंडलर पंजीकृत नहीं है। सामान्य कारण:
-
चैनल कॉन्फ़िगर नहीं किया गया है:
channels.googlechatअनुभाग मौजूद नहीं है। इससे सत्यापित करें:bash openclaw config get channels.googlechatयदि यह "Config path not found" लौटाता है, तो कॉन्फ़िगरेशन जोड़ें (कॉन्फ़िगरेशन की मुख्य बातें देखें)।
-
Plugin सक्षम नहीं है: Plugin की स्थिति जाँचें:
bash openclaw plugins list | grep googlechatयदि यह "disabled" दिखाता है, तो अपने कॉन्फ़िगरेशन में
plugins.entries.googlechat.enabled: trueजोड़ें। -
कॉन्फ़िगरेशन में बदलाव के बाद Gateway को पुनः आरंभ नहीं किया गया है:
bash openclaw gateway restart
सत्यापित करें कि चैनल चल रहा है:
openclaw channels status# यह दिखाई देना चाहिए: Google Chat default: enabled, configured, ...अन्य समस्याएँ
openclaw channels status --probeप्रमाणीकरण त्रुटियाँ और अनुपस्थित ऑडियंस कॉन्फ़िगरेशन दिखाता है (audienceऔरaudienceTypeदोनों आवश्यक हैं)।- यदि कोई संदेश नहीं आता है, तो Chat ऐप के Webhook URL और ट्रिगर कॉन्फ़िगरेशन की पुष्टि करें।
- यदि मेंशन गेटिंग उत्तरों को अवरुद्ध करती है, तो
botUserको ऐप के उपयोगकर्ता संसाधन नाम पर सेट करें औरrequireMentionजाँचें। - परीक्षण संदेश भेजते समय
openclaw logs --followयह दिखाता है कि अनुरोध Gateway तक पहुँच रहे हैं या नहीं।
संबंधित
- चैनलों का अवलोकन — सभी समर्थित चैनल
- चैनल रूटिंग — संदेशों के लिए सत्र रूटिंग
- Gateway कॉन्फ़िगरेशन
- समूह — समूह चैट का व्यवहार और मेंशन गेटिंग
- पेयरिंग — DM प्रमाणीकरण और पेयरिंग प्रवाह
- सुरक्षा — पहुँच मॉडल और सुदृढ़ीकरण