Mainstream messaging
Google Chat
الحالة: Plugin قابل للتنزيل للرسائل المباشرة والمساحات عبر Webhooks الخاصة بـ Google Chat API (HTTP فقط).
التثبيت
ثبّت Google Chat قبل تهيئة القناة:
openclaw plugins install @openclaw/googlechatنسخة محلية من المستودع (عند التشغيل من مستودع git):
openclaw plugins install ./path/to/local/googlechat-pluginالإعداد السريع (للمبتدئين)
- أنشئ مشروع Google Cloud وفعّل Google Chat API.
- انتقل إلى: بيانات اعتماد Google Chat API
- فعّل API إذا لم يكن مفعّلًا بالفعل.
- أنشئ حساب خدمة:
- اضغط Create Credentials > Service Account.
- سمّه بأي اسم تريده (مثلًا،
openclaw-chat). - اترك الأذونات فارغة (اضغط Continue).
- اترك الجهات الرئيسية ذات الوصول فارغة (اضغط Done).
- أنشئ مفتاح JSON ونزّله:
- في قائمة حسابات الخدمة، انقر الحساب الذي أنشأته للتو.
- انتقل إلى تبويب Keys.
- انقر Add Key > Create new key.
- اختر JSON واضغط Create.
- خزّن ملف JSON الذي نزّلته على مضيف Gateway لديك (مثلًا،
~/.openclaw/googlechat-service-account.json). - أنشئ تطبيق Google Chat في تهيئة Chat في Google Cloud Console:
- املأ معلومات التطبيق:
- اسم التطبيق: (مثلًا
OpenClaw) - رابط الصورة الرمزية: (مثلًا
https://openclaw.ai/logo.png) - الوصف: (مثلًا
Personal AI Assistant)
- اسم التطبيق: (مثلًا
- فعّل الميزات التفاعلية.
- ضمن الوظائف، حدّد الانضمام إلى المساحات والمحادثات الجماعية.
- ضمن إعدادات الاتصال، اختر رابط نقطة نهاية HTTP.
- ضمن المشغّلات، اختر استخدام رابط نقطة نهاية HTTP مشتركة لكل المشغّلات واضبطه على رابط Gateway العام لديك متبوعًا بـ
/googlechat.- نصيحة: شغّل
openclaw statusللعثور على رابط Gateway العام لديك.
- نصيحة: شغّل
- ضمن الرؤية، حدّد إتاحة تطبيق Chat هذا لأشخاص ومجموعات محددة في
<Your Domain>. - أدخل عنوان بريدك الإلكتروني (مثلًا
user@example.com) في مربع النص. - انقر Save في الأسفل.
- املأ معلومات التطبيق:
- فعّل حالة التطبيق:
- بعد الحفظ، حدّث الصفحة.
- ابحث عن قسم حالة التطبيق (عادةً قرب الأعلى أو الأسفل بعد الحفظ).
- غيّر الحالة إلى Live - available to users.
- انقر Save مرة أخرى.
- هيّئ OpenClaw بمسار حساب الخدمة + جمهور Webhook:
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - أو config:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- Env:
- اضبط نوع جمهور Webhook وقيمته (بما يطابق تهيئة تطبيق Chat لديك).
- ابدأ Gateway. سيرسل Google Chat طلبات POST إلى مسار Webhook لديك.
الإضافة إلى Google Chat
بعد تشغيل Gateway وإضافة بريدك الإلكتروني إلى قائمة الرؤية:
- انتقل إلى Google Chat.
- انقر أيقونة + (زائد) بجانب Direct Messages.
- في شريط البحث (حيث تضيف الأشخاص عادةً)، اكتب اسم التطبيق الذي هيّأته في Google Cloud Console.
- ملاحظة: لن يظهر البوت في قائمة تصفح "Marketplace" لأنه تطبيق خاص. يجب أن تبحث عنه بالاسم.
- اختر البوت من النتائج.
- انقر Add أو Chat لبدء محادثة فردية.
- أرسل "مرحبًا" لتشغيل المساعد!
الرابط العام (Webhook فقط)
تتطلب Webhooks الخاصة بـ Google Chat نقطة نهاية HTTPS عامة. للأمان، اكشف مسار /googlechat فقط للإنترنت. أبقِ لوحة معلومات OpenClaw ونقاط النهاية الحساسة الأخرى على شبكتك الخاصة.
الخيار أ: Tailscale Funnel (موصى به)
استخدم Tailscale Serve للوحة المعلومات الخاصة وFunnel لمسار Webhook العام. هذا يُبقي / خاصًا مع كشف /googlechat فقط.
-
تحقّق من العنوان الذي يرتبط به Gateway لديك:
bash ss -tlnp | grep 18789لاحظ عنوان IP (مثلًا،
127.0.0.1أو0.0.0.0أو عنوان Tailscale IP لديك مثل100.x.x.x). -
اكشف لوحة المعلومات للـ tailnet فقط (المنفذ 8443):
bash # If bound to localhost (127.0.0.1 or 0.0.0.0):tailscale serve --bg --https 8443 http://127.0.0.1:18789 # If bound to Tailscale IP only (e.g., 100.106.161.80):tailscale serve --bg --https 8443 http://100.106.161.80:18789 -
اكشف مسار Webhook فقط للعامة:
bash # If bound to localhost (127.0.0.1 or 0.0.0.0):tailscale funnel --bg --set-path /googlechat http://127.0.0.1:18789/googlechat # If bound to Tailscale IP only (e.g., 100.106.161.80):tailscale funnel --bg --set-path /googlechat http://100.106.161.80:18789/googlechat -
صرّح للعقدة بالوصول إلى Funnel: إذا طُلب منك ذلك، افتح رابط التفويض المعروض في المخرجات لتمكين Funnel لهذه العقدة في سياسة tailnet لديك.
-
تحقّق من التهيئة:
bash tailscale serve statustailscale funnel status
سيكون رابط Webhook العام لديك:
https://<node-name>.<tailnet>.ts.net/googlechat
تبقى لوحة معلوماتك الخاصة محصورة على tailnet:
https://<node-name>.<tailnet>.ts.net:8443/
استخدم الرابط العام (من دون :8443) في تهيئة تطبيق Google Chat.
ملاحظة: تستمر هذه التهيئة بعد إعادة التشغيل. لإزالتها لاحقًا، شغّل
tailscale funnel resetوtailscale serve reset.
الخيار ب: وكيل عكسي (Caddy)
إذا كنت تستخدم وكيلًا عكسيًا مثل Caddy، فمرّر المسار المحدد فقط عبر الوكيل:
your-domain.com { reverse_proxy /googlechat* localhost:18789}بهذه التهيئة، سيتم تجاهل أي طلب إلى your-domain.com/ أو إرجاعه كـ 404، بينما يتم توجيه your-domain.com/googlechat بأمان إلى OpenClaw.
الخيار ج: Cloudflare Tunnel
هيّئ قواعد ingress للنفق لديك بحيث لا توجّه إلا مسار Webhook:
- المسار:
/googlechat->http://localhost:18789/googlechat - القاعدة الافتراضية: HTTP 404 (غير موجود)
آلية العمل
- يرسل Google Chat طلبات Webhook POST إلى Gateway. يتضمن كل طلب ترويسة
Authorization: Bearer <token>.- يتحقق OpenClaw من مصادقة bearer قبل قراءة/تحليل أجسام Webhook الكاملة عندما تكون الترويسة موجودة.
- تُدعَم طلبات Google Workspace Add-on التي تحمل
authorizationEventObject.systemIdTokenفي الجسم عبر ميزانية جسم أكثر صرامة قبل المصادقة.
- يتحقق OpenClaw من الرمز مقابل
audienceType+audienceالمهيّئين:audienceType: "app-url"→ الجمهور هو رابط HTTPS الخاص بـ Webhook لديك.audienceType: "project-number"→ الجمهور هو رقم مشروع Cloud.
- تُوجَّه الرسائل حسب المساحة:
- تستخدم الرسائل المباشرة مفتاح الجلسة
agent:<agentId>:googlechat:direct:<spaceId>. - تستخدم المساحات مفتاح الجلسة
agent:<agentId>:googlechat:group:<spaceId>.
- تستخدم الرسائل المباشرة مفتاح الجلسة
- يكون وصول الرسائل المباشرة بالاقتران افتراضيًا. يتلقى المرسلون غير المعروفين رمز اقتران؛ وافق عليه باستخدام:
openclaw pairing approve googlechat <code>
- تتطلب المساحات الجماعية @-mention افتراضيًا. استخدم
botUserإذا كان اكتشاف الإشارة يحتاج إلى اسم مستخدم التطبيق. - عندما يبدأ طلب موافقة exec أو Plugin من Google Chat ويكون موافِق ثابت من نوع
users/<id>مهيّأ، ينشر OpenClaw بطاقة موافقة أصلية من Google Chat في المساحة أو السلسلة الأصلية. تستخدم أزرار البطاقة رموز callback مبهمة، ولا تظهر مطالبة/approve <id> <decision>اليدوية إلا عندما لا يكون تسليم الموافقة الأصلي متاحًا.
الأهداف
استخدم هذه المعرّفات للتسليم وقوائم السماح:
- الرسائل المباشرة:
users/<userId>(موصى به). - البريد الإلكتروني الخام
name@example.comقابل للتغيير ولا يُستخدم إلا لمطابقة قائمة السماح المباشرة عندما يكونchannels.googlechat.dangerouslyAllowNameMatching: true. - مهمل: يُعامَل
users/<email>كمعرّف مستخدم، وليس كقائمة سماح للبريد الإلكتروني. - المساحات:
spaces/<spaceId>.
أبرز نقاط التهيئة
{ channels: { googlechat: { enabled: true, serviceAccountFile: "/path/to/service-account.json", // or serviceAccountRef: { source: "file", provider: "filemain", id: "/channels/googlechat/serviceAccount" } audienceType: "app-url", audience: "https://gateway.example.com/googlechat", webhookPath: "/googlechat", botUser: "users/1234567890", // optional; helps mention detection allowBots: false, dm: { policy: "pairing", allowFrom: ["users/1234567890"], }, groupPolicy: "allowlist", groups: { "spaces/AAAA": { enabled: true, requireMention: true, users: ["users/1234567890"], systemPrompt: "Short answers only.", }, }, actions: { reactions: true }, typingIndicator: "message", mediaMaxMb: 20, }, },}ملاحظات:
- يمكن أيضًا تمرير بيانات اعتماد حساب الخدمة مباشرةً باستخدام
serviceAccount(سلسلة JSON). serviceAccountRefمدعوم أيضًا (env/file SecretRef)، بما في ذلك المراجع لكل حساب ضمنchannels.googlechat.accounts.<id>.serviceAccountRef.- مسار Webhook الافتراضي هو
/googlechatإذا لم يُضبطwebhookPath. - يعيد
dangerouslyAllowNameMatchingتمكين مطابقة هوية البريد الإلكتروني القابلة للتغيير لقوائم السماح (وضع توافق لكسر الزجاج). - تتوفر التفاعلات عبر أداة
reactionsوchannels actionعندما يكونactions.reactionsمفعّلًا. - تستخدم بطاقات الموافقة الأصلية نقرات أزرار
cardsV2في Google Chat، وليس أحداث التفاعل. يأتي الموافقون منdm.allowFromأوdefaultToويجب أن يكونوا قيمusers/<id>رقمية ثابتة. - تكشف إجراءات الرسائل
sendللنص وupload-fileلإرسال المرفقات صراحةً. يقبلupload-fileالقيمmedia/filePath/pathبالإضافة إلىmessageوfilenameواستهداف السلسلة اختياريًا. - يدعم
typingIndicatorالقيمmessage(افتراضي)، وnone، وreaction(يتطلب التفاعل OAuth للمستخدم). - تُنزّل المرفقات عبر Chat API وتُخزّن في خط وسائط المعالجة (مع حد للحجم يحدده
mediaMaxMb). - تُتجاهل رسائل Google Chat التي يكتبها البوت افتراضيًا. إذا ضبطت
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 Allowedفهذا يعني أن معالج Webhook غير مسجّل. الأسباب الشائعة:
-
القناة غير مهيّأة: قسم
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: بعد إضافة التهيئة، أعد تشغيل Gateway:
bash openclaw gateway restart
تحقّق من أن القناة تعمل:
openclaw channels status# Should show: Google Chat default: enabled, configured, ...مشكلات أخرى
- افحص
openclaw channels status --probeبحثًا عن أخطاء المصادقة أو تهيئة الجمهور المفقودة. - إذا لم تصل أي رسائل، فتأكد من رابط Webhook الخاص بتطبيق Chat + اشتراكات الأحداث.
- إذا منعت بوابة الإشارات الردود، فاضبط
botUserعلى اسم مورد مستخدم التطبيق وتحقق منrequireMention. - استخدم
openclaw logs --followأثناء إرسال رسالة اختبار لمعرفة ما إذا كانت الطلبات تصل إلى Gateway.
وثائق ذات صلة:
ذات صلة
- نظرة عامة على القنوات — جميع القنوات المدعومة
- الاقتران — مصادقة الرسائل المباشرة وتدفق الاقتران
- المجموعات — سلوك دردشة المجموعات وبوابة الإشارات
- توجيه القنوات — توجيه الجلسات للرسائل
- الأمان — نموذج الوصول والتقوية