- لا ينضم إلا إلى عنوان URL صريح بصيغة
https://meet.google.com/.... - يمكنه إنشاء مساحة Meet جديدة عبر Google Meet API، ثم الانضمام إلى عنوان URL المُعاد.
agentهو وضع الرد الصوتي الافتراضي: يستمع النسخ الفوري، ويجيب وكيل OpenClaw المُكوَّن، ويتحدث OpenClaw TTS العادي داخل Meet.- يظل
bidiمتاحًا كوضع احتياطي لنموذج الصوت الفوري المباشر. - تختار الوكلاء سلوك الانضمام باستخدام
mode: استخدمagentللاستماع/الرد الصوتي المباشر، أوbidiكاحتياطي صوت فوري مباشر، أوtranscribeللانضمام/التحكم في المتصفح دون جسر الرد الصوتي. - تبدأ المصادقة كـ Google OAuth شخصي أو كملف Chrome شخصي مسجّل دخوله مسبقًا.
- لا يوجد إعلان موافقة تلقائي.
- واجهة الصوت الافتراضية في Chrome هي
BlackHole 2ch. - يمكن تشغيل Chrome محليًا أو على مضيف Node مقترن.
- يقبل Twilio رقم اتصال هاتفي مع PIN اختياري أو تسلسل DTMF؛ ولا يمكنه الاتصال بعنوان URL لـ Meet مباشرة.
- أمر CLI هو
googlemeet؛ وmeetمحجوز لتدفقات مؤتمرات الوكلاء الأوسع.
البدء السريع
ثبّت تبعيات الصوت المحلية واضبط مزود نسخ فوريًا إضافةً إلى OpenClaw TTS العادي. OpenAI هو مزود النسخ الافتراضي؛ ويعمل Google Gemini Live أيضًا كاحتياطي صوتbidi منفصل مع realtime.voiceProvider: "google":
blackhole-2ch جهاز الصوت الافتراضي BlackHole 2ch. يتطلب مثبّت
Homebrew إعادة تشغيل قبل أن يعرض macOS الجهاز:
--mode transcribe؛ يتخطى هذا الوضع متطلبات
الصوت الفوري لأنه لا يستمع عبر الجسر ولا يتحدث عبره:
voice-call
وبيانات اعتماد Twilio وتعرّض الـ Webhook العام جاهزة. تعامل مع أي فحص
ok: false كحاجز للنقل والوضع المفحوصين قبل أن تطلب من وكيل الانضمام.
استخدم openclaw googlemeet setup --json للسكربتات أو المخرجات القابلة
للقراءة آليًا. استخدم --transport chrome أو --transport chrome-node أو
--transport twilio لإجراء فحص مسبق لنقل محدد قبل أن يجربه وكيل.
بالنسبة إلى Twilio، أجرِ دائمًا فحصًا مسبقًا للنقل صراحةً عندما يكون النقل
الافتراضي هو Chrome:
voice-call، أو بيانات اعتماد Twilio، أو تعرّض Webhook
غير القابل للوصول قبل أن يحاول الوكيل الاتصال بالاجتماع.
انضم إلى اجتماع:
google_meet:
google_meet الموجهة للوكلاء متاحة على مضيفين غير macOS لتدفقات
الأثر، والتقويم، والإعداد، والنسخ، وTwilio، وchrome-node. تُحظر إجراءات
الرد الصوتي المحلية في Chrome هناك لأن مسار صوت Chrome المضمّن يعتمد حاليًا
على BlackHole 2ch في macOS. على Linux، استخدم mode: "transcribe"، أو
الاتصال الهاتفي عبر Twilio، أو مضيف chrome-node يعمل على macOS للمشاركة
بالرد الصوتي عبر Chrome.
أنشئ اجتماعًا جديدًا وانضم إليه:
SpaceConfig.accessType
عندما تريد أن تكون سياسة عدم الطرق الخاصة بالغرفة صريحة بدلًا من وراثتها من
افتراضات حساب Google:
OPEN لأي شخص لديه عنوان URL لـ Meet بالانضمام دون طرق. يسمح TRUSTED
للمستخدمين الموثوقين في مؤسسة المضيف، والمستخدمين الخارجيين المدعوين،
ومستخدمي الاتصال الهاتفي بالانضمام دون طرق. يقيّد RESTRICTED الدخول دون
طرق على المدعوين. تنطبق هذه الإعدادات فقط على مسار الإنشاء الرسمي عبر
Google Meet API، لذلك يجب ضبط بيانات اعتماد OAuth.
إذا صادقت Google Meet قبل إتاحة هذا الخيار، فأعد تشغيل
openclaw googlemeet auth login --json بعد إضافة نطاق
meetings.space.settings إلى شاشة موافقة Google OAuth لديك.
أنشئ عنوان URL فقط دون الانضمام:
googlemeet create مساران:
- إنشاء API: يُستخدم عند ضبط بيانات اعتماد Google Meet OAuth. هذا هو المسار الأكثر حتمية ولا يعتمد على حالة واجهة المتصفح.
- احتياطي المتصفح: يُستخدم عند غياب بيانات اعتماد OAuth. يستخدم OpenClaw
Chrome Node المثبت، ويفتح
https://meet.google.com/new، وينتظر أن يعيد Google التوجيه إلى عنوان URL حقيقي برمز اجتماع، ثم يعيد ذلك العنوان. يتطلب هذا المسار أن يكون ملف Chrome الشخصي الخاص بـ OpenClaw على الـ Node مسجّل الدخول مسبقًا إلى Google. تتعامل أتمتة المتصفح مع مطالبة الميكروفون الأولى الخاصة بـ Meet؛ ولا تُعامل تلك المطالبة كفشل تسجيل دخول إلى Google. تحاول تدفقات الانضمام والإنشاء أيضًا إعادة استخدام تبويب Meet موجود قبل فتح تبويب جديد. تتجاهل المطابقة سلاسل استعلام URL غير الضارة مثلauthuser، لذلك ينبغي أن يركز إعادة المحاولة من الوكيل على الاجتماع المفتوح مسبقًا بدلًا من إنشاء تبويب Chrome ثانٍ.
source (api أو browser) حتى تتمكن
الوكلاء من شرح المسار المستخدم. ينضم create إلى الاجتماع الجديد افتراضيًا
ويعيد joined: true إضافةً إلى جلسة الانضمام. لاستخراج عنوان URL فقط،
استخدم create --no-join في CLI أو مرر "join": false إلى الأداة.
أو قل لوكيل: “أنشئ Google Meet، وانضم إليه بوضع الرد الصوتي الخاص بالوكيل،
وأرسل لي الرابط.” ينبغي للوكيل استدعاء google_meet مع
action: "create" ثم مشاركة meetingUri المُعاد.
"mode": "transcribe". لا يبدأ ذلك
جسر الصوت الفوري ثنائي الاتجاه، ولا يتطلب BlackHole أو SoX، ولن يرد صوتيًا
داخل الاجتماع. تتجنب انضمامات Chrome في هذا الوضع أيضًا منح إذن
الميكروفون/الكاميرا من OpenClaw وتتجنب مسار Meet Use microphone. إذا عرض
Meet فاصلة اختيار الصوت، تحاول الأتمتة مسار عدم استخدام الميكروفون، وإلا
تبلغ عن إجراء يدوي بدلًا من فتح الميكروفون المحلي. في وضع النسخ، تثبّت
وسائل نقل Chrome المُدارة أيضًا مراقب تسميات توضيحية لـ Meet بأفضل جهد.
يعرض googlemeet status --json وgooglemeet doctor قيم captioning،
وcaptionsEnabledAttempted، وtranscriptLines، وlastCaptionAt،
وlastCaptionSpeaker، وlastCaptionText، وذيل recentTranscript قصيرًا
حتى يتمكن المشغّلون من معرفة ما إذا كان المتصفح قد انضم إلى المكالمة وما إذا
كانت تسميات Meet التوضيحية تنتج نصًا.
استخدم openclaw googlemeet test-listen <meet-url> --transport chrome-node
عندما تحتاج إلى فحص نعم/لا: ينضم في وضع النسخ، وينتظر حركة جديدة في التسمية
التوضيحية أو النص المنسوخ، ويعيد listenVerified، وlistenTimedOut، وحقول
الإجراء اليدوي، وآخر حالة لصحة التسميات التوضيحية.
أثناء الجلسات الفورية، تتضمن حالة google_meet صحة المتصفح وجسر الصوت مثل
inCall، وmanualActionRequired، وproviderConnected، وrealtimeReady،
وaudioInputActive، وaudioOutputActive، والطوابع الزمنية لآخر إدخال/إخراج،
وعدادات البايت، وحالة إغلاق الجسر. إذا ظهرت مطالبة آمنة في صفحة Meet،
تتعامل معها أتمتة المتصفح عندما تستطيع. يُبلغ عن مطالبات تسجيل الدخول،
وقبول المضيف، وأذونات المتصفح/نظام التشغيل كإجراء يدوي مع سبب ورسالة لكي
ينقلها الوكيل. لا تصدر جلسات Chrome المُدارة عبارة المقدمة أو الاختبار إلا
بعد أن تبلغ صحة المتصفح inCall: true؛ وإلا تعرض الحالة speechReady: false
وتُحظر محاولة الكلام بدلًا من التظاهر بأن الوكيل تحدث داخل الاجتماع.
تنضم جلسات Chrome المحلية عبر ملف متصفح OpenClaw الشخصي مسجّل الدخول. يتطلب
الوضع الفوري BlackHole 2ch لمسار الميكروفون/مكبر الصوت الذي يستخدمه
OpenClaw. للحصول على صوت ثنائي الاتجاه نظيف، استخدم أجهزة افتراضية منفصلة
أو رسمًا بيانيًا بنمط Loopback؛ يكفي جهاز BlackHole واحد لاختبار دخان أولي
لكنه قد يسبب صدى.
Gateway محلي + Chrome في Parallels
لا تحتاج إلى Gateway كامل من OpenClaw أو مفتاح model API داخل جهاز macOS افتراضي لمجرد أن تجعل الجهاز الافتراضي يمتلك Chrome. شغّل Gateway والوكيل محليًا، ثم شغّل مضيف Node داخل الجهاز الافتراضي. فعّل الـ Plugin المضمّن على الجهاز الافتراضي مرة واحدة حتى يعلن الـ Node عن أمر Chrome: ما الذي يعمل وأين:- مضيف Gateway: OpenClaw Gateway، ومساحة عمل الوكيل، ومفاتيح model/API، ومزود الوقت الفوري، وضبط Plugin Google Meet.
- جهاز Parallels macOS الافتراضي: OpenClaw CLI/مضيف Node، وGoogle Chrome، وSoX، وBlackHole 2ch، وملف Chrome شخصي مسجّل الدخول إلى Google.
- غير مطلوب في الجهاز الافتراضي: خدمة Gateway، أو ضبط الوكيل، أو مفتاح OpenAI/GPT، أو إعداد مزود النموذج.
BlackHole 2ch:
<gateway-host> عنوان IP على LAN ولا تستخدم TLS، يرفض الـ Node
اتصال WebSocket غير المشفر ما لم تشترك صراحةً في تلك الشبكة الخاصة الموثوقة:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 هو بيئة العملية، وليس إعدادًا في
openclaw.json. يخزّنه openclaw node install في بيئة LaunchAgent عندما
يكون موجودًا في أمر التثبيت.
وافق على الـ Node من مضيف Gateway:
googlemeet.chrome وقدرة
المتصفح/browser.proxy:
google_meet مع transport: "chrome-node".
لاختبار دخان بأمر واحد ينشئ جلسة أو يعيد استخدامها، ويتحدث بعبارة معروفة،
ويطبع صحة الجلسة:
manualActionRequired: true مع manualActionReason و
manualActionMessage. يجب على الوكلاء إيقاف إعادة محاولة الانضمام، والإبلاغ عن تلك
الرسالة بالضبط بالإضافة إلى browserUrl/browserTitle الحاليين، وإعادة المحاولة فقط بعد
اكتمال إجراء المتصفح اليدوي.
إذا حُذف chromeNode.node، فإن OpenClaw يحدد تلقائيًا فقط عندما تعلن عقدة
متصلة واحدة بالضبط عن كل من googlemeet.chrome والتحكم في المتصفح. إذا كانت
عدة عقد قادرة متصلة، فاضبط chromeNode.node على معرف العقدة،
أو اسم العرض، أو عنوان IP البعيد.
فحوصات الفشل الشائعة:
Configured Google Meet node ... is not usable: offline: العقدة المثبتة معروفة لدى Gateway لكنها غير متاحة. يجب على الوكلاء التعامل مع تلك العقدة باعتبارها حالة تشخيصية، لا مضيف Chrome قابلًا للاستخدام، والإبلاغ عن عائق الإعداد بدلًا من الرجوع إلى نقل آخر ما لم يطلب المستخدم ذلك.No connected Google Meet-capable node: شغّلopenclaw node runفي VM، وافق على الاقتران، وتأكد من تشغيلopenclaw plugins enable google-meetوopenclaw plugins enable browserفي VM. تأكد أيضًا من أن مضيف Gateway يسمح بأمري العقدة معًا عبرgateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"].BlackHole 2ch audio device not found: ثبّتblackhole-2chعلى المضيف الذي يجري فحصه وأعد التشغيل قبل استخدام صوت Chrome المحلي.BlackHole 2ch audio device not found on the node: ثبّتblackhole-2chفي VM وأعد تشغيل VM.- يفتح Chrome لكنه لا يستطيع الانضمام: سجّل الدخول إلى ملف تعريف المتصفح داخل VM، أو
أبقِ
chrome.guestNameمضبوطًا لانضمام الضيف. يستخدم الانضمام التلقائي للضيف أتمتة متصفح OpenClaw عبر وكيل متصفح العقدة؛ تأكد من أن إعداد متصفح العقدة يشير إلى ملف التعريف الذي تريده، مثلbrowser.defaultProfile: "user"أو ملف تعريف جلسة قائمة مسمى. - تبويبات Meet مكررة: اترك
chrome.reuseExistingTab: trueمفعّلًا. يفعّل OpenClaw تبويبًا قائمًا لعنوان Meet URL نفسه قبل فتح تبويب جديد، كما أن إنشاء الاجتماع عبر المتصفح يعيد استخدام تبويبhttps://meet.google.com/newقيد التقدم أو تبويب مطالبة حساب Google قبل فتح تبويب آخر. - لا يوجد صوت: في Meet، وجّه صوت الميكروفون/السماعة عبر مسار جهاز الصوت الافتراضي الذي يستخدمه OpenClaw؛ استخدم أجهزة افتراضية منفصلة أو توجيهًا بنمط Loopback للحصول على صوت ثنائي الاتجاه نظيف.
ملاحظات التثبيت
يستخدم الإعداد الافتراضي لرد Chrome الصوتي أداتين خارجيتين:sox: أداة صوتية لسطر الأوامر. يستخدم Plugin أوامر جهاز CoreAudio صريحة لجسر الصوت الافتراضي PCM16 بتردد 24 كيلوهرتز.blackhole-2ch: مشغل صوت افتراضي لنظام macOS. ينشئ جهاز الصوتBlackHole 2chالذي يمكن لـ Chrome/Meet التوجيه عبره.
LGPL-2.0-only AND GPL-2.0-only؛ وBlackHole مرخص بموجب GPL-3.0. إذا أنشأت
مثبّتًا أو جهازًا يضمّن BlackHole مع OpenClaw، فراجع شروط ترخيص BlackHole
من المصدر الأصلي أو احصل على ترخيص منفصل من Existential Audio.
وسائل النقل
Chrome
يفتح نقل Chrome عنوان Meet URL عبر تحكم متصفح OpenClaw وينضم بملف تعريف متصفح OpenClaw المسجل الدخول. على macOS، يفحص Plugin وجودBlackHole 2ch قبل التشغيل. وإذا كان مهيأً، فإنه يشغّل أيضًا أمر صحة جسر الصوت
وأمر بدء التشغيل قبل فتح Chrome. استخدم chrome عندما يكون Chrome/الصوت
على مضيف Gateway؛ واستخدم chrome-node عندما يكون Chrome/الصوت
على عقدة مقترنة مثل Parallels macOS VM. بالنسبة إلى Chrome المحلي، اختر
ملف التعريف باستخدام browser.defaultProfile؛ ويُمرر chrome.browserProfile إلى
مضيفي chrome-node.
BlackHole 2ch مثبتًا، يفشل الانضمام بخطأ إعداد
بدلًا من الانضمام بصمت من دون مسار صوتي.
Twilio
نقل Twilio هو خطة اتصال صارمة مفوضة إلى Plugin المكالمات الصوتية. وهو لا يحلل صفحات Meet لاستخراج أرقام الهاتف. استخدم هذا عندما لا تكون مشاركة Chrome متاحة أو عندما تريد خيار رجوع للاتصال الهاتفي. يجب أن يعرض Google Meet رقم اتصال هاتفي ورقم PIN للاجتماع؛ لا يكتشف OpenClaw هذه المعلومات من صفحة Meet. فعّل Plugin المكالمات الصوتية على مضيف Gateway، وليس على عقدة Chrome:openclaw.json:
realtime.provider: "openai" مع Plugin مزود OpenAI و
OPENAI_API_KEY بدلًا من ذلك إذا كان هذا هو مزود الصوت الفوري لديك.
أعد تشغيل Gateway أو أعد تحميله بعد تفعيل voice-call؛ لا تظهر تغييرات إعداد Plugin
في عملية Gateway قيد التشغيل بالفعل حتى يُعاد تحميلها.
ثم تحقق:
googlemeet setup فحوصات ناجحة
لـ twilio-voice-call-plugin وtwilio-voice-call-credentials و
twilio-voice-call-webhook.
--dtmf-sequence عندما يحتاج الاجتماع إلى تسلسل مخصص:
OAuth والفحص المسبق
OAuth اختياري لإنشاء رابط Meet لأنgooglemeet create يمكنه الرجوع
إلى أتمتة المتصفح. هيّئ OAuth عندما تريد الإنشاء عبر API الرسمي،
أو حل المساحات، أو فحوصات Meet Media API المسبقة.
يستخدم الوصول إلى Google Meet API OAuth الخاص بالمستخدم: أنشئ عميل Google Cloud OAuth،
واطلب النطاقات المطلوبة، وفوّض حساب Google، ثم خزّن
رمز التحديث الناتج في إعداد Plugin Google Meet أو وفّر
متغيرات البيئة OPENCLAW_GOOGLE_MEET_*.
لا يستبدل OAuth مسار انضمام Chrome. لا تزال وسائل نقل Chrome وChrome-node
تنضم عبر ملف تعريف Chrome مسجل الدخول، وBlackHole/SoX، وعقدة متصلة
عندما تستخدم مشاركة المتصفح. OAuth مخصص فقط لمسار Google Meet API
الرسمي: إنشاء مساحات الاجتماعات، وحل المساحات، وتشغيل فحوصات Meet Media API
المسبقة.
إنشاء بيانات اعتماد Google
في Google Cloud Console:- أنشئ مشروع Google Cloud أو حدده.
- فعّل Google Meet REST API لذلك المشروع.
-
هيّئ شاشة موافقة OAuth.
- Internal هو الأبسط لمؤسسة Google Workspace.
- External يعمل لإعدادات الاختبار/الشخصية؛ ما دام التطبيق في Testing، أضف كل حساب Google سيفوّض التطبيق كمستخدم اختبار.
-
أضف النطاقات التي يطلبها OpenClaw:
https://www.googleapis.com/auth/meetings.space.createdhttps://www.googleapis.com/auth/meetings.space.readonlyhttps://www.googleapis.com/auth/meetings.space.settingshttps://www.googleapis.com/auth/meetings.conference.media.readonly
-
أنشئ معرف عميل OAuth.
- نوع التطبيق: Web application.
-
عنوان URI لإعادة التوجيه المصرح به:
- انسخ معرف العميل وسر العميل.
meetings.space.created مطلوب من Google Meet spaces.create.
يتيح meetings.space.readonly لـ OpenClaw حل عناوين/رموز Meet URL إلى مساحات.
يتيح meetings.space.settings لـ OpenClaw تمرير إعدادات SpaceConfig مثل
accessType أثناء إنشاء الغرفة عبر API.
meetings.conference.media.readonly مخصص لفحص Meet Media API المسبق وعمل الوسائط؛
قد تتطلب Google التسجيل في Developer Preview لاستخدام Media API فعليًا.
إذا كنت تحتاج فقط إلى انضمامات Chrome المستندة إلى المتصفح، فتجاوز OAuth بالكامل.
إصدار رمز التحديث
هيّئoauth.clientId واختياريًا oauth.clientSecret، أو مررهما
كمتغيرات بيئة، ثم شغّل:
oauth تحتوي على رمز تحديث. يستخدم PKCE،
واستدعاء localhost على http://localhost:8085/oauth2callback، وتدفق
نسخ/لصق يدويًا مع --manual.
أمثلة:
oauth ضمن إعداد Plugin Google Meet:
openclaw googlemeet auth login --json حتى يحصل رمز التحديث
على نطاق meetings.space.created.
التحقق من OAuth باستخدام doctor
شغّل doctor الخاص بـ OAuth عندما تريد فحص صحة سريعًا بلا أسرار:ok وconfigured و
tokenSource وexpiresAt ورسائل الفحص؛ ولا يطبع رمز الوصول
أو رمز التحديث أو سر العميل.
النتائج الشائعة:
| الفحص | المعنى |
|---|---|
oauth-config | يوجد oauth.clientId مع oauth.refreshToken، أو رمز وصول مخزن مؤقتا. |
oauth-token | لا يزال رمز الوصول المخزن مؤقتا صالحا، أو أصدر رمز التحديث رمز وصول جديدا. |
meet-spaces-get | نجح فحص --meeting الاختياري في حل مساحة Meet موجودة. |
meet-spaces-create | أنشأ فحص --create-space الاختياري مساحة Meet جديدة. |
spaces.create أيضا، شغل فحص الإنشاء ذي
الأثر الجانبي:
--create-space عنوان URL مؤقتا لتطبيق Meet. استخدمه عندما تحتاج إلى تأكيد
أن مشروع Google Cloud فعّل Meet API وأن الحساب المصرح له يملك نطاق
meetings.space.created.
لإثبات صلاحية القراءة لمساحة اجتماع موجودة:
doctor --oauth --meeting وresolve-space صلاحية القراءة لمساحة موجودة
يمكن لحساب Google المصرح له الوصول إليها. تعني استجابة 403 من هذه الفحوص عادة
أن Google Meet REST API معطل، أو أن رمز التحديث الذي تمت الموافقة عليه يفتقد
النطاق المطلوب، أو أن حساب Google لا يستطيع الوصول إلى مساحة Meet تلك. يعني خطأ
رمز التحديث إعادة تشغيل openclaw googlemeet auth login --json وتخزين كتلة oauth الجديدة.
لا حاجة إلى بيانات اعتماد OAuth للبديل عبر المتصفح. في هذا الوضع، تأتي مصادقة Google
من ملف Chrome الشخصي المسجل دخوله على العقدة المحددة، وليس من إعدادات
OpenClaw.
تقبل متغيرات البيئة هذه كبدائل:
OPENCLAW_GOOGLE_MEET_CLIENT_IDأوGOOGLE_MEET_CLIENT_IDOPENCLAW_GOOGLE_MEET_CLIENT_SECRETأوGOOGLE_MEET_CLIENT_SECRETOPENCLAW_GOOGLE_MEET_REFRESH_TOKENأوGOOGLE_MEET_REFRESH_TOKENOPENCLAW_GOOGLE_MEET_ACCESS_TOKENأوGOOGLE_MEET_ACCESS_TOKENOPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATأوGOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATOPENCLAW_GOOGLE_MEET_DEFAULT_MEETINGأوGOOGLE_MEET_DEFAULT_MEETINGOPENCLAW_GOOGLE_MEET_PREVIEW_ACKأوGOOGLE_MEET_PREVIEW_ACK
spaces/{id} عبر spaces.get:
--meeting، يستخدم artifacts وattendance أحدث سجل مؤتمر
افتراضيا. مرر --all-conference-records عندما تريد كل السجلات المحتفظ بها
لذلك الاجتماع.
يمكن لبحث التقويم حل عنوان URL للاجتماع من Google Calendar قبل قراءة
عناصر Meet:
--today في تقويم primary لليوم عن حدث Calendar يحتوي على رابط
Google Meet. استخدم --event <query> للبحث في نص الحدث المطابق، و
--calendar <id> لتقويم غير أساسي. يتطلب بحث التقويم تسجيل دخول OAuth جديدا
يتضمن نطاق القراءة فقط لأحداث Calendar.
يعرض calendar-events معاينة أحداث Meet المطابقة ويميز الحدث الذي سيختاره
latest أو artifacts أو attendance أو export.
إذا كنت تعرف بالفعل معرف سجل المؤتمر، فخاطبه مباشرة:
spaces.endActiveConference ويتطلب OAuth بنطاق
meetings.space.created لمساحة يمكن للحساب المصرح له إدارتها.
يقبل OpenClaw عنوان URL لتطبيق Meet، أو رمز اجتماع، أو إدخال spaces/{id} ويحله
إلى مورد مساحة API قبل إنهاء المؤتمر النشط.
وهو منفصل عن googlemeet leave: يوقف leave مشاركة OpenClaw المحلية/الجلسة،
بينما يطلب end-active-conference من Google Meet إنهاء المؤتمر النشط للمساحة.
اكتب تقريرا قابلا للقراءة:
artifacts بيانات تعريف سجل المؤتمر إضافة إلى بيانات تعريف موارد المشاركين،
والتسجيل، والنص المنسوخ، ومدخلات النص المنسوخ المنظمة، والملاحظات الذكية عندما
تكشفها Google للاجتماع. استخدم --no-transcript-entries لتخطي
البحث عن المدخلات للاجتماعات الكبيرة. يوسع attendance المشاركين إلى
صفوف جلسات مشارك مع أوقات أول/آخر ظهور، وإجمالي مدة الجلسة،
وعلامات التأخر/المغادرة المبكرة، ودمج موارد المشاركين المكررة بحسب المستخدم
المسجل دخوله أو اسم العرض. مرر --no-merge-duplicates لإبقاء موارد المشاركين
الأولية منفصلة، و--late-after-minutes لضبط اكتشاف التأخر، و
--early-before-minutes لضبط اكتشاف المغادرة المبكرة.
يكتب export مجلدا يحتوي على summary.md وattendance.csv و
transcript.md وartifacts.json وattendance.json وmanifest.json.
يسجل manifest.json الإدخال المختار، وخيارات التصدير، وسجلات المؤتمر،
وملفات الإخراج، والأعداد، ومصدر الرمز، وحدث Calendar عند استخدامه، وأي
تحذيرات استرجاع جزئية. مرر --zip لكتابة أرشيف قابل للنقل أيضا
بجوار المجلد. مرر --include-doc-bodies لتصدير نص Google Docs المرتبط بالنص
المنسوخ والملاحظات الذكية عبر Google Drive files.export؛ يتطلب ذلك
تسجيل دخول OAuth جديدا يتضمن نطاق القراءة فقط لـ Drive Meet. دون
--include-doc-bodies، تتضمن عمليات التصدير بيانات تعريف Meet ومدخلات النص
المنسوخ المنظمة فقط. إذا أعادت Google فشلا جزئيا في العناصر، مثل خطأ في
قائمة ملاحظات ذكية، أو مدخل نص منسوخ، أو جسم مستند Drive، يحتفظ الملخص و
البيان بالتحذير بدلا من إفشال التصدير كله.
استخدم --dry-run لجلب بيانات العناصر/الحضور نفسها وطباعة
JSON الخاص بالبيان دون إنشاء المجلد أو ZIP. يفيد ذلك قبل كتابة
تصدير كبير أو عندما يحتاج الوكيل فقط إلى الأعداد، والسجلات المختارة، و
التحذيرات.
يمكن للوكلاء أيضا إنشاء الحزمة نفسها عبر أداة google_meet:
"dryRun": true لإرجاع بيان التصدير فقط وتخطي كتابة الملفات.
يمكن للوكلاء أيضا إنشاء غرفة مدعومة بـ API بسياسة وصول صريحة:
test_listen قبل الادعاء بأن
الاجتماع مفيد:
- يفعّل
OPENCLAW_LIVE_TEST=1الاختبارات الحية المحروسة. - يشير
OPENCLAW_GOOGLE_MEET_LIVE_MEETINGإلى عنوان URL محتفظ به لتطبيق Meet، أو رمز، أوspaces/{id}. - يوفر
OPENCLAW_GOOGLE_MEET_CLIENT_IDأوGOOGLE_MEET_CLIENT_IDمعرف عميل OAuth. - يوفر
OPENCLAW_GOOGLE_MEET_REFRESH_TOKENأوGOOGLE_MEET_REFRESH_TOKENرمز التحديث. - اختياري: تستخدم
OPENCLAW_GOOGLE_MEET_CLIENT_SECRETوOPENCLAW_GOOGLE_MEET_ACCESS_TOKENوOPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATأسماء البدائل نفسها دون بادئةOPENCLAW_.
https://www.googleapis.com/auth/meetings.space.readonly و
https://www.googleapis.com/auth/meetings.conference.media.readonly. يحتاج بحث Calendar
إلى https://www.googleapis.com/auth/calendar.events.readonly. يحتاج تصدير
جسم مستند Drive إلى
https://www.googleapis.com/auth/drive.meet.readonly.
أنشئ مساحة Meet جديدة:
meeting uri الجديد، والمصدر، وجلسة الانضمام. باستخدام بيانات اعتماد OAuth
يستخدم Google Meet API الرسمي. ودون بيانات اعتماد OAuth يستخدم
ملف المتصفح الشخصي المسجل دخوله في عقدة Chrome المثبتة كبديل. يمكن للوكلاء
استخدام أداة google_meet مع action: "create" للإنشاء والانضمام في خطوة
واحدة. للإنشاء المقتصر على عنوان URL، مرر "join": false.
مثال على مخرجات JSON من بديل المتصفح:
google_meet تفاصيل منظمة بدلا من سلسلة نصية عادية:
manualActionRequired: true، ينبغي له الإبلاغ عن
manualActionMessage مع سياق عقدة/تبويب المتصفح والتوقف عن فتح تبويبات
Meet جديدة حتى يكمل المشغل خطوة المتصفح.
مثال على مخرجات JSON من إنشاء API:
manualActionRequired: true أو
خطأ رجوع للمتصفح، ويطلب من المشغل إكمال تسجيل الدخول إلى Google قبل
إعادة المحاولة.
عيّن preview.enrollmentAcknowledged: true فقط بعد التأكد من أن مشروع Cloud
وكيان OAuth الأساسي ومشاركي الاجتماع مسجلون في Google Workspace Developer Preview Program
لواجهات Meet media APIs.
الإعداد
لا يحتاج مسار وكيل Chrome الشائع إلا إلى تفعيل Plugin وBlackHole وSoX ومفتاح مزود نسخ فوري، ومزود TTS مهيأ في OpenClaw. OpenAI هو مزود النسخ الافتراضي؛ عيّنrealtime.voiceProvider إلى "google" وrealtime.model لاستخدام
Google Gemini Live لوضع bidi من دون تغيير مزود النسخ الافتراضي لوضع الوكيل:
plugins.entries.google-meet.config:
defaultTransport: "chrome"defaultMode: "agent"(يُقبل"realtime"فقط كاسم مستعار قديم للتوافق مع"agent"؛ يجب أن تستخدم استدعاءات الأدوات الجديدة"agent")chromeNode.node: معرف/اسم/IP اختياري للعقدة من أجلchrome-nodechrome.audioBackend: "blackhole-2ch"chrome.guestName: "OpenClaw Agent": الاسم المستخدم في شاشة ضيف Meet غير المسجل الدخولchrome.autoJoin: true: محاولة بأفضل جهد لملء اسم الضيف والنقر على Join Now عبر أتمتة متصفح OpenClaw علىchrome-nodechrome.reuseExistingTab: true: تفعيل تبويب Meet موجود بدلا من فتح نسخ مكررةchrome.waitForInCallMs: 20000: الانتظار حتى يبلغ تبويب Meet أنه داخل المكالمة قبل تشغيل مقدمة الرد الصوتيchrome.audioFormat: "pcm16-24khz": تنسيق صوت زوج الأوامر. استخدم"g711-ulaw-8khz"فقط لأزواج الأوامر القديمة/المخصصة التي لا تزال تصدر صوتا هاتفيا.chrome.audioBufferBytes: 4096: مخزن معالجة SoX المؤقت لأوامر صوت زوج أوامر Chrome المولدة. هذا يساوي نصف مخزن SoX الافتراضي البالغ 8192 بايت، ما يقلل كمون الأنبوب الافتراضي مع ترك مجال لزيادته على المضيفات المزدحمة. تُثبت القيم الأقل من حد SoX الأدنى عند 17 بايت.chrome.audioInputCommand: أمر SoX يقرأ من CoreAudioBlackHole 2chويكتب الصوت بتنسيقchrome.audioFormatchrome.audioOutputCommand: أمر SoX يقرأ الصوت بتنسيقchrome.audioFormatويكتب إلى CoreAudioBlackHole 2chchrome.bargeInInputCommand: أمر ميكروفون محلي اختياري يكتب PCM أحادي القناة signed 16-bit little-endian لاكتشاف مقاطعة الإنسان أثناء تشغيل صوت المساعد. ينطبق هذا حاليا على جسر زوج أوامرchromeالمستضاف على Gateway.chrome.bargeInRmsThreshold: 650: مستوى RMS الذي يُحتسب كمقاطعة بشرية علىchrome.bargeInInputCommandchrome.bargeInPeakThreshold: 2500: مستوى الذروة الذي يُحتسب كمقاطعة بشرية علىchrome.bargeInInputCommandchrome.bargeInCooldownMs: 900: أقل تأخير بين عمليات مسح المقاطعة البشرية المتكررةmode: "agent": وضع الرد الصوتي الافتراضي. يتم نسخ كلام المشاركين بواسطة مزود النسخ الفوري المهيأ، وإرساله إلى وكيل OpenClaw المهيأ في جلسة وكيل فرعي لكل اجتماع، ثم نطقه مرة أخرى عبر وقت تشغيل TTS العادي في OpenClaw.mode: "bidi": وضع رجوع لنموذج فوري ثنائي الاتجاه مباشر. يجيب مزود الصوت الفوري عن كلام المشاركين مباشرة وقد يستدعيopenclaw_agent_consultللحصول على إجابات أعمق/مدعومة بالأدوات.mode: "transcribe": وضع مراقبة فقط من دون جسر الرد الصوتي.realtime.provider: "openai": رجوع توافق يُستخدم عندما تكون حقول المزود المحددة أدناه غير مضبوطة.realtime.transcriptionProvider: "openai": معرف المزود الذي يستخدمه وضعagentللنسخ الفوري.realtime.voiceProvider: معرف المزود الذي يستخدمه وضعbidiللصوت الفوري المباشر. عيّن هذا إلى"google"لاستخدام Gemini Live مع إبقاء النسخ في وضع الوكيل على OpenAI.realtime.toolPolicy: "safe-read-only"realtime.instructions: ردود منطوقة موجزة، معopenclaw_agent_consultللإجابات الأعمقrealtime.introMessage: فحص جاهزية منطوق قصير عند اتصال الجسر الفوري؛ عيّنه إلى""للانضمام بصمتrealtime.agentId: معرف وكيل OpenClaw اختياري من أجلopenclaw_agent_consult؛ القيمة الافتراضية هيmain
messages.tts.providers.elevenlabs.speakerVoiceId. يمكن لردود الوكيل أيضا
استخدام توجيهات [[tts:speakerVoiceId=... model=eleven_v3]] لكل رد عند تفعيل
تجاوزات نموذج TTS، لكن الإعداد هو الافتراضي الحتمي للاجتماعات. عند الانضمام،
يجب أن تعرض السجلات transcriptionProvider=elevenlabs، ويجب أن يسجل كل رد
منطوق provider=elevenlabs model=eleven_v3 speakerVoiceId=<voiceId>.
إعداد Twilio فقط:
voiceCall.enabled هي true؛ ومع نقل Twilio يفوض
مكالمة PSTN الفعلية وDTMF وتحية المقدمة إلى Voice Call plugin. يشغل Voice Call
تسلسل DTMF قبل فتح دفق الوسائط الفوري، ثم يستخدم نص المقدمة المحفوظ كتحية
فورية أولية. إذا لم يكن voice-call مفعلا، فلا يزال بإمكان Google Meet
التحقق من خطة الاتصال وتسجيلها، لكنه لا يستطيع إجراء مكالمة Twilio.
الأداة
يمكن للوكلاء استخدام أداةgoogle_meet:
transport: "chrome" عندما يعمل Chrome على مضيف Gateway. استخدم
transport: "chrome-node" عندما يعمل Chrome على عقدة مقترنة مثل Parallels VM.
في الحالتين، تعمل مزودات النماذج وopenclaw_agent_consult على مضيف Gateway،
لذلك تبقى بيانات اعتماد النماذج هناك. مع القيمة الافتراضية mode: "agent"،
يتولى مزود النسخ الفوري الاستماع، وينتج وكيل OpenClaw المهيأ الإجابة، ثم
ينطقها TTS العادي في OpenClaw داخل Meet. استخدم mode: "bidi" عندما تريد أن
يجيب نموذج الصوت الفوري مباشرة. يبقى mode: "realtime" الخام مقبولا كاسم
مستعار قديم للتوافق مع mode: "agent"، لكنه لم يعد معروضا في مخطط أداة
الوكيل. تتضمن سجلات وضع الوكيل مزود/نموذج النسخ المحلول عند بدء الجسر، ومزود
TTS والنموذج والصوت وتنسيق الإخراج ومعدل العينة بعد كل رد مولد.
استخدم action: "status" لسرد الجلسات النشطة أو فحص معرف جلسة. استخدم
action: "speak" مع sessionId وmessage لجعل الوكيل الفوري يتكلم فورا.
استخدم action: "test_speech" لإنشاء الجلسة أو إعادة استخدامها، وتشغيل عبارة
معروفة، وإرجاع صحة inCall عندما يستطيع مضيف Chrome الإبلاغ عنها. يفرض
test_speech دائما mode: "agent" ويفشل إذا طُلب منه العمل في
mode: "transcribe" لأن جلسات المراقبة فقط لا يمكنها عمدا إصدار الكلام.
تستند نتيجة speechOutputVerified إلى زيادة بايتات إخراج الصوت الفوري أثناء
استدعاء الاختبار هذا، لذلك لا تُحتسب جلسة معاد استخدامها ولديها صوت أقدم
كفحص كلام ناجح جديد. استخدم action: "leave" لوضع علامة على انتهاء الجلسة.
يتضمن status صحة Chrome عند توفرها:
inCall: يبدو أن Chrome داخل مكالمة MeetmicMuted: حالة ميكروفون Meet بأفضل جهدmanualActionRequired/manualActionReason/manualActionMessage: يحتاج ملف المتصفح الشخصي إلى تسجيل دخول يدوي، أو قبول مضيف Meet، أو أذونات، أو إصلاح تحكم المتصفح قبل أن يعمل الكلامspeechReady/speechBlockedReason/speechBlockedMessage: ما إذا كان كلام Chrome المدار مسموحا الآن. تعنيspeechReady: falseأن OpenClaw لم يرسل عبارة المقدمة/الاختبار إلى جسر الصوت.providerConnected/realtimeReady: حالة جسر الصوت الفوريlastInputAt/lastOutputAt: آخر صوت شوهد من الجسر أو أُرسل إليهaudioOutputRouted/audioOutputDeviceLabel: ما إذا كان إخراج وسائط تبويب Meet موجها بنشاط إلى جهاز BlackHole الذي يستخدمه الجسرlastSuppressedInputAt/suppressedInputBytes: إدخال local loopback تم تجاهله أثناء نشاط تشغيل المساعد
أوضاع الوكيل وbidi
تم تحسين وضع Chromeagent لسلوك “وكيلي في الاجتماع”. يسمع مزود النسخ الفوري
صوت الاجتماع، وتُوجه النصوص النهائية للمشاركين عبر وكيل OpenClaw المهيأ، وتُنطق
الإجابة عبر وقت تشغيل TTS العادي في OpenClaw. عيّن mode: "bidi" عندما تريد
أن يجيب نموذج الصوت الفوري مباشرة.
تُدمج أجزاء النص النهائي القريبة قبل الاستشارة حتى لا ينتج دور منطوق واحد عدة
إجابات جزئية قديمة. كما يُمنع الإدخال الفوري أثناء استمرار تشغيل صوت المساعد
الموجود في قائمة الانتظار،
وتُتجاهل أصداء النصوص الحديثة الشبيهة بالمساعد قبل استشارة الوكيل حتى لا يجعل
local loopback في BlackHole الوكيل يجيب عن كلامه هو.
| الوضع | من يقرر الإجابة | مسار إخراج الكلام | استخدمه عندما |
|---|---|---|---|
agent | وكيل OpenClaw المهيأ | وقت تشغيل TTS العادي في OpenClaw | تريد سلوك “وكيلي في الاجتماع” |
bidi | نموذج الصوت الفوري | استجابة صوتية من مزود الصوت الفوري | تريد حلقة صوت محادثية بأقل كمون |
bidi، عندما يحتاج النموذج الفوري إلى استدلال أعمق أو معلومات حالية أو
أدوات OpenClaw العادية، يمكنه استدعاء openclaw_agent_consult.
تعمل أداة الاستشارة على تشغيل وكيل OpenClaw العادي في الخلفية مع سياق
نص محضر الاجتماع الأخير وتعيد إجابة منطوقة موجزة. في وضع agent،
يرسل OpenClaw تلك الإجابة مباشرة إلى وقت تشغيل TTS؛ وفي وضع bidi، يستطيع
نموذج الصوت الفوري نطق نتيجة الاستشارة مرة أخرى داخل الاجتماع. وهي تستخدم
آلية الاستشارة المشتركة نفسها مثل Voice Call.
افتراضيًا، تعمل الاستشارات ضد الوكيل main. عيّن realtime.agentId عندما
ينبغي أن يستشير مسار Meet مساحة عمل وكيل OpenClaw مخصصة، وافتراضات النموذج،
وسياسة الأدوات، والذاكرة، وسجل الجلسة.
تستخدم استشارات وضع الوكيل مفتاح جلسة لكل اجتماع
agent:<id>:subagent:google-meet:<session> بحيث تحتفظ أسئلة المتابعة بسياق
الاجتماع مع وراثة سياسة الوكيل العادية من الوكيل المكوّن.
يتحكم realtime.toolPolicy في تشغيل الاستشارة:
safe-read-only: يكشف أداة الاستشارة ويقيّد الوكيل العادي علىreadوweb_searchوweb_fetchوx_searchوmemory_searchوmemory_get.owner: يكشف أداة الاستشارة ويتيح للوكيل العادي استخدام سياسة أدوات الوكيل العادية.none: لا يكشف أداة الاستشارة لنموذج الصوت الفوري.
قائمة فحص الاختبار المباشر
استخدم هذا التسلسل قبل تسليم اجتماع إلى وكيل غير مراقب:googlemeet setupكلها خضراء.- يتضمن
googlemeet setupالفحصchrome-node-connectedعندما يكون Chrome-node هو النقل الافتراضي أو عندما تكون عقدة مثبتة. - يعرض
nodes statusأن العقدة المحددة متصلة. - تعلن العقدة المحددة عن كل من
googlemeet.chromeوbrowser.proxy. - تنضم علامة تبويب Meet إلى المكالمة ويعيد
test-speechصحة Chrome معinCall: true.
- يتضمن
googlemeet setupفحوصات خضراء لـtwilio-voice-call-pluginوtwilio-voice-call-credentialsوtwilio-voice-call-webhook. - يكون
voicecallمتاحًا في CLI بعد إعادة تحميل Gateway. - تحتوي الجلسة المعادة على
transport: "twilio"وtwilio.voiceCallId. - يعرض
openclaw logs --followتقديم DTMF TwiML قبل TwiML الفوري، ثم جسرًا فوريًا مع تحية أولية في الصف. - ينهي
googlemeet leave <sessionId>مكالمة الصوت المفوضة.
استكشاف الأخطاء وإصلاحها
لا يستطيع الوكيل رؤية أداة Google Meet
تأكد من تمكين Plugin في إعدادات Gateway وأعد تحميل Gateway:plugins.entries.google-meet، فأعد تشغيل Gateway أو
أعد تحميله. لا يرى الوكيل الجاري إلا أدوات Plugin المسجلة بواسطة عملية
Gateway الحالية.
على مضيفات Gateway غير macOS، تظل أداة google_meet المواجهة للوكيل مرئية،
لكن إجراءات ردّ الكلام عبر Chrome المحلي تُحظر قبل وصولها إلى جسر الصوت.
يعتمد صوت ردّ الكلام عبر Chrome المحلي حاليًا على BlackHole 2ch في macOS،
لذلك ينبغي لوكلاء Linux استخدام mode: "transcribe"، أو اتصال Twilio الهاتفي،
أو مضيف chrome-node على macOS بدلًا من مسار وكيل Chrome المحلي الافتراضي.
لا توجد عقدة متصلة قادرة على Google Meet
على مضيف العقدة، شغّل:googlemeet.chrome بالإضافة إلى
browser.proxy. يجب أن تسمح إعدادات Gateway بأوامر العقدة هذه:
googlemeet setup في chrome-node-connected أو أبلغ سجل Gateway عن
gateway token mismatch، فأعد تثبيت العقدة أو أعد تشغيلها باستخدام رمز
Gateway الحالي. بالنسبة إلى Gateway على LAN، يعني ذلك عادةً:
يفتح المتصفح لكن الوكيل لا يستطيع الانضمام
شغّلgooglemeet test-listen للانضمامات بغرض المراقبة فقط أو
googlemeet test-speech للانضمامات الفورية، ثم افحص صحة Chrome المعادة. إذا
أبلغ أي من الفحصين عن manualActionRequired: true، فأظهر
manualActionMessage للمشغّل وتوقف عن إعادة المحاولة حتى يكتمل إجراء
المتصفح.
إجراءات يدوية شائعة:
- تسجيل الدخول إلى ملف تعريف Chrome.
- قبول الضيف من حساب مضيف Meet.
- منح أذونات الميكروفون/الكاميرا لـ Chrome عندما تظهر مطالبة الإذن الأصلية في Chrome.
- إغلاق مربع حوار إذن Meet عالق أو إصلاحه.
يفشل إنشاء الاجتماع
يستخدمgooglemeet create أولًا نقطة نهاية Google Meet API spaces.create
عندما تكون بيانات اعتماد OAuth مكوّنة. وبدون بيانات اعتماد OAuth، يعود إلى
متصفح عقدة Chrome المثبتة. تأكد مما يلي:
- لإنشاء API: تم تكوين
oauth.clientIdوoauth.refreshToken، أو توجد متغيرات بيئةOPENCLAW_GOOGLE_MEET_*مطابقة. - لإنشاء API: تم إصدار رمز التحديث بعد إضافة دعم الإنشاء. قد تفتقر الرموز
الأقدم إلى نطاق
meetings.space.created؛ أعد تشغيلopenclaw googlemeet auth login --jsonوحدّث إعدادات Plugin. - لاحتياطي المتصفح: يشير
defaultTransport: "chrome-node"وchromeNode.nodeإلى عقدة متصلة تحتوي علىbrowser.proxyوgooglemeet.chrome. - لاحتياطي المتصفح: يكون ملف تعريف Chrome الخاص بـ OpenClaw على تلك العقدة
مسجل الدخول إلى Google وقادرًا على فتح
https://meet.google.com/new. - لاحتياطي المتصفح: تعيد المحاولات استخدام علامة تبويب
https://meet.google.com/newأو مطالبة حساب Google موجودة قبل فتح علامة تبويب جديدة. إذا انتهت مهلة وكيل، فأعد محاولة استدعاء الأداة بدلًا من فتح علامة تبويب Meet أخرى يدويًا. - لاحتياطي المتصفح: إذا أعادت الأداة
manualActionRequired: true، فاستخدمbrowser.nodeIdوbrowser.targetIdوbrowserUrlوmanualActionMessageالمعادة لإرشاد المشغّل. لا تعد المحاولة في حلقة حتى يكتمل ذلك الإجراء. - لاحتياطي المتصفح: إذا عرض Meet “Do you want people to hear you in the
meeting?”، فاترك علامة التبويب مفتوحة. ينبغي أن ينقر OpenClaw على
Use microphone أو، للاحتياطي الخاص بالإنشاء فقط، على
Continue without microphone عبر أتمتة المتصفح وأن يواصل انتظار URL
Meet المُنشأ. إذا تعذّر عليه ذلك، ينبغي أن يذكر الخطأ
meet-audio-choice-required، لاgoogle-login-required.
ينضم الوكيل لكنه لا يتكلم
تحقق من المسار الفوري:mode: "agent" لمسار STT -> وكيل OpenClaw -> ردّ الكلام عبر TTS
العادي، أو mode: "bidi" للاحتياطي الصوتي الفوري المباشر. لا يبدأ
mode: "transcribe" جسر ردّ الكلام عمدًا. لتصحيح أخطاء المراقبة فقط، شغّل
openclaw googlemeet status --json <session-id> بعد أن يتحدث المشاركون وتحقق
من captioning وtranscriptLines وlastCaptionText. إذا كان inCall هو
true لكن transcriptLines يبقى عند 0، فقد تكون التسميات التوضيحية في Meet
معطلة، أو لم يتحدث أحد منذ تثبيت المراقب، أو تغيّرت واجهة Meet، أو أن
التسميات التوضيحية المباشرة غير متاحة للغة/حساب الاجتماع.
يتحقق googlemeet test-speech دائمًا من المسار الفوري ويبلغ عما إذا كانت
بايتات خرج الجسر قد رُصدت لهذا الاستدعاء. إذا كان speechOutputVerified هو false وكان
speechOutputTimedOut هو true، فقد يكون مزود الخدمة الفوري قد قبل
العبارة لكن OpenClaw لم يرَ بايتات خرج جديدة تصل إلى جسر صوت Chrome.
تحقق أيضًا مما يلي:
- يتوفر مفتاح مزود خدمة فوري على مضيف Gateway، مثل
OPENAI_API_KEYأوGEMINI_API_KEY. - يظهر
BlackHole 2chعلى مضيف Chrome. - يوجد
soxعلى مضيف Chrome. - يتم توجيه ميكروفون Meet ومكبر الصوت عبر مسار الصوت الافتراضي الذي يستخدمه
OpenClaw. ينبغي أن يعرض
doctorالقيمةmeet output routed: yesلانضمامات Chrome المحلية الفورية.
googlemeet doctor [session-id] الجلسة، والعقدة، وحالة داخل المكالمة،
وسبب الإجراء اليدوي، واتصال مزود الخدمة الفوري، وrealtimeReady، ونشاط
إدخال/إخراج الصوت، والطوابع الزمنية الصوتية الأخيرة، وعدادات البايت، وURL
المتصفح. استخدم googlemeet status [session-id] --json عندما تحتاج إلى JSON
الخام. استخدم googlemeet doctor --oauth عندما تحتاج إلى التحقق من تحديث
OAuth لـ Google Meet من دون كشف الرموز؛ أضف --meeting أو --create-space
عندما تحتاج أيضًا إلى إثبات Google Meet API.
إذا انتهت مهلة وكيل ويمكنك رؤية علامة تبويب Meet مفتوحة بالفعل، فافحص تلك
العلامة من دون فتح علامة أخرى:
recover_current_tab. يركّز على علامة تبويب Meet
موجودة ويفحصها للنقل المحدد. مع chrome، يستخدم تحكم المتصفح المحلي عبر
Gateway؛ ومع chrome-node، يستخدم عقدة Chrome المكوّنة. لا يفتح علامة تبويب
جديدة ولا ينشئ جلسة جديدة؛ بل يبلّغ عن العائق الحالي، مثل تسجيل الدخول، أو
القبول، أو الأذونات، أو حالة اختيار الصوت. يتحدث أمر CLI إلى Gateway
المكوّن، لذلك يجب أن يكون Gateway قيد التشغيل؛ كما يتطلب chrome-node اتصال
عقدة Chrome.
تفشل فحوصات إعداد Twilio
يفشلtwilio-voice-call-plugin عندما لا يكون voice-call مسموحًا به أو غير
مفعّل. أضفه إلى plugins.allow، وفعّل plugins.entries.voice-call، وأعد
تحميل Gateway.
يفشل twilio-voice-call-credentials عندما يفتقر طرف Twilio الخلفي إلى
معرّف SID للحساب، أو رمز المصادقة، أو رقم المتصل. عيّن هذه على مضيف
Gateway:
twilio-voice-call-webhook عندما لا يمتلك voice-call تعرض Webhook
عامًا، أو عندما يشير publicUrl إلى loopback أو مساحة شبكة خاصة.
عيّن plugins.entries.voice-call.config.publicUrl إلى URL المزود العام أو
كوّن نفق voice-call/تعرض Tailscale.
عناوين URL الخاصة بـ loopback والعناوين الخاصة غير صالحة لاستدعاءات شركات
الاتصال. لا تستخدم localhost أو 127.0.0.1 أو 0.0.0.0 أو 10.x أو
172.16.x-172.31.x أو 192.168.x أو 169.254.x أو fc00::/7 أو
fd00::/8 كقيمة publicUrl.
للحصول على URL عام مستقر:
voicecall smoke مخصصًا للتحقق من الجاهزية فقط افتراضيًا. لإجراء تشغيل تجريبي لرقم محدد:
--yes فقط عندما تريد عمدًا إجراء مكالمة إشعار صادرة مباشرة:
يبدأ اتصال Twilio لكنه لا يدخل الاجتماع أبدًا
تأكد من أن حدث Meet يعرض تفاصيل الاتصال الهاتفي. مرر رقم الاتصال الهاتفي ورمز PIN بالضبط أو تسلسل DTMF مخصصًا:w بادئة أو فواصل في --dtmf-sequence إذا كان المزود يحتاج إلى توقف مؤقت قبل إدخال رمز PIN.
إذا أُنشئت المكالمة الهاتفية لكن قائمة Meet لا تعرض أبدًا مشارك الاتصال الهاتفي:
- شغّل
openclaw googlemeet doctor <session-id>لتأكيد معرف مكالمة Twilio المفوضة، وما إذا كان DTMF قد وُضع في الطابور، وما إذا طُلبت تحية المقدمة. - شغّل
openclaw voicecall status --call-id <id>وتأكد من أن المكالمة لا تزال نشطة. - شغّل
openclaw voicecall tailوتحقق من وصول Twilio webhooks إلى Gateway. - شغّل
openclaw logs --followوابحث عن تسلسل Twilio Meet: يفوض Google Meet الانضمام، ويخزن Voice Call ويقدم TwiML الخاص بـ DTMF قبل الاتصال، ويقدم Voice Call TwiML الفوري لمكالمة Twilio، ثم يطلب Google Meet كلام المقدمة عبرvoicecall.speak. - أعد تشغيل
openclaw googlemeet setup --transport twilio؛ يلزم نجاح فحص الإعداد، لكنه لا يثبت أن تسلسل رمز PIN للاجتماع صحيح. - تأكد من أن رقم الاتصال الهاتفي ينتمي إلى دعوة Meet والمنطقة نفسهما مثل رمز PIN.
- زِد
voiceCall.dtmfDelayMsعن القيمة الافتراضية البالغة 12 ثانية إذا كان Meet يجيب ببطء أو كان نص المكالمة لا يزال يعرض المطالبة بإدخال رمز PIN بعد إرسال DTMF قبل الاتصال. - إذا انضم المشارك لكنك لا تسمع التحية، فتحقق من
openclaw logs --followلطلبvoicecall.speakبعد DTMF ومن تشغيل TTS عبر دفق الوسائط أو آلية Twilio<Say>الاحتياطية. إذا كان نص المكالمة لا يزال يحتوي على “enter the meeting PIN”، فإن ساق الهاتف لم تنضم بعد إلى غرفة Meet، لذلك لن يسمع مشاركو الاجتماع الكلام.
plugins.entries.voice-call.config.publicUrl أو النفق المكوّن. راجع استكشاف أخطاء المكالمات الصوتية وإصلاحها.
ملاحظات
واجهة API الرسمية للوسائط في Google Meet موجهة للاستقبال، لذلك لا يزال التحدث داخل مكالمة Meet يحتاج إلى مسار مشارك. يُبقي هذا Plugin ذلك الحد واضحًا: يتولى Chrome مشاركة المتصفح وتوجيه الصوت المحلي؛ وتتولى Twilio مشاركة الاتصال الهاتفي. تحتاج أوضاع الرد الصوتي في Chrome إلىBlackHole 2ch بالإضافة إلى أحد الخيارين:
chrome.audioInputCommandمعchrome.audioOutputCommand: يملك OpenClaw الجسر ويمرر الصوت بصيغةchrome.audioFormatبين تلك الأوامر والمزود المحدد. يستخدم وضع الوكيل النسخ الفوري مع TTS عادي؛ ويستخدم وضع bidi مزود الصوت الفوري. مسار Chrome الافتراضي هو PCM16 بتردد 24 كيلوهرتز معchrome.audioBufferBytes: 4096؛ ويظل G.711 mu-law بتردد 8 كيلوهرتز متاحًا لأزواج الأوامر القديمة.chrome.audioBridgeCommand: يملك أمر جسر خارجي مسار الصوت المحلي بالكامل ويجب أن يخرج بعد بدء تشغيل برنامجه الخفي أو التحقق منه. هذا صالح فقط لـbidiلأن وضعagentيحتاج إلى وصول مباشر إلى زوج الأوامر من أجل TTS.
google_meet في وضع الوكيل، تُفرّع جلسة مستشار الاجتماع نص المتصل الحالي قبل الرد على كلام المشاركين. تظل جلسة Meet منفصلة (agent:<agentId>:subagent:google-meet:<sessionId>) كي لا تعدّل متابعات الاجتماع نص المتصل مباشرة.
للحصول على صوت ثنائي الاتجاه نظيف، وجّه إخراج Meet وميكروفون Meet عبر أجهزة افتراضية منفصلة أو مخطط جهاز افتراضي بنمط Loopback. يمكن لجهاز BlackHole واحد مشترك أن يعيد صدى المشاركين الآخرين إلى المكالمة.
مع جسر Chrome ذي زوج الأوامر، يمكن لـ chrome.bargeInInputCommand الاستماع إلى ميكروفون محلي منفصل ومسح تشغيل المساعد عندما يبدأ الإنسان بالكلام. يحافظ ذلك على أسبقية كلام الإنسان على إخراج المساعد حتى عندما يكون إدخال BlackHole loopback المشترك مكبوتًا مؤقتًا أثناء تشغيل المساعد. ومثل chrome.audioInputCommand وchrome.audioOutputCommand، فهو أمر محلي يكوّنه المشغل. استخدم مسار أمر موثوقًا وصريحًا أو قائمة وسائط، ولا توجهه إلى سكربتات من مواقع غير موثوقة.
يفعّل googlemeet speak جسر صوت الرد النشط لجلسة Chrome. يوقف googlemeet leave ذلك الجسر. بالنسبة إلى جلسات Twilio المفوضة عبر Plugin Voice Call، يؤدي leave أيضًا إلى إنهاء المكالمة الصوتية الأساسية. استخدم googlemeet end-active-conference عندما تريد أيضًا إغلاق مؤتمر Google Meet النشط لمساحة تديرها API.