google-meet إلى عناوين URL صريحة لاجتماعات Meet نيابةً عن وكيل OpenClaw. وقد صُمم بنطاق محدود عمدًا:
- لا ينضم إلا إلى عناوين URL من نوع
https://meet.google.com/...؛ ولا يتصل أبدًا باجتماع عبر رقم هاتف يكتشفه بنفسه. - يمكن لـ
googlemeet createإنشاء عنوان URL جديد لاجتماع Meet عبر Google Meet API (أو آلية احتياطية عبر المتصفح) والانضمام إليه افتراضيًا. - تستخدم المشاركة عبر Chrome ملفًا شخصيًا مسجل الدخول في Chrome، ويمكن أن يكون ذلك اختياريًا على Node مقترنة. أما المشاركة عبر Twilio فتتصل برقم هاتف مع رمز PIN/نغمات DTMF من خلال Plugin المكالمات الصوتية؛ ولا يمكنها الاتصال بعنوان URL لاجتماع Meet مباشرةً.
- يقوم
mode: "agent"(الافتراضي) بنسخ كلام المشاركين باستخدام موفر آني، ويوجهه إلى وكيل OpenClaw المكوَّن، وينطق الإجابة باستخدام تحويل النص إلى كلام المعتاد في OpenClaw. يتيحmode: "bidi"لنموذج صوتي آني الإجابة مباشرةً. وينضمmode: "transcribe"للمراقبة فقط من دون رد صوتي. - لا يوجد إعلان تلقائي عن الموافقة عندما ينضم Plugin إلى مكالمة.
- أمر CLI هو
googlemeet؛ أماmeetفهو محجوز لسير عمل المؤتمرات الهاتفية الأوسع للوكلاء.
البدء السريع
ثبّت تبعيات الصوت المحلية، ثم عيّن مفتاح موفر آني. يُعد OpenAI موفر النسخ الافتراضي لوضعagent؛ ويتوفر Google Gemini Live بوصفه موفر الصوت لوضع bidi:
blackhole-2ch جهاز الصوت الافتراضي BlackHole 2ch الذي يوجّه Chrome الصوت عبره. يتطلب مُثبّت Homebrew إعادة التشغيل قبل أن يعرض macOS الجهاز:
setup قابلة للقراءة بواسطة الوكيل ومراعية للوضع والنقل: فهي تعرض ملف Chrome الشخصي، وتثبيت Node، وبالنسبة إلى عمليات الانضمام الآنية عبر Chrome، جسر الصوت BlackHole/SoX وفحص المقدمة المؤجلة. تتخطى عمليات الانضمام للمراقبة فقط المتطلبات الآنية الأساسية:
setup أيضًا ما إذا كانت voice-call وبيانات اعتماد Twilio وإتاحة Webhook للعامة جاهزة. تعامل مع أي فحص ok: false بوصفه مانعًا لذلك النقل/الوضع قبل أن ينضم الوكيل. استخدم --json للحصول على مخرجات قابلة للقراءة آليًا، و--transport chrome|chrome-node|twilio لإجراء فحص مسبق لنقل محدد:
google_meet:
google_meet ظاهرًا لإجراءات العناصر، والتقويم، والإعداد، والنسخ، وTwilio، وchrome-node، لكن الرد الصوتي المحلي عبر Chrome (transport: "chrome" مع mode: "agent" أو "bidi") يُحظر قبل وصوله إلى جسر الصوت، لأن هذا المسار يعتمد حاليًا على BlackHole 2ch في macOS. استخدم mode: "transcribe"، أو الاتصال الهاتفي عبر Twilio، أو مضيف chrome-node يعمل بنظام macOS بدلًا من ذلك.
إنشاء اجتماع
create مساران، ويُبلّغ عنهما في حقل source بالنتيجة:
api: يُستخدم عند تكوين بيانات اعتماد OAuth لـ Google Meet. وهو حتمي ولا يعتمد على حالة واجهة مستخدم المتصفح.browser: يُستخدم من دون بيانات اعتماد OAuth. يفتح OpenClaw https://meet.google.com/newعلى Node المثبّتة لـ Chrome وينتظر Google لإعادة التوجيه إلى عنوان URL حقيقي يحتوي على رمز الاجتماع؛ ويجب أن يكون ملف Chrome الشخصي الخاص بـ OpenClaw على تلك Node مسجل الدخول إلى Google مسبقًا. يعيد كل من الانضمام والإنشاء استخدام علامة تبويب Meet موجودة (أو علامة تبويب مطالبة.../new/ حساب Google قيد التنفيذ) قبل فتح علامة جديدة؛ وتتجاهل مطابقة علامات التبويب سلاسل الاستعلام غير المؤثرة مثلauthuser.
create افتراضيًا ويعيد joined: true إلى جانب جلسة الانضمام. مرّر --no-join (CLI) أو "join": false (الأداة) لإنشاء عنوان URL فقط.
بالنسبة إلى الغرف المنشأة عبر API، عيّن سياسة وصول صريحة بدلًا من توريث الإعداد الافتراضي لحساب Google:
ينطبق هذا فقط على الغرف المنشأة عبر API، لذلك يجب تكوين OAuth. إذا أجريت المصادقة قبل توفر هذا الخيار، فأعد تشغيل
openclaw googlemeet auth login --json بعد إضافة نطاق meetings.space.settings إلى شاشة موافقة OAuth.
إذا واجهت الآلية الاحتياطية للمتصفح عائقًا متعلقًا بتسجيل الدخول إلى Google أو أذونات Meet، فتعيد الأداة manualActionRequired: true مع manualActionReason وmanualActionMessage وbrowser.nodeId/browser.targetId/browserUrl. أبلغ عن تلك الرسالة وتوقف عن فتح علامات تبويب Meet جديدة حتى يُكمل المشغّل الخطوة في المتصفح.
الانضمام للمراقبة فقط
عيّن"mode": "transcribe" لتخطي الجسر الآني مزدوج الاتجاه (من دون متطلبات BlackHole/SoX ومن دون رد صوتي). تتخطى عمليات الانضمام عبر Chrome في وضع النسخ أيضًا منح OpenClaw إذن الميكروفون/الكاميرا ومسار Meet Use microphone؛ وإذا عرض Meet الشاشة الوسيطة لاختيار الصوت، فتحاول الأتمتة اختيار Continue without microphone أولًا. تثبّت عمليات نقل Chrome المُدارة في هذا الوضع مراقبًا لترجمات Meet بأفضل جهد ممكن. يعرض googlemeet status --json وgooglemeet doctor القيم captioning وcaptionsEnabledAttempted وtranscriptLines وlastCaptionAt وlastCaptionSpeaker وlastCaptionText وذيل recentTranscript.
لقراءة نص الجلسة المحدود، اقرأ علامة تبويب Meet الدقيقة التي يجري تتبعها:
nextIndex إلى تخطي توسع نص لاحق؛ ويؤدي المغادرة إلى إنهاء الصفوف المرئية قبل اللقطة. يعرض droppedLines عدد الأسطر المفقودة من البداية عند تجاوز الحد. تظل نصوص الجلسات الأربع الأحدث انتهاءً قابلة للقراءة حتى إعادة تشغيل Gateway. تعيد النصوص الأقدم للجلسات المنتهية evicted: true. هذه ذاكرة وقت تشغيل مقصودة، وليست تخزينًا دائمًا لسجل الاجتماعات: قد تؤدي إعادة تشغيل Gateway، أو إغلاق علامة التبويب قبل أخذ لقطة، أو تجاوز الحدود الموثقة إلى فقدان الترجمات.
لإجراء اختبار استماع بنعم/لا:
listenVerified وlistenTimedOut وحقول الإجراء اليدوي وحالة الترجمات الحالية.
سلامة الجلسة الآنية
أثناء جلسات الرد الصوتي، تعرض حالةgoogle_meet سلامة Chrome/جسر الصوت: inCall وmanualActionRequired وproviderConnected وrealtimeReady وaudioInputActive وaudioOutputActive، والطوابع الزمنية لآخر إدخال/إخراج، وعدادات البايت، وحالة إغلاق الجسر. لا تنطق جلسات Chrome المُدارة عبارة المقدمة/الاختبار إلا بعد أن تعرض السلامة inCall: true؛ وإلا يُعرض speechReady: false وتُحظر محاولة النطق بدلًا من عدم تنفيذ أي إجراء بصمت.
تنضم عمليات Chrome المحلية عبر ملف متصفح OpenClaw الشخصي المسجل الدخول، وتحتاج إلى BlackHole 2ch لمسار الميكروفون/مكبر الصوت. يكفي جهاز BlackHole واحد لإجراء اختبار أولي، لكنه قد يسبب صدى؛ استخدم أجهزة افتراضية منفصلة أو مخططًا شبيهًا بـ Loopback للحصول على صوت نظيف مزدوج الاتجاه.
Gateway محلي + Chrome عبر Parallels
لا يلزم وجود Gateway كامل أو مفتاح API للنموذج داخل جهاز macOS افتراضي لمجرد إتاحة Chrome له. شغّل Gateway والوكيل محليًا، وشغّل مضيف Node داخل الجهاز الافتراضي.
ثبّت تبعيات الجهاز الافتراضي، ثم أعد التشغيل وتحقّق:
<gateway-host> عنوان IP على شبكة LAN من دون TLS، فوافق صراحةً على استخدام تلك الشبكة الخاصة الموثوقة:
openclaw.json):
googlemeet.chrome وقدرة المتصفح/browser.proxy:
manualActionRequired: true مع manualActionReason وmanualActionMessage. توقف عن إعادة المحاولة، وأبلغ عن تلك الرسالة مع browserUrl/browserTitle، ولا تعد المحاولة إلا بعد اكتمال الإجراء اليدوي.
إذا حُذف chromeNode.node، فلن يختار OpenClaw تلقائيًا إلا عندما تعلن Node متصلة واحدة بالضبط عن كل من googlemeet.chrome والتحكم في المتصفح؛ ثبّت chromeNode.node (معرّف Node أو اسم العرض أو عنوان IP البعيد) عند اتصال عدة عُقد قادرة.
فحوص الأعطال الشائعة
ملاحظات التثبيت
يستخدم الإعداد الافتراضي للرد الصوتي في Chrome أداتين خارجيتين لا يضمّنهما OpenClaw ولا يعيد توزيعهما؛ ثبّتهما كتبعيّات على المضيف عبر Homebrew:sox: أداة صوت لسطر الأوامر. يصدر Plugin أوامر صريحة لأجهزة CoreAudio لجسر الصوت الافتراضي PCM16 بتردد 24 kHz.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
يفتح عنوان URL الخاص بـMeet عبر التحكم في متصفح OpenClaw وينضم باستخدام ملف متصفح OpenClaw المسجّل دخوله. على macOS، يتحقق Plugin منBlackHole 2ch قبل التشغيل، وإذا كان مضبوطًا، يشغّل أمر فحص صحة/بدء تشغيل جسر الصوت قبل فتح Chrome. بالنسبة إلى Chrome المحلي، اختر الملف الشخصي باستخدام browser.defaultProfile؛ بينما يُمرَّر chrome.browserProfile إلى مضيفي chrome-node بدلًا من ذلك.
BlackHole 2ch مثبّتًا، يفشل الانضمام برسالة خطأ في الإعداد بدلًا من الانضمام من دون مسار صوتي.
Twilio
خطة اتصال صارمة مفوّضة إلى Plugin المكالمات الصوتية. لا تحلّل صفحات Meet بحثًا عن أرقام هاتف؛ يجب أن يوفّر Google Meet رقم اتصال هاتفي ورمز PIN للاجتماع. فعّل المكالمات الصوتية على مضيف Gateway، وليس على Node الخاصة بـChrome:openclaw.json:
realtime.provider: "openai" مع OPENAI_API_KEY بدلًا من ذلك إذا كان OpenAI هو موفّر الصوت في الوقت الفعلي.
أعد تشغيل Gateway أو أعد تحميله بعد تمكين voice-call؛ لا تصبح تغييرات إعداد Plugin سارية حتى إعادة التحميل. تحقّق باستخدام:
googlemeet setup فحوص twilio-voice-call-plugin وtwilio-voice-call-credentials وtwilio-voice-call-webhook.
--dtmf-sequence لتسلسل مخصّص، مع w بادئة أو فواصل لإضافة توقّف مؤقت قبل رمز PIN:
OAuth والفحص المسبق
OAuth اختياري لإنشاء رابط Meet، لأنgooglemeet create يمكنه الرجوع إلى أتمتة المتصفح. اضبط OAuth للإنشاء عبر API الرسمي، أو تحليل المساحة، أو الفحص المسبق لـMeet Media API. لا تعتمد عمليات الانضمام عبر Chrome/Chrome-node على OAuth مطلقًا؛ فهي تستخدم ملف Chrome شخصيًا مسجّل الدخول، وBlackHole/SoX، وNode متصلة (بالنسبة إلى chrome-node) في كلتا الحالتين.
إنشاء بيانات اعتماد Google
في Google Cloud Console:1
إنشاء مشروع أو تحديده
2
تفعيل Google Meet REST API
3
إعداد شاشة موافقة OAuth
يُعد Internal الخيار الأبسط لمؤسسة Google Workspace. ويعمل External للإعدادات الشخصية/الاختبارية؛ وأثناء وجود التطبيق في Testing، أضف كل حساب Google سيمنحه الإذن كمستخدم اختباري.
4
إضافة النطاقات المطلوبة
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.readonlyhttps://www.googleapis.com/auth/calendar.events.readonly(البحث في التقويم)https://www.googleapis.com/auth/drive.meet.readonly(تصدير نص الاجتماع/محتوى مستند الملاحظات الذكية)
5
إنشاء معرّف عميل OAuth
نوع التطبيق Web application. عنوان URI المعتمد لإعادة التوجيه:
6
نسخ معرّف العميل وسر العميل
spaces.create وجود meetings.space.created. يحوّل meetings.space.readonly عناوين URL/رموز Meet إلى مساحات. يتيح meetings.space.settings لـOpenClaw تمرير إعدادات SpaceConfig مثل accessType أثناء إنشاء الغرفة عبر API. يُستخدم meetings.conference.media.readonly للفحص المسبق لـMeet Media API والعمل على الوسائط؛ وقد تتطلب Google التسجيل في Developer Preview للاستخدام الفعلي لـMedia API. لا يلزم calendar.events.readonly إلا للبحث في تقويم --today/--event. ولا يلزم drive.meet.readonly إلا لتصدير --include-doc-bodies. إذا كنت تحتاج فقط إلى عمليات الانضمام عبر Chrome المستندة إلى المتصفح، فتجاوز OAuth بالكامل.
إصدار رمز التحديث
اضبطoauth.clientId وoauth.clientSecret اختياريًا (أو مرّرهما كمتغيرات بيئة)، ثم شغّل:
http://localhost:8085/oauth2callback، ويطبع كتلة إعداد oauth تحتوي على رمز تحديث. أضف --manual لتدفق النسخ/اللصق عندما يتعذر على المتصفح الوصول إلى رد الاتصال المحلي:
oauth ضمن إعداد Plugin:
openclaw googlemeet auth login --json لكي يغطي رمز التحديث مجموعة النطاقات الحالية.
التحقق من OAuth باستخدام doctor
ok وconfigured وtokenSource وexpiresAt ورسائل الفحص)، ولا يطبع أبدًا رمز الوصول أو رمز التحديث أو سر العميل.
أثبت تفعيل Meet API ونطاق
spaces.create باستخدام فحص الإنشاء ذي الأثر الجانبي:
403 من هذه الفحوص أن Meet REST API معطّلة، أو أن رمز التحديث يفتقد النطاق المطلوب، أو أن حساب Google لا يمكنه الوصول إلى تلك المساحة. ويعني خطأ رمز التحديث أنه يجب إعادة تشغيل openclaw googlemeet auth login --json وتخزين كتلة oauth الجديدة.
لا يلزم OAuth لاستخدام البديل عبر المتصفح؛ إذ تأتي مصادقة Google هناك من ملف Chrome الشخصي المسجّل الدخول على Node المحددة، وليس من إعدادات 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
حلّ المساحة، والفحص المسبق، وقراءة العناصر
--meeting، يستخدم artifacts وattendance أحدث سجل مؤتمر افتراضيًا؛ مرّر --all-conference-records لاستخدام كل سجل محتفَظ به.
يحلّ البحث في التقويم عنوان URL للاجتماع من Google Calendar قبل قراءة العناصر (ويتطلب رمز تحديث يتضمن نطاق القراءة فقط لأحداث Calendar):
--today في تقويم primary لليوم عن حدث يتضمن رابط Meet؛ ويبحث --event <query> في نص الحدث المطابق؛ ويستهدف --calendar <id> تقويمًا غير أساسي. يعاين calendar-events الأحداث المطابقة ويحدد الحدث الذي ستختاره latest/artifacts/attendance/export.
إذا كنت تعرف معرّف سجل المؤتمر مسبقًا، فاستهدفه مباشرةً:
spaces.endActiveConference ويتطلب OAuth بنطاق meetings.space.created لمساحة يستطيع الحساب المخوّل إدارتها. يقبل عنوان 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 المرتبط بالنصوص المنسوخة/الملاحظات الذكية عبر Drive files.export (ويتطلب نطاق القراءة فقط لـ Drive Meet)؛ ومن دونه، لا تتضمن عمليات التصدير سوى بيانات تعريف Meet وإدخالات النص المنسوخ المنظّمة. يؤدي الفشل الجزئي لأحد العناصر (سرد الملاحظات الذكية، أو إدخالات النص المنسوخ، أو خطأ نص المستند) إلى الاحتفاظ بالتحذير في الملخص/ملف البيان بدلًا من إفشال عملية التصدير بالكامل. يجلب --dry-run البيانات نفسها ويطبع JSON الخاص بملف البيان من دون إنشاء المجلد أو ملف ZIP.
تستخدم الوكلاء الإجراءات نفسها من خلال أداة google_meet (export، وcreate مع accessType، وend_active_conference، وtest_listen)؛ راجع الأداة.
اختبار دخاني مباشر
يحتاج الاختبار الدخاني الأساسي للعناصر/الحضور إلى
meetings.space.readonly وmeetings.conference.media.readonly. ويحتاج البحث في Calendar إلى calendar.events.readonly. ويحتاج تصدير نص المستند من Drive إلى drive.meet.readonly.
أمثلة الإنشاء
google_meet يعيد تفاصيل منظّمة بدلًا من سلسلة نصية عادية:
manualActionRequired: true أو خطأ في البديل عبر المتصفح، ويطلب من المشغّل إكمال تسجيل الدخول إلى Google قبل إعادة المحاولة.
لا تضبط preview.enrollmentAcknowledged: true إلا بعد التأكد من تسجيل مشروع Cloud، وكيان OAuth الرئيسي، والمشاركين في الاجتماع في Google Workspace Developer Preview Program لواجهات Meet media API.
الإعدادات
لا يحتاج مسار وكيل Chrome الشائع إلا إلى تفعيل Plugin، وBlackHole، وSoX، ومفتاح موفّر للوقت الفعلي، وموفّر TTS مضبوط في OpenClaw:الإعدادات الافتراضية
يتيح
chrome.audioBridgeCommand وchrome.audioBridgeHealthCommand لجسر خارجي امتلاك مسار الصوت المحلي بالكامل بدلاً من chrome.audioInputCommand/chrome.audioOutputCommand؛ راجع الملاحظات لمعرفة القيد المتعلق بالوضع الذي يمكنه استخدامهما.
يتوفر ترحيل openclaw doctor --fix للبنية القديمة realtime.provider: "google": ينقل هذا القصد إلى realtime.voiceProvider: "google" بالإضافة إلى realtime.transcriptionProvider: "openai" عندما لا تكون هذه الحقول معيّنة بالفعل.
تجاوزات اختيارية
messages.tts.providers.elevenlabs.speakerVoiceId. ويمكن لردود الوكيل أيضًا استخدام توجيهات [[tts:speakerVoiceId=... model=eleven_v3]] لكل رد عند تمكين تجاوزات نموذج تحويل النص إلى كلام، لكن الإعداد هو القيمة الافتراضية الحتمية للاجتماعات. عند الانضمام، تعرض السجلات transcriptionProvider=elevenlabs، ويسجّل كل رد منطوق provider=elevenlabs model=eleven_v3 speakerVoiceId=<voiceId>.
إعداد خاص بـ Twilio فقط:
voiceCall.enabled: true (القيمة الافتراضية) ونقل Twilio، تُجري المكالمات الصوتية تسلسل DTMF قبل فتح تدفق الوسائط الفوري، ثم تستخدم نص المقدمة المحفوظ بوصفه التحية الفورية الأولية. إذا لم يكن voice-call مُمكّنًا، فلا يزال بإمكان Google Meet التحقق من خطة الاتصال وتسجيلها، لكنه لا يستطيع إجراء مكالمة Twilio.
اترك voiceCall.gatewayUrl دون تعيين لاستخدام وقت تشغيل Gateway المحلي الموثوق، الذي يحافظ على
الوكيل المستدعي طوال المكالمة. يظل عنوان URL المُعدّ لـ Gateway هدف WebSocket صريحًا ولا
يمكنه مصادقة منشأ Plugin؛ تفشل عمليات انضمام الوكلاء غير الافتراضيين بإغلاق آمن بدلًا من استخدام
وكيل آخر بصمت. شغّل Google Meet وVoice Call ضمن عملية Gateway نفسها عندما يكون التوجيه
حسب الوكيل مطلوبًا.
الأداة
يستخدم الوكلاء أداةgoogle_meet:
يفرض
test_speech دائمًا mode: "agent" أو "bidi" ويفشل إذا طُلب تشغيله في mode: "transcribe"، لأن جلسات المراقبة فقط لا يمكنها إصدار كلام. تستند نتيجة speechOutputVerified الخاصة به إلى زيادة بايتات خرج الصوت الآني أثناء تلك المكالمة، لذا لا تُعد الجلسة المُعاد استخدامها ذات الصوت الأقدم تحققًا جديدًا.
بالنسبة إلى وسائل نقل Chrome، يُبقي leave علامة تبويب يملكها المستخدم ومُعاد استخدامها مفتوحة بعد النقر على زر مغادرة المكالمة في Meet. تُغلق علامات التبويب التي فتحها OpenClaw بعد المغادرة.
استخدم transport: "chrome" عندما يعمل Chrome على مضيف Gateway، وtransport: "chrome-node" عندما يعمل على Node مقترنة. في الحالتين، يعمل موفرو النماذج وopenclaw_agent_consult على مضيف Gateway، لذا تبقى بيانات اعتماد النموذج هناك. تتضمن سجلات وضع الوكيل موفر/نموذج النسخ المحللين عند بدء الجسر، وموفر/نموذج/صوت/تنسيق خرج/معدل عينة TTS بعد كل رد مُركّب. ما زال mode: "realtime" الخام مقبولًا كاسم مستعار قديم للتوافق مع mode: "agent"، لكنه لم يعد معروضًا في تعداد mode الخاص بالأداة.
create مع غرفة مدعومة عبر API وسياسة وصول صريحة:
status حالة Chrome عند توفرها:
وضعا الوكيل وثنائي الاتجاه
وضع
agent: يسمع موفر النسخ الآني صوت الاجتماع، وتُوجّه النصوص النهائية المفرغة للمشاركين عبر وكيل OpenClaw المُعدّ، وتُقرأ الإجابة عبر TTS العادي في OpenClaw. تُدمج أجزاء النص النهائي المتقاربة قبل الاستشارة كي لا تنتج دورة كلام واحدة عدة إجابات جزئية قديمة؛ ويُحجب الإدخال الآني بينما يستمر تشغيل صوت المساعد في قائمة الانتظار، وتُتجاهل أصداء النصوص الحديثة الشبيهة بكلام المساعد قبل الاستشارة كي لا يجعل الاسترجاع الحلقي لـ BlackHole الوكيل يجيب عن كلامه.
وضع bidi: يجيب نموذج الصوت الآني مباشرةً ويمكنه استدعاء openclaw_agent_consult للحصول على استدلال أعمق أو معلومات حالية أو أدوات OpenClaw العادية. تشغّل أداة الاستشارة وكيل OpenClaw العادي خلف الكواليس مع سياق حديث من نص الاجتماع المفرغ، وتعيد إجابة منطوقة موجزة؛ في وضع agent يرسل OpenClaw تلك الإجابة مباشرةً إلى TTS، وفي وضع bidi يمكن لنموذج الصوت الآني نطقها. ويستخدم آلية الاستشارة المشتركة نفسها التي تستخدمها Voice Call.
تعمل الاستشارات افتراضيًا باستخدام وكيل main؛ عيّن realtime.agentId لتوجيه مسار Meet إلى مساحة عمل وكيل مخصصة، وإعدادات نموذج افتراضية، وسياسة أدوات، وذاكرة، وسجل جلسات. تستخدم استشارات وضع الوكيل مفتاح جلسة agent:<id>:subagent:google-meet:<session> لكل اجتماع، بحيث تحتفظ أسئلة المتابعة بسياق الاجتماع مع وراثة سياسة الوكيل العادية. عندما يستدعي وكيل google_meet في وضع الوكيل، تتفرع جلسة المستشار من النص المفرغ الحالي للمستدعي قبل الإجابة عن كلام المشارك؛ وتبقى جلسة Meet منفصلة كي لا تعدّل متابعات الاجتماع نص المستدعي مباشرةً.
يتحكم realtime.toolPolicy في تشغيل الاستشارة:
يُحدد نطاق مفتاح جلسة الاستشارة لكل جلسة Meet، لذا تعيد استدعاءات الاستشارة اللاحقة استخدام سياق الاستشارة السابق أثناء الاجتماع نفسه.
فرض تحقق منطوق من الجاهزية بعد انضمام Chrome بالكامل:
قائمة التحقق للاختبار المباشر
قبل تسليم اجتماع إلى وكيل غير خاضع للإشراف:googlemeet setupكلها خضراء، وتتضمنchrome-node-connectedعندما تكون Chrome-node وسيلة النقل الافتراضية أو تكون Node مثبتة.- يعرض
nodes statusالـ Node المحددة متصلة، وتعلن عن كل من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تقديم TwiML الخاص بـ DTMF قبل TwiML الفوري، ثم جسرًا فوريًا مع وضع التحية الأولية في قائمة الانتظار. - ينهي
googlemeet leave <sessionId>المكالمة الصوتية المفوَّضة.
استكشاف الأخطاء وإصلاحها
يتعذر على الوكيل رؤية أداة Google Meet
تأكد من تمكين Plugin وأعد تحميل Gateway؛ فالوكيل قيد التشغيل لا يرى سوى أدوات Plugin التي سجلتها عملية Gateway الحالية:google_meet ظاهرًا، لكن إجراءات الرد الصوتي في Chrome المحلي تُحظر قبل وصولها إلى جسر الصوت. استخدم mode: "transcribe" أو الاتصال الهاتفي عبر Twilio أو مضيف chrome-node يعمل بنظام macOS بدلًا من مسار وكيل Chrome المحلي الافتراضي.
لا توجد عقدة متصلة تدعم Google Meet
على مضيف العقدة:googlemeet.chrome بالإضافة إلى browser.proxy؛ ويجب أن يسمح إعداد Gateway بكليهما:
googlemeet setup في chrome-node-connected، أو أبلغ سجل Gateway عن gateway token mismatch، فأعد تثبيت العقدة أو تشغيلها باستخدام رمز Gateway الحالي:
يفتح المتصفح لكن يتعذر على الوكيل الانضمام
شغّلgooglemeet test-listen لعمليات الانضمام للمراقبة فقط أو googlemeet test-speech لعمليات الانضمام الفورية، ثم افحص حالة Chrome المُعادة. إذا أبلغ أي منهما عن manualActionRequired: true، فاعرض manualActionMessage للمشغّل وتوقف عن إعادة المحاولة حتى يكتمل إجراء المتصفح.
الإجراءات اليدوية الشائعة: تسجيل الدخول إلى ملف Chrome الشخصي؛ قبول الضيف من حساب مضيف Meet؛ منح Chrome أذونات الميكروفون/الكاميرا عند ظهور المطالبة الأصلية؛ إغلاق مربع حوار أذونات Meet العالق أو إصلاحه.
لا تُبلغ عن «عدم تسجيل الدخول» لمجرد أن Meet يسأل «Do you want people to hear you in the meeting?»؛ فهذه شاشة Meet البينية لاختيار الصوت. ينقر OpenClaw على Use microphone عبر أتمتة المتصفح عندما تكون متاحة، ويواصل انتظار حالة الاجتماع الفعلية؛ أما عند الرجوع إلى المتصفح للإنشاء فقط، فقد ينقر على Continue without microphone بدلًا من ذلك، لأن إنشاء عنوان URL لا يحتاج إلى مسار الصوت الفوري.
فشل إنشاء الاجتماع
يستخدمgooglemeet create واجهة Meet API المسماة spaces.create عند إعداد OAuth، وإلا فيستخدم متصفح عقدة Chrome المثبّتة. تأكد مما يلي:
- الإنشاء عبر API: وجود
oauth.clientIdوoauth.refreshToken(أو متغيرات البيئةOPENCLAW_GOOGLE_MEET_*المطابقة)، وأن رمز التحديث أُنشئ بعد إضافة دعم الإنشاء؛ قد تفتقر الرموز الأقدم إلىmeetings.space.created، لذا أعد تشغيلopenclaw googlemeet auth login --json. - الرجوع إلى المتصفح: يشير
defaultTransport: "chrome-node"وchromeNode.nodeإلى عقدة متصلة تحتوي علىbrowser.proxyوgooglemeet.chrome؛ ويكون ملف OpenClaw الشخصي في Chrome على تلك العقدة مسجل الدخول وقادرًا على فتحhttps://meet.google.com/new. - إعادات محاولة الرجوع إلى المتصفح: أعد استخدام علامة تبويب موجودة لـ
.../newأو مطالبة حساب Google قبل فتح علامة تبويب جديدة؛ أعد محاولة استدعاء الأداة بدلًا من فتح علامة تبويب أخرى يدويًا. - إجراء يدوي: إذا أعادت الأداة
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-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 صحيحة لكن ظل transcriptLines مساويًا لـ 0، فقد تكون تسميات Meet التوضيحية معطلة، أو لم يتحدث أحد منذ تثبيت المراقب، أو تغيرت واجهة Meet، أو لا تتوفر التسميات التوضيحية المباشرة للغة الاجتماع/الحساب.
يتحقق googlemeet test-speech دائمًا من المسار الفوري ويُبلغ عما إذا لوحظت بايتات خرج الجسر لذلك الاستدعاء. إذا كانت قيمة speechOutputVerified خطأ وكانت speechOutputTimedOut صحيحة، فربما قبل موفر الخدمة الفورية الكلام، لكن OpenClaw لم يرَ بايتات خرج جديدة تصل إلى جسر صوت Chrome.
تحقق أيضًا مما يلي: توفر مفتاح لموفر خدمة فورية (OPENAI_API_KEY أو GEMINI_API_KEY) على مضيف Gateway؛ وظهور BlackHole 2ch على مضيف Chrome؛ ووجود sox هناك؛ وتوجيه ميكروفون/مكبر صوت Meet عبر مسار الصوت الافتراضي (ينبغي أن يعرض doctor القيمة meet output routed: yes لعمليات الانضمام الفورية عبر Chrome المحلي).
يطبع googlemeet doctor [session-id] الجلسة والعقدة وحالة المكالمة وسبب الإجراء اليدوي واتصال موفر الخدمة الفورية وrealtimeReady ونشاط إدخال/إخراج الصوت والطوابع الزمنية لآخر صوت وعدادات البايتات وعنوان URL للمتصفح. استخدم googlemeet status [session-id] --json للحصول على JSON الخام، وgooglemeet doctor --oauth (أضف --meeting أو --create-space) للتحقق من تحديث OAuth دون كشف الرموز.
إذا انتهت مهلة وكيل وكانت علامة تبويب Meet مفتوحة بالفعل، فافحصها دون فتح علامة أخرى:
recover_current_tab: فهو يركز على علامة تبويب Meet موجودة ويفحصها للنقل المحدد (التحكم المحلي في المتصفح لـ chrome، والعقدة المعدّة لـ chrome-node) دون فتح علامة تبويب أو جلسة جديدة، ويُبلغ عن العائق الحالي (تسجيل الدخول، القبول، الأذونات، حالة اختيار الصوت). يتواصل أمر CLI مع Gateway المعدّ، الذي يجب أن يكون قيد التشغيل؛ ويتطلب chrome-node أيضًا اتصال العقدة.
فشل فحوصات إعداد Twilio
يفشلtwilio-voice-call-plugin عندما لا يكون voice-call مسموحًا أو مُمكّنًا: أضفه إلى plugins.allow، ومكّن plugins.entries.voice-call، ثم أعد تحميل Gateway.
يفشل twilio-voice-call-credentials عندما تفتقد الواجهة الخلفية لـ Twilio معرّف SID للحساب أو رمز المصادقة أو رقم المتصل:
twilio-voice-call-webhook عندما لا يتوفر لـ voice-call كشف Webhook عام، أو عندما يشير publicUrl إلى مساحة شبكة استرجاعية/خاصة. لا تستخدم 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؛ فلا يمكن لاستدعاءات شركة الاتصالات الراجعة الوصول إليها. عيّن plugins.entries.voice-call.config.publicUrl إلى عنوان URL عام، أو أعد نفقًا/كشفًا عبر Tailscale:
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: تأكد من وصول Webhook الخاصة بـ Twilio إلى 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 عبر دفق الوسائط أو الرجوع إلى<Say>في Twilio. إذا ظل النص يعرض «enter the meeting PIN»، فهذا يعني أن الطرف الهاتفي لم ينضم إلى غرفة Meet بعد، ولذلك لن يسمع المشاركون الكلام.
plugins.entries.voice-call.config.publicUrl أو النفق المعدّ. راجع استكشاف أخطاء المكالمات الصوتية وإصلاحها.
ملاحظات
واجهة الوسائط الرسمية لـ Google Meet موجهة نحو الاستقبال، لذا لا يزال التحدث داخل مكالمة يتطلب مسار مشارك. يُبقي هذا Plugin ذلك الحد واضحًا: يتولى Chrome المشاركة عبر المتصفح وتوجيه الصوت المحلي؛ ويتولى Twilio المشاركة عبر الاتصال الهاتفي. تحتاج أوضاع الرد الصوتي في Chrome إلىBlackHole 2ch بالإضافة إلى أحد الخيارين التاليين:
chrome.audioInputCommandبالإضافة إلىchrome.audioOutputCommand: يتولى OpenClaw إدارة الجسر ويمرّر الصوت فيchrome.audioFormatبين تلك الأوامر والمزوّد المحدد. يستخدم وضعagentالنسخ الفوري بالإضافة إلى تحويل النص إلى كلام (TTS) المعتاد؛ بينما يستخدم وضعbidiمزوّد الصوت الفوري. المسار الافتراضي هو PCM16 بتردد 24 kHz معchrome.audioBufferBytes: 4096؛ ويظل G.711 mu-law بتردد 8 kHz متاحًا لأزواج الأوامر القديمة.chrome.audioBridgeCommand: يتولى أمر جسر خارجي إدارة مسار الصوت المحلي بالكامل، ويجب أن ينتهي بعد تشغيل برنامجه الخفي أو التحقق منه. صالح فقط لـbidi، لأن وضعagentيحتاج إلى وصول مباشر إلى زوج الأوامر لتحويل النص إلى كلام (TTS).
chrome.bargeInInputCommand الاستماع إلى ميكروفون محلي منفصل وإيقاف تشغيل صوت المساعد عندما يبدأ شخص في التحدث، ما يُبقي كلام الشخص متقدمًا على مخرجات المساعد حتى أثناء كبت إدخال الاسترجاع المشترك عبر BlackHole مؤقتًا خلال تشغيل صوت المساعد. ومثل chrome.audioInputCommand/chrome.audioOutputCommand، فهو أمر محلي يهيئه المشغّل: استخدم مسار أمر موثوقًا وصريحًا أو قائمة وسائط، ولا تستخدم مطلقًا برنامجًا نصيًا من موقع غير موثوق.
للحصول على صوت مزدوج الاتجاه واضح، وجّه مخرجات Meet وميكروفون Meet عبر جهازين افتراضيين منفصلين أو مخطط أجهزة افتراضية بأسلوب Loopback؛ إذ يمكن لجهاز BlackHole مشترك واحد أن يعيد صدى المشاركين الآخرين إلى المكالمة.
يشغّل googlemeet speak جسر الصوت النشط للتحدث العكسي في جلسة Chrome؛ ويوقفه googlemeet leave (وبالنسبة إلى جلسات Twilio المفوّضة عبر Voice Call، ينهي المكالمة الأساسية). استخدم googlemeet end-active-conference لإغلاق مؤتمر Google Meet النشط أيضًا لمساحة تُدار عبر API.