التثبيت
ثبّت Google Chat قبل تهيئة القناة:الإعداد السريع (للمبتدئين)
- أنشئ مشروع 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 لديك:
لاحظ عنوان IP (مثلًا،
127.0.0.1أو0.0.0.0أو عنوان Tailscale IP لديك مثل100.x.x.x). -
اكشف لوحة المعلومات للـ tailnet فقط (المنفذ 8443):
-
اكشف مسار Webhook فقط للعامة:
- صرّح للعقدة بالوصول إلى Funnel: إذا طُلب منك ذلك، افتح رابط التفويض المعروض في المخرجات لتمكين Funnel لهذه العقدة في سياسة tailnet لديك.
-
تحقّق من التهيئة:
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/ أو إرجاعه كـ 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>.
أبرز نقاط التهيئة
- يمكن أيضًا تمرير بيانات اعتماد حساب الخدمة مباشرةً باستخدام
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 أخطاء مثل:-
القناة غير مهيّأة: قسم
channels.googlechatمفقود من التهيئة لديك. تحقّق باستخدام:إذا أعاد “Config path not found”، فأضف التهيئة (راجع أبرز نقاط التهيئة). -
Plugin غير مفعّل: تحقّق من حالة Plugin:
إذا عرض “disabled”، فأضف
plugins.entries.googlechat.enabled: trueإلى التهيئة لديك. -
لم يُعد تشغيل Gateway: بعد إضافة التهيئة، أعد تشغيل Gateway:
مشكلات أخرى
- افحص
openclaw channels status --probeبحثًا عن أخطاء المصادقة أو تهيئة الجمهور المفقودة. - إذا لم تصل أي رسائل، فتأكد من رابط Webhook الخاص بتطبيق Chat + اشتراكات الأحداث.
- إذا منعت بوابة الإشارات الردود، فاضبط
botUserعلى اسم مورد مستخدم التطبيق وتحقق منrequireMention. - استخدم
openclaw logs --followأثناء إرسال رسالة اختبار لمعرفة ما إذا كانت الطلبات تصل إلى Gateway.
ذات صلة
- نظرة عامة على القنوات — جميع القنوات المدعومة
- الاقتران — مصادقة الرسائل المباشرة وتدفق الاقتران
- المجموعات — سلوك دردشة المجموعات وبوابة الإشارات
- توجيه القنوات — توجيه الجلسات للرسائل
- الأمان — نموذج الوصول والتقوية