Google Chat (Chat API)
الحالة: جاهز للرسائل المباشرة + المساحات عبر webhooks الخاصة بـ Google Chat API (HTTP فقط).إعداد سريع (للمبتدئين)
- أنشئ مشروع 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 Chat في Google Cloud Console Chat Configuration:
- املأ Application info:
- App name: (مثلًا
OpenClaw) - Avatar URL: (مثلًا
https://openclaw.ai/logo.png) - Description: (مثلًا
Personal AI Assistant)
- App name: (مثلًا
- فعّل Interactive features.
- ضمن Functionality، حدّد Join spaces and group conversations.
- ضمن Connection settings، اختر HTTP endpoint URL.
- ضمن Triggers، اختر Use a common HTTP endpoint URL for all triggers واضبطه على عنوان URL العام الخاص بـ gateway متبوعًا بـ
/googlechat.- نصيحة: شغّل
openclaw statusللعثور على عنوان URL العام الخاص بـ gateway.
- نصيحة: شغّل
- ضمن Visibility، حدّد Make this Chat app available to specific people and groups in <Your Domain>.
- أدخل عنوان بريدك الإلكتروني (مثلًا
user@example.com) في مربع النص. - انقر Save في الأسفل.
- املأ Application info:
- فعّل حالة التطبيق:
- بعد الحفظ، حدّث الصفحة.
- ابحث عن قسم App status (عادةً قرب الأعلى أو الأسفل بعد الحفظ).
- غيّر الحالة إلى Live - available to users.
- انقر Save مرة أخرى.
- اضبط OpenClaw باستخدام مسار حساب الخدمة + webhook audience:
- متغير البيئة:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - أو التكوين:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- متغير البيئة:
- اضبط نوع وقيمة webhook audience (بحيث يطابق إعداد تطبيق Chat لديك).
- ابدأ gateway. سيُرسل Google Chat طلبات POST إلى مسار webhook لديك.
الإضافة إلى Google Chat
بمجرد تشغيل gateway وإضافة بريدك الإلكتروني إلى قائمة الظهور:- انتقل إلى Google Chat.
- انقر على أيقونة + (زائد) بجانب Direct Messages.
- في شريط البحث (حيث تضيف الأشخاص عادةً)، اكتب App name الذي قمت بتكوينه في Google Cloud Console.
- ملاحظة: لن يظهر الروبوت في قائمة التصفح “Marketplace” لأنه تطبيق خاص. يجب أن تبحث عنه بالاسم.
- اختر الروبوت من النتائج.
- انقر Add أو Chat لبدء محادثة فردية.
- أرسل “Hello” لتشغيل المساعد!
عنوان URL عام (Webhook فقط)
تتطلب webhooks الخاصة بـ Google Chat نقطة نهاية HTTPS عامة. لأسباب أمنية، اكشف فقط المسار/googlechat للإنترنت. أبقِ لوحة تحكم OpenClaw ونقاط النهاية الحساسة الأخرى على شبكتك الخاصة.
الخيار A: Tailscale Funnel (موصى به)
استخدم Tailscale Serve للوحة التحكم الخاصة وFunnel لمسار webhook العام. هذا يُبقي/ خاصًا مع كشف /googlechat فقط.
-
تحقق من العنوان المرتبط به gateway:
دوّن عنوان IP (مثلًا
127.0.0.1أو0.0.0.0أو عنوان Tailscale الخاص بك مثل100.x.x.x). -
اكشف لوحة التحكم إلى tailnet فقط (المنفذ 8443):
-
اكشف مسار webhook فقط بشكل عام:
- فوّض العقدة للوصول عبر Funnel: إذا طُلب منك ذلك، فزر عنوان URL الخاص بالتفويض الظاهر في المخرجات لتمكين Funnel لهذه العقدة في سياسة tailnet الخاصة بك.
-
تحقق من التكوين:
https://<node-name>.<tailnet>.ts.net/googlechat
وستبقى لوحة التحكم الخاصة بك ضمن tailnet فقط:
https://<node-name>.<tailnet>.ts.net:8443/
استخدم عنوان URL العام (من دون :8443) في إعداد تطبيق Google Chat.
ملاحظة: يستمر هذا التكوين بعد إعادة التشغيل. لإزالته لاحقًا، شغّلtailscale funnel resetوtailscale serve reset.
الخيار B: Reverse Proxy (Caddy)
إذا كنت تستخدم reverse proxy مثل Caddy، فقم بتمرير المسار المحدد فقط:your-domain.com/ أو إرجاع 404 له، بينما يتم توجيه your-domain.com/googlechat بأمان إلى OpenClaw.
الخيار C: Cloudflare Tunnel
اضبط قواعد ingress الخاصة بـ tunnel لتوجيه مسار webhook فقط:- المسار:
/googlechat->http://localhost:18789/googlechat - القاعدة الافتراضية: HTTP 404 (غير موجود)
كيف يعمل
- يرسل Google Chat طلبات webhook من نوع POST إلى gateway. يتضمن كل طلب ترويسة
Authorization: Bearer <token>.- يتحقق OpenClaw من bearer auth قبل قراءة/تحليل أجسام webhook الكاملة عند وجود الترويسة.
- يتم دعم طلبات Google Workspace Add-on التي تحمل
authorizationEventObject.systemIdTokenفي الجسم من خلال حد أقصى أكثر صرامة لجسم ما قبل المصادقة.
- يتحقق OpenClaw من الرمز المميز مقابل
audienceTypeوaudienceالمكوّنين:audienceType: "app-url"→ يكون audience هو عنوان URL الخاص بـ webhook عبر HTTPS.audienceType: "project-number"→ يكون audience هو رقم مشروع Cloud.
- يتم توجيه الرسائل حسب المساحة:
- تستخدم الرسائل المباشرة مفتاح الجلسة
agent:<agentId>:googlechat:direct:<spaceId>. - تستخدم المساحات مفتاح الجلسة
agent:<agentId>:googlechat:group:<spaceId>.
- تستخدم الرسائل المباشرة مفتاح الجلسة
- يكون وصول الرسائل المباشرة عبر pairing افتراضيًا. يتلقى المرسلون غير المعروفين رمز pairing؛ وافق عليه باستخدام:
openclaw pairing approve googlechat <code>
- تتطلب المساحات الجماعية إشارة @ افتراضيًا. استخدم
botUserإذا كان اكتشاف الإشارة يحتاج إلى اسم مستخدم التطبيق.
الأهداف
استخدم هذه المعرّفات للتسليم وقوائم السماح:- الرسائل المباشرة:
users/<userId>(موصى به). - البريد الإلكتروني الخام
name@example.comقابل للتغيير ويُستخدم فقط لمطابقة قائمة السماح المباشرة عندما تكونchannels.googlechat.dangerouslyAllowNameMatching: true. - متروك: يتم التعامل مع
users/<email>على أنه معرّف مستخدم، وليس قائمة سماح للبريد الإلكتروني. - المساحات:
spaces/<spaceId>.
أبرز التكوينات
- يمكن أيضًا تمرير بيانات اعتماد حساب الخدمة مباشرة باستخدام
serviceAccount(سلسلة JSON). serviceAccountRefمدعوم أيضًا (SecretRef للبيئة/الملف)، بما في ذلك المراجع لكل حساب ضمنchannels.googlechat.accounts.<id>.serviceAccountRef.- مسار webhook الافتراضي هو
/googlechatإذا لم يتم تعيينwebhookPath. - تعيد
dangerouslyAllowNameMatchingتمكين مطابقة principal للبريد الإلكتروني القابل للتغيير لقوائم السماح (وضع توافقية طارئ). - تتوفر التفاعلات عبر أداة
reactionsوchannels actionعندما تكونactions.reactionsمفعلة. - تعرض إجراءات الرسائل
sendللنص وupload-fileلإرسال المرفقات بشكل صريح. تقبلupload-fileالقيمmedia/filePath/pathبالإضافة إلىmessageوfilenameالاختياريين واستهداف السلسلة. - يدعم
typingIndicatorالقيمnoneوmessage(الافتراضي) وreaction(يتطلب التفاعل OAuth للمستخدم). - يتم تنزيل المرفقات عبر Chat API وتخزينها في مسار الوسائط (مع حد للحجم تحدده
mediaMaxMb).
استكشاف الأخطاء وإصلاحها
405 Method Not Allowed
إذا أظهر Google Cloud Logs Explorer أخطاء مثل:-
القناة غير مكوّنة: قسم
channels.googlechatمفقود من التكوين. تحقق باستخدام:إذا أعاد “Config path not found”، فأضف التكوين (راجع أبرز التكوينات). -
plugin غير مفعّل: تحقق من حالة plugin:
إذا أظهر “disabled”، فأضف
plugins.entries.googlechat.enabled: trueإلى التكوين. -
لم تتم إعادة تشغيل gateway: بعد إضافة التكوين، أعد تشغيل gateway:
مشكلات أخرى
- تحقق من
openclaw channels status --probeبحثًا عن أخطاء المصادقة أو غياب إعداد audience. - إذا لم تصل أي رسائل، فتأكد من عنوان URL الخاص بـ webhook لتطبيق Chat واشتراكات الأحداث.
- إذا كان تقييد الإشارة يمنع الردود، فاضبط
botUserعلى اسم مورد مستخدم التطبيق وتحقق منrequireMention. - استخدم
openclaw logs --followأثناء إرسال رسالة اختبار لمعرفة ما إذا كانت الطلبات تصل إلى gateway.
ذو صلة
- نظرة عامة على القنوات — جميع القنوات المدعومة
- Pairing — مصادقة الرسائل المباشرة وتدفق pairing
- المجموعات — سلوك الدردشة الجماعية وتقييد الإشارات
- توجيه القنوات — توجيه الجلسات للرسائل
- الأمان — نموذج الوصول والتقوية