Mainstream messaging
Google Chat
الحالة: Plugin قابل للتنزيل للرسائل المباشرة + المساحات عبر Webhook الخاصة بـ 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 إذا لم يكن مفعّلًا بالفعل.
- أنشئ حساب خدمة:
- اضغط إنشاء بيانات اعتماد > حساب خدمة.
- سمّه بأي اسم تريده (مثل
openclaw-chat). - اترك الأذونات فارغة (اضغط متابعة).
- اترك الجهات الرئيسية ذات الوصول فارغة (اضغط تم).
- أنشئ مفتاح JSON ونزّله:
- في قائمة حسابات الخدمة، انقر على الحساب الذي أنشأته للتو.
- انتقل إلى تبويب المفاتيح.
- انقر إضافة مفتاح > إنشاء مفتاح جديد.
- حدّد JSON واضغط إنشاء.
- خزّن ملف 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>. - أدخل عنوان بريدك الإلكتروني (مثل
[email protected]) في مربع النص. - انقر حفظ في الأسفل.
- املأ معلومات التطبيق:
- فعّل حالة التطبيق:
- بعد الحفظ، حدّث الصفحة.
- ابحث عن قسم حالة التطبيق (غالبًا قرب الأعلى أو الأسفل بعد الحفظ).
- غيّر الحالة إلى مباشر - متاح للمستخدمين.
- انقر حفظ مرة أخرى.
- اضبط 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.
- انقر أيقونة + (زائد) بجانب الرسائل المباشرة.
- في شريط البحث (حيث تضيف الأشخاص عادةً)، اكتب اسم التطبيق الذي أعددته في Google Cloud Console.
- ملاحظة: لن يظهر البوت في قائمة تصفح "Marketplace" لأنه تطبيق خاص. يجب البحث عنه بالاسم.
- حدّد البوت من النتائج.
- انقر إضافة أو دردشة لبدء محادثة 1:1.
- أرسل "مرحبًا" لتشغيل المساعد!
الرابط العام (Webhook فقط)
تتطلب Webhook الخاصة بـ Google Chat نقطة نهاية HTTPS عامة. للأمان، اعرض مسار /googlechat فقط على الإنترنت. أبقِ لوحة تحكم OpenClaw ونقاط النهاية الحساسة الأخرى على شبكتك الخاصة.
الخيار أ: Tailscale Funnel (موصى به)
استخدم Tailscale Serve للوحة التحكم الخاصة وFunnel لمسار Webhook العام. هذا يُبقي / خاصًا مع عرض /googlechat فقط.
-
تحقق من العنوان الذي يرتبط به Gateway لديك:
ss -tlnp | grep 18789لاحظ عنوان IP (مثل
127.0.0.1أو0.0.0.0أو عنوان Tailscale IP لديك مثل100.x.x.x). -
اعرض لوحة التحكم على tailnet فقط (المنفذ 8443):
# 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 فقط للعامة:
# 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 -
خوّل Node للوصول إلى Funnel: إذا طُلب منك ذلك، زُر رابط التخويل المعروض في المخرجات لتمكين Funnel لهذا Node في سياسة tailnet لديك.
-
تحقق من الإعداد:
tailscale serve status tailscale 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
اضبط قواعد الدخول للنفق بحيث تمرّر مسار Webhook فقط:
- المسار:
/googlechat->http://localhost:18789/googlechat - القاعدة الافتراضية: HTTP 404 (غير موجود)
طريقة العمل
- يرسل Google Chat طلبات POST الخاصة بـ Webhook إلى 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>
- تتطلب المساحات الجماعية ذكر @ افتراضيًا. استخدم
botUserإذا كان كشف الذكر يحتاج إلى اسم مستخدم التطبيق.
الأهداف
استخدم هذه المعرّفات للتسليم وقوائم السماح:
- الرسائل المباشرة:
users/<userId>(موصى به). - البريد الإلكتروني الخام
[email protected]قابل للتغيير ولا يُستخدم إلا لمطابقة قائمة السماح المباشرة عندما يكون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
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مفعّلًا. - تكشف إجراءات الرسائل
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 أخطاء مثل:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowed
فهذا يعني أن معالج Webhook غير مسجّل. الأسباب الشائعة:
-
القناة غير مكوّنة: قسم
channels.googlechatمفقود من إعداداتك. تحقق باستخدام:openclaw config get channels.googlechatإذا أعاد "Config path not found"، فأضف الإعداد (راجع أبرز الإعدادات).
-
Plugin غير مفعّل: تحقق من حالة Plugin:
openclaw plugins list | grep googlechatإذا أظهر "disabled"، فأضف
plugins.entries.googlechat.enabled: trueإلى إعداداتك. -
لم تتم إعادة تشغيل Gateway: بعد إضافة الإعداد، أعد تشغيل Gateway:
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.
مستندات ذات صلة:
ذو صلة
- نظرة عامة على القنوات — كل القنوات المدعومة
- الاقتران — مصادقة الرسائل المباشرة وتدفق الاقتران
- المجموعات — سلوك الدردشة الجماعية وحاجز الذكر
- توجيه القنوات — توجيه الجلسات للرسائل
- الأمان — نموذج الوصول والتقوية