Google Chat (Chat API)
الحالة: جاهز للرسائل المباشرة (DMs) + المساحات عبر Webhooks الخاصة بـ Google Chat API (HTTP فقط).إعداد سريع (للمبتدئين)
- أنشئ مشروعًا في Google Cloud وفعّل Google Chat API.
- انتقل إلى: Google Chat API Credentials
- فعّل واجهة برمجة التطبيقات إذا لم تكن مفعّلة بالفعل.
- أنشئ حساب خدمة:
- اضغط 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 في 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 واضبطه على عنوان Gateway العام متبوعًا بـ
/googlechat.- تلميح: شغّل
openclaw statusللعثور على عنوان Gateway العام.
- تلميح: شغّل
- ضمن Visibility، حدّد Make this Chat app available to specific people and groups in <Your Domain>.
- أدخل عنوان بريدك الإلكتروني (مثلًا:
[email protected]) في مربع النص. - انقر Save في الأسفل.
- املأ Application info:
- تفعيل حالة التطبيق:
- بعد الحفظ، حدّث الصفحة.
- ابحث عن قسم App status (غالبًا قرب الأعلى أو الأسفل بعد الحفظ).
- غيّر الحالة إلى Live - available to users.
- انقر Save مرة أخرى.
- هيّئ OpenClaw بمسار حساب الخدمة + جمهور الـ webhook:
- متغير البيئة:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - أو التهيئة:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- متغير البيئة:
- اضبط نوع وقيمة جمهور الـ webhook (يطابق إعداد تطبيق Chat).
- ابدأ تشغيل Gateway. سيقوم Google Chat بإرسال طلبات POST إلى مسار الـ webhook لديك.
الإضافة إلى Google Chat
بمجرد تشغيل Gateway وإضافة بريدك الإلكتروني إلى قائمة الظهور:- انتقل إلى Google Chat.
- انقر أيقونة + (الزائد) بجوار Direct Messages.
- في شريط البحث (حيث تضيف الأشخاص عادةً)، اكتب اسم التطبيق الذي هيّأته في Google Cloud Console.
- ملاحظة: لن يظهر الروبوت في قائمة التصفّح «Marketplace» لأنه تطبيق خاص. يجب البحث عنه بالاسم.
- اختر الروبوت من النتائج.
- انقر Add أو Chat لبدء محادثة 1:1.
- أرسل «Hello» لتشغيل المساعد!
العنوان العام (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: إذا طُلب منك، زر عنوان التفويض الظاهر في المخرجات لتمكين 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.
الخيار B: وكيل عكسي (Caddy)
إذا كنت تستخدم وكيلًا عكسيًا مثل Caddy، فقم بتمرير المسار المحدد فقط:your-domain.com/ أو إرجاع 404، بينما يتم توجيه your-domain.com/googlechat بأمان إلى OpenClaw.
الخيار C: نفق Cloudflare
هيّئ قواعد الإدخال (ingress) للنفق لديك لتوجيه مسار الـ webhook فقط:- المسار:
/googlechat->http://localhost:18789/googlechat - القاعدة الافتراضية: HTTP 404 (غير موجود)
كيف يعمل
- يرسل Google Chat طلبات POST للـ webhook إلى Gateway. يتضمن كل طلب ترويسة
Authorization: Bearer <token>. - يتحقق OpenClaw من الرمز المميّز مقابل
audienceType+audienceالمُهيّأين:audienceType: "app-url"→ الجمهور هو عنوان HTTPS الخاص بالـ webhook.audienceType: "project-number"→ الجمهور هو رقم مشروع Cloud.
- يتم توجيه الرسائل حسب المساحة:
- تستخدم الرسائل المباشرة مفتاح الجلسة
agent:<agentId>:googlechat:dm:<spaceId>. - تستخدم المساحات مفتاح الجلسة
agent:<agentId>:googlechat:group:<spaceId>.
- تستخدم الرسائل المباشرة مفتاح الجلسة
- الوصول للرسائل المباشرة يكون بالاقتران افتراضيًا. يتلقى المُرسِلون غير المعروفين رمز اقتران؛ وافق باستخدام:
openclaw pairing approve googlechat <code>
- تتطلب المساحات الجماعية ذكر @ افتراضيًا. استخدم
botUserإذا احتاج اكتشاف الذِكر إلى اسم مستخدم التطبيق.
الأهداف
استخدم هذه المعرّفات للتسليم وقوائم السماح:- الرسائل المباشرة:
users/<userId>أوusers/<email>(تُقبل عناوين البريد الإلكتروني). - مهمل: يُعامَل
users/<email>كمعرّف مستخدم، وليس كقائمة سماح للبريد الإلكتروني. - المساحات:
spaces/<spaceId>.
أبرز نقاط التهيئة
- يمكن تمرير بيانات اعتماد حساب الخدمة أيضًا مضمنة باستخدام
serviceAccount(سلسلة JSON). - مسار الـ webhook الافتراضي هو
/googlechatإذا لم يتم تعيينwebhookPath. - تتوفر التفاعلات عبر أداة
reactionsوchannels actionعند تمكينactions.reactions. - يدعم
typingIndicatorكُلًا منnoneوmessage(الافتراضي) وreaction(يتطلب التفاعل OAuth للمستخدم). - يتم تنزيل المرفقات عبر Chat API وتخزينها في خط أنابيب الوسائط (الحجم مُقيّد بواسطة
mediaMaxMb).
استكشاف الأخطاء وإصلاحها
405 Method Not Allowed
إذا أظهر Google Cloud Logs Explorer أخطاء مثل:-
القناة غير مُهيّأة: قسم
channels.googlechatمفقود من تهيئتك. تحقّق باستخدام:إذا أعاد «Config path not found»، فأضِف التهيئة (انظر أبرز نقاط التهيئة). -
الإضافة غير مُمكّنة: تحقّق من حالة الإضافة:
إذا أظهرت «disabled»، فأضِف
plugins.entries.googlechat.enabled: trueإلى تهيئتك. -
لم تتم إعادة تشغيل Gateway: بعد إضافة التهيئة، أعد تشغيل Gateway:
مشكلات أخرى
- تحقّق من
openclaw channels status --probeلأخطاء المصادقة أو نقص إعداد الجمهور. - إذا لم تصل أي رسائل، أكّد عنوان الـ webhook + اشتراكات الأحداث في تطبيق Chat.
- إذا منعت بوابة الذِكر الردود، اضبط
botUserعلى اسم مورد مستخدم التطبيق وتحقق منrequireMention. - استخدم
openclaw logs --followأثناء إرسال رسالة اختبار لمعرفة ما إذا كانت الطلبات تصل إلى Gateway.