كيف تبني أداة لتدوين ملاحظات الاجتماعات بلا روبوت
سجّل الحاسوب لا المكالمة. دليل عملي للبنية، وواجهات الصوت في كل نظام تشغيل، والأجزاء التي تستغرق وقتًا أطول مما تتوقع.
في هذه المقالة
الإجابة المختصرة: تجاوز منصة الاجتماعات وسجّل الحاسوب نفسه. التقط تدفقين محليين، الميكروفون وصوت النظام الذي تشغّله المكالمة (ScreenCaptureKit أو Core Audio taps على macOS، وحلقة WASAPI الراجعة على Windows، ومصدر المراقبة في PulseAudio أو PipeWire على Linux)، وأرسلهما إلى واجهة برمجية لتحويل الكلام إلى نص، ثم لخّص النص بنموذج لغوي كبير. لا ينضم أي مشارك إلى المكالمة.
هذا الدليل موجّه للمطورين الذين يريدون بناء أداة كهذه، أو فهم ما تفعله فعلًا الأداة التي يدفعون ثمنها. يشرح البنيتين، وكيف يعمل الالتقاط المحلي على كل نظام تشغيل والإذن الذي يطلبه كل نظام، ثم النسخ والملخصات والتخزين والموافقة. كل واجهة برمجية مذكورة هنا مأخوذة من الوثائق الرسمية لمطوّرها، والمصادر مدرجة في النهاية وتمت مراجعتها في 2026-10-21.
بنيتان: روبوت داخل المكالمة، أو التقاط على الحاسوب
هناك طريقتان للحصول على صوت الاجتماع. الروبوت عميل يعمل على الخادم وينضم إلى المكالمة كمشارك ويستقبل الوسائط من المنصة. أما الالتقاط المحلي فيعمل على حاسوب المستخدم ويسجّل ما يسمعه هذا الحاسوب أصلًا: الميكروفون لصوت المستخدم، ومخرج النظام لصوت الآخرين. وهناك خيار وسط أحدث هو واجهات الوسائط التي توفرها المنصات لبث الاجتماع إلى خادمك، لكن كل واحدة منها تخص منصة واحدة فقط.
| روبوت ينضم إلى المكالمة | واجهة وسائط المنصة | الالتقاط المحلي | |
|---|---|---|---|
| ظاهر للمشاركين | نعم، كمشارك | حسب المنصة (يعرض Meet نافذة موافقة) | لا |
| يغطي Zoom وMeet وTeams | تكامل منفصل لكل منصة | تكامل منفصل لكل منصة | نعم، لأنه يسجّل الحاسوب لا المنصة |
| أين يعمل | على خوادمك | على خوادمك | على حاسوب المستخدم، إضافة إلى خادمك الخلفي |
| فصل المتحدثين | غالبًا توفره المنصة | غالبًا توفره المنصة | ميكروفونك مقابل كل ما عداه، ثم فصل المتحدثين |
| التكلفة الرئيسية | خادم لكل اجتماع متزامن، وموافقات المنصة | أرصدة أو تسجيل لدى المنصة | تطبيق سطح مكتب أصلي لكل نظام، ونوافذ الأذونات |
| الاجتماعات الحضورية والمكالمات في تطبيقات أخرى | لا | لا | نعم، كل ما يسمعه الحاسوب |
ما يتطلبه مسار الروبوت اليوم
- Zoom: تنضم Meeting SDK إلى الاجتماعات وتتيح وصولًا مباشرًا إلى الصوت والصورة الخام على المنصات الأصلية. وتقول وثائق Zoom إنه ابتداءً من 2 مارس 2026 يجب أن تحصل التطبيقات التي تنضم إلى اجتماعات خارج حسابها على تفويض عبر رموز ZAK أو OBF، أو أن تستخدم RTMS.
- ترسل Zoom RTMS (Realtime Media Streams) الصوت والصورة وبيانات النص المباشرة إلى تطبيقك دون روبوت مشارك، وتعمل بأرصدة تشتريها من Zoom. وهي تخص Zoom وحدها.
- Microsoft Teams: يتطلب الصوت الفوري روبوت وسائط مستضافًا في التطبيق (application-hosted media bot) مكتوبًا بلغة C# أو .NET، ويُنشر في بيئة الإنتاج على Windows Server داخل Azure، مع عنوان IP عام لكل مثيل VM. وما زالت Microsoft تصف منصتها للوسائط الفورية بأنها developer preview.
- Google Meet: توفر Meet Media API الصوت والصورة وبيانات المشاركين لحظيًا، لكنها في مرحلة Developer Preview ولم تعد تقبل تسجيلات جديدة بحسب وثائق Google. ويجب أن يوافق أحد الحاضرين في المكالمة، ولا يمكنها الاتصال بالاجتماعات المشفرة أو التي تحمل علامة مائية.
لا شيء من ذلك خاطئ. لكنها ثلاث عمليات تكامل بثلاثة مسارات موافقة، ويرى المشاركون روبوتًا أو نافذة موافقة. إذا أردت مسار التقاط واحدًا يعمل بالطريقة نفسها على كل منصة، وفي الاجتماعات الحضورية والمكالمات الهاتفية على الحاسوب المحمول أيضًا، فالحل هو الالتقاط المحلي.
كيف يعمل الالتقاط المحلي: تدفقان منفصلان
تسجّل أداة التدوين المحلية مدخلين في الوقت نفسه: الميكروفون (المستخدم نفسه) وحلقة راجعة لمخرج النظام (الآخرون كما يشغّلهم تطبيق الاجتماع). أبقهما قناتين منفصلتين لأطول وقت ممكن. هذا الفصل يمنحك الفصل بين المتحدثين مجانًا، لأن كل ما في قناة الميكروفون هو المستخدم. وهو مهم أيضًا للصدى: تقول وثائق Microsoft إن الحلقة الراجعة في WASAPI وُجدت أساسًا لدعم إلغاء الصدى الصوتي. إذا كان المستخدم يستمع عبر سماعات الحاسوب المحمول، فالميكروفون يلتقط أصوات الطرف الآخر أيضًا، لذا طبّق إلغاء الصدى على الميكروفون (في المتصفح عبر قيد echoCancellation في getUserMedia)، وإلا ظهرت كل جملة من الطرف الآخر مرتين في النص.
macOS: ScreenCaptureKit أو Core Audio taps
- يبث ScreenCaptureKit محتوى الشاشة والصوت. اضبط capturesAudio على true في SCStreamConfiguration (macOS 13 وما بعده)، ويضيف captureMicrophone الميكروفون إلى التدفق نفسه بدءًا من macOS 15. ويتطلب إذن تسجيل الشاشة ومفتاح NSScreenCaptureUsageDescription في ملف Info.plist.
- تلتقط Core Audio taps (macOS 14.2 وما بعده) الصوت الصادر من عملية واحدة أو مجموعة عمليات أو النظام كله. صف الالتقاط بواسطة CATapDescription، وأنشئه عبر AudioHardwareCreateProcessTap، وأضفه إلى جهاز مُجمَّع تنشئه بواسطة AudioHardwareCreateAggregateDevice، ثم اقرأ هذا الجهاز كما تقرأ الميكروفون.
- تحتاج هذه الطريقة إلى مفتاح NSAudioCaptureUsageDescription. وعند أول تسجيل من جهاز مُجمَّع يحتوي على هذا الالتقاط، يطلب macOS من المستخدم إذن تسجيل صوت النظام. ويُدار الإذن من إعدادات النظام، الخصوصية والأمن، تسجيل الشاشة وصوت النظام، حيث يمكن السماح لتطبيق بتسجيل الصوت فقط.
- الميكروفون إذن منفصل له نص تعريفي خاص به. صمّم تجربة الإعداد الأولى للنافذتين معًا، وللمستخدم الذي ضغط رفض مرة ولم يعد يسمع شيئًا.
Windows: الحلقة الراجعة في WASAPI
- افتح نقطة نهاية التشغيل (eRender بدل eCapture في GetDefaultAudioEndpoint)، وهيّئ تدفق التقاط في الوضع المشترك مع AUDCLNT_STREAMFLAGS_LOOPBACK. لا تعمل التدفقات في الوضع الحصري بنمط الحلقة الراجعة.
- تحمل الحلقة الراجعة المزيج الكامل الذي يُشغَّل على نقطة النهاية تلك، لا تطبيق الاجتماع وحده، لذا تدخل أصوات الإشعارات والموسيقى في التسجيل أيضًا.
- تعمل الحلقة الراجعة المعتمدة على الأحداث بدءًا من Windows 10 الإصدار 1703، وتحتاج الإصدارات الأقدم إلى حل بديل عبر تدفق تشغيل توثقه Microsoft.
- تتيح الحلقة الراجعة للعملية (AUDIOCLIENT_ACTIVATION_TYPE_PROCESS_LOOPBACK عبر ActivateAudioInterfaceAsync) تضمين صوت عملية واحدة وعملياتها الفرعية أو استبعاده، مثلًا لإبعاد أصوات تطبيقك أنت. والحد الأدنى هو Windows 10 الإصدار 20348، فتحقق من توفرها وارجع إلى الحلقة الراجعة لنقطة النهاية إن لم تتوفر.
- لا يسمح برنامج تشغيل الصوت الموثوق بالتقاط التدفقات المحمية بإدارة الحقوق الرقمية (DRM). ولا تصف وثائق Microsoft للحلقة الراجعة أي نافذة إذن للمستخدم كتلك الموجودة في macOS، ما يجعل مؤشر التسجيل ومسار الموافقة الخاصين بك أكثر أهمية لا أقل.
Linux: مصادر المراقبة في PulseAudio وPipeWire
- في PulseAudio، لكل جهاز إخراج (sink) مصدر مراقبة يحمل ما يشغّله هذا الجهاز. سجّل مصدر المراقبة لجهاز الإخراج الافتراضي لصوت المكالمة، والمصدر الافتراضي للميكروفون.
- تستخدم معظم التوزيعات الحالية PipeWire مع pipewire-pulse، الذي تصفه وثائق PipeWire بأنه بديل مباشر لخادم PulseAudio، لذا يستمر الكود المكتوب لواجهة PulseAudio في العمل.
- في PipeWire مباشرة، يقرأ تدفق الالتقاط منافذ المراقبة لجهاز الإخراج عندما تضبط stream.capture.sink = true وتوجّه target.object إلى اسم جهاز الإخراج، كما يبيّن مثال الإعداد في وحدة loopback.
- مشكلتان ستقابلهما في الواقع: الجهاز الذي يعمل بـ ALSA وحده دون خادم صوت لا يملك مصدر مراقبة أصلًا، والمخرج المكتوم قد يعطيك مصدر مراقبة مليئًا بالصمت. قِس مستوى الصوت ونبّه المستخدم بدل نسخ الفراغ.
في المتصفح: getDisplayMedia، والصوت في Chromium فقط
- يطلب navigator.mediaDevices.getDisplayMedia({ video: true, audio: true }) من المستخدم اختيار شاشة أو نافذة أو علامة تبويب لمشاركتها. ويتطلب سياقًا آمنًا وإجراءً من المستخدم، ويظهر الطلب عند كل استدعاء، ولا يمكن حفظ الإذن.
- المشكلة في الصوت. تُظهر بيانات التوافق في MDN أن التقاط الصوت متاح في Chrome وEdge فقط، ولا يلتقط Firefox وSafari الصوت بهذه الطريقة. وفي Chrome يمكن التقاط صوت النظام كاملًا عند مشاركة الشاشة كلها على Windows وChromeOS، أما على macOS وLinux فلا يمكن التقاط سوى صوت علامة تبويب.
- لذلك على Mac لا تسمع أداة التدوين في المتصفح الاجتماع إلا إذا كان يعمل في علامة تبويب في Chrome أو Edge وشاركها المستخدم مع تفعيل الصوت. أما تطبيقا Zoom وTeams لسطح المكتب فخارج نطاقها.
- سجّل الميكروفون بواسطة getUserMedia كمسار ثانٍ. يجب أن يطلب طلب المشاركة الفيديو، فاحتفظ بمسار الصوت وحده للنسخ.
النسخ: البث الفوري، والقنوات، وحدود فصل المتحدثين
أرسل الصوت إلى واجهة برمجية لتحويل الكلام إلى نص تعمل بالبث عبر WebSocket أثناء الاجتماع، ليكون النص جاهزًا عند انتهائه. الواجهات الدفعية أبسط وتكفي إن لم يحتج أحد إلى نص مباشر. هذه القرارات أهم من اختيار المزوّد:
- قناتان في الدخل ونصّان في الخرج. انسخ الميكروفون وصوت النظام كلًّا على حدة (أو كتدفق واحد متعدد القنوات إن كانت واجهتك تدعم ذلك) ثم ادمجهما حسب الطوابع الزمنية. هذه أرخص طريقة لفصل المتحدثين على الإطلاق.
- فصل المتحدثين يعطيك أرقامًا لا أسماء. فوثائق Deepgram مثلًا تعيد متحدثًا مرقّمًا لكل كلمة (المتحدث 0، المتحدث 1) وتترك لتطبيقك ربطهم بأشخاص، ولا توجد درجة ثقة لكل كلمة في وضع البث. وللحصول على الأسماء تحتاج إلى إشارة ثانية: قناة الميكروفون هي المستخدم، ودعوة التقويم فيها قائمة الحضور، وواجهة تطبيق الاجتماع تعرف من يتحدث.
- يعمل فصل المتحدثين على قناة النظام، وهي إشارة واحدة ممزوجة من كل أصوات الطرف الآخر بعد مرورها بترميز تطبيق الاجتماع. توقّع دمج متحدثين حين يتشابه صوتان أو يتداخل الكلام.
- اللغات: راجع قائمة اللغات المدعومة وهل يعمل الكشف التلقائي في منتصف الاجتماع. التلميح الخاطئ للغة يفسد النص أكثر من نموذج أضعف قليلًا.
- إعادة الاتصال: الشبكات تنقطع. احفظ الصوت في مخزن مؤقت محلي وأعد إرساله عند عودة الاتصال، وإلا ضاعت الدقيقة التي اتُّخذ فيها القرار.
الملخصات: أعطِ النموذج النص كاملًا
- أرسل النص كاملًا مع الطوابع الزمنية وتسميات المتحدثين، لا مقتطفًا مقصوصًا. النماذج الحالية تملك نوافذ سياق كبيرة، فلا تقسّم إلا إذا تجاوز الاجتماع حجم النافذة.
- اطلب بنية يمكن التحقق منها: القرارات، والمهام مع المسؤول والموعد، والأسئلة المفتوحة. ويجب أن يمكن تتبع كل بند إلى طابع زمني.
- احتفظ بالنص والصوت بجانب الملخص. قد يذكر ملخص النموذج شيئًا لم يقله أحد، والحل أن يكون التحقق سريعًا، لا أن تثق بالنموذج.
- أنشئ الملخص بعد انتهاء الاجتماع، وعلّمه بأنه قديم حين يعدّل أحدهم النص.
التخزين والأمان والموافقة
- الصوت والنصوص بيانات شخصية. شفّرها أثناء التخزين، واجعل الملاحظات خاصة افتراضيًا، وحدّد مدة الاحتفاظ قبل الإطلاق، بما في ذلك طريقة حذف المستخدم لتسجيل ما.
- إن كان لديك مستخدمون في الاتحاد الأوروبي، فاعرف أين يُخزَّن الصوت والنصوص وأي معالِجين فرعيين (تحويل الكلام إلى نص، النموذج اللغوي) يطّلعون عليها، واذكر ذلك في سياسة الخصوصية.
- غياب الروبوت يعني أن أحدًا لن يُعلن التسجيل. اعرض مؤشر تسجيل واضحًا، وذكّر المستخدم بإبلاغ المشاركين، ووفّر جملة إفصاح قصيرة يمكن لصقها في دردشة الاجتماع. تشترط عدة ولايات أمريكية موافقة جميع الأطراف، ولكثير من الدول قواعدها الخاصة. هذه ليست استشارة قانونية.
- لا تصف الالتقاط المحلي بأنه معالجة محلية. إذا كان الصوت يُرسل إلى واجهة سحابية لتحويل الكلام إلى نص، فقل ذلك.
مسار العمل من البداية إلى النهاية
- اكتشف الاجتماع (بدء موعد في التقويم، أو استخدام تطبيق اجتماعات للميكروفون)، أو دع المستخدم يضغط زر التسجيل.
- اطلب إذن الميكروفون وصوت النظام في المرة الأولى، واشرح السبب في جملة واحدة.
- ابدأ التقاطين: الميكروفون والحلقة الراجعة للنظام. قِس مستوى كليهما، ونبّه إذا بقي أحدهما صامتًا أكثر من بضع ثوانٍ.
- حوّل الصوت إلى الصيغة التي يتوقعها مزوّد تحويل الكلام إلى نص (معدل العينة والترميز في وثائقه)، وابثه مع مخزن مؤقت محلي لحالات إعادة الاتصال.
- اعرض النص المباشر: ادمج القناتين حسب الطوابع الزمنية، وسمِّ قناة الميكروفون باسم المستخدم نفسه.
- عند الإيقاف، أفرغ المخازن المؤقتة وأغلق التدفق، واحفظ الصوت مع النص النهائي.
- أرسل النص كاملًا إلى النموذج اللغوي للملخص والمهام، واحفظها مع إحالات إلى الطوابع الزمنية.
- أتح النتيجة: واجهة استخدام، أو واجهة برمجية، أو Webhooks، أو خادم MCP لتقرأها مساعدات الذكاء الاصطناعي.
ما يستغرق وقتًا أطول مما تتوقع
- تجربة الأذونات على macOS، والمستخدمون الذين رفضوا مرة.
- تغيّر الأجهزة أثناء المكالمة: توصيل سماعات، أو تحوّل Bluetooth إلى وضع سماعة الرأس، أو تغيّر المخرج الافتراضي.
- توقيع الكود والتوثيق لدى Apple لمثبّتات macOS وتوقيع مثبّتات Windows، إضافة إلى التحديثات التلقائية.
- وضع السكون، وإغلاق غطاء الحاسوب، والاجتماعات التي تمتد ساعتين، واستهلاك القرص والذاكرة في المكالمات الطويلة.
- الصدى عبر سماعات الحاسوب المحمول، والصمت حين يكون المخرج مكتومًا.
أو استخدم أداة موجودة
إذا كنت تحتاج إلى ملاحظات اجتماعات لا إلى مشروع أداة تدوين، فإن Reline (reline.so) يطبّق هذه البنية بالفعل. يسجّل تطبيقه لسطح المكتب على macOS وWindows وLinux (نسخة تجريبية) الميكروفون وصوت النظام محليًا دون روبوت في المكالمة، ويلتقط تطبيق الويب صوت المكالمة في Chrome أو Edge على سطح المكتب عبر صوت مشاركة الشاشة. أما النسخ (أكثر من 60 لغة) وملخصات الذكاء الاصطناعي والتخزين فتجري في السحابة، فهو بلا روبوت لكنه لا يعالج على الجهاز.
وللمطورين الذين يريدون البيانات لا التطبيق: يشغّل Reline خادم MCP على العنوان https://mcp.reline.so/mcp يتيح لـ Claude وChatGPT وCursor وغيرها البحث في الملاحظات وقراءة النصوص والمهام وإنشاء الملاحظات، مع تسجيل الدخول عبر OAuth أو مفتاح API لمساحة العمل. وتُطلق Webhooks موقّعة عند ستة أحداث، منها note.created وnote.summarized وaction_items.extracted، مع توقيع HMAC-SHA256 على الطابع الزمني ونص الطلب الخام.
المصادر
- Apple, Capturing system audio with Core Audio taps: https://developer.apple.com/documentation/coreaudio/capturing-system-audio-with-core-audio-taps
- Apple, ScreenCaptureKit: https://developer.apple.com/documentation/screencapturekit
- Apple Support, Control access to screen and system audio recording on Mac: https://support.apple.com/guide/mac-help/mchld6aa7d23/mac
- Microsoft, Loopback Recording (WASAPI): https://learn.microsoft.com/windows/win32/coreaudio/loopback-recording
- Microsoft, AUDIOCLIENT_ACTIVATION_TYPE: https://learn.microsoft.com/windows/win32/api/audioclientactivationparams/ne-audioclientactivationparams-audioclient_activation_type
- Microsoft, Build application-hosted media bots (Teams): https://learn.microsoft.com/microsoftteams/platform/bots/calls-and-meetings/requirements-considerations-application-hosted-media-bots
- MDN, MediaDevices.getDisplayMedia(): https://developer.mozilla.org/docs/Web/API/MediaDevices/getDisplayMedia
- PulseAudio, pa_sink_info (monitor_source): https://freedesktop.org/software/pulseaudio/doxygen/structpa__sink__info.html
- PipeWire, pipewire-pulse: https://docs.pipewire.org/page_man_pipewire-pulse_1.html
- PipeWire, Loopback module: https://docs.pipewire.org/page_module_loopback.html
- Zoom, Meeting SDK: https://developers.zoom.us/docs/meeting-sdk/
- Zoom, Realtime Media Streams (RTMS): https://developers.zoom.us/docs/rtms/
- Google, Meet Media API overview: https://developers.google.com/workspace/meet/media-api/guides/overview
- Deepgram documentation (speaker labels per word): https://developers.deepgram.com/docs
الأسئلة الأكثر شيوعًا
- هل يمكن تسجيل اجتماع دون أن ينضم روبوت؟
- نعم. التقط محليًا: سجّل الميكروفون وصوت النظام على حاسوب المستخدم ثم انسخه إلى نص. لا ينضم أي مشارك إلى المكالمة على أي منصة. ومع ذلك يجب إبلاغ الحاضرين بأنك تسجّل.
- كيف ألتقط صوت النظام على Mac لأداة تدوين؟
- استخدم Core Audio taps على macOS 14.2 وما بعده (CATapDescription وAudioHardwareCreateProcessTap وجهاز مُجمَّع ومفتاح NSAudioCaptureUsageDescription)، أو ScreenCaptureKit مع capturesAudio على macOS 13 وما بعده. ويُمنح الإذن لكليهما من الخصوصية والأمن، تسجيل الشاشة وصوت النظام.
- هل يمكن لتطبيق ويب أو إضافة متصفح تسجيل صوت الاجتماع؟
- في متصفحات Chromium فقط. يعيد getDisplayMedia الصوت في Chrome وEdge: على macOS وLinux صوت علامة تبويب فقط، وعلى Windows وChromeOS صوت النظام كاملًا عند مشاركة الشاشة كلها. ولا يلتقط Firefox وSafari الصوت بهذه الطريقة.
- كيف أحصل على أسماء المتحدثين دون روبوت؟
- يعيد فصل المتحدثين أرقامًا لا أسماء. اجمع بين الإشارات: قناة الميكروفون هي المستخدم، ودعوة التقويم فيها قائمة الحضور، وواجهة الاجتماع تُظهر من يتحدث. ومن دونها ستحصل على المتحدث 1 والمتحدث 2.
- هل تسجيل اجتماع دون روبوت قانوني؟
- المسألة القانونية ليست الروبوت بل الموافقة. أبلغ المشاركين واتبع القانون المعمول به، فعدة ولايات أمريكية تشترط موافقة جميع الأطراف، ولدول أخرى قواعدها الخاصة. هذه ليست استشارة قانونية.
- هل أبني أداة التدوين بنفسي أم أستخدم أداة موجودة؟
- ابنِها إن كان الالتقاط هو منتجك. وإن كنت تحتاج الملاحظات فقط داخل أدواتك، فاستخدم أداة تدوين موجودة بلا روبوت ولها واجهة برمجية: Reline مثلًا يتيح الملاحظات والنصوص عبر خادم MCP وWebhooks موقّعة.
مقالات ذات صلة

كيف تأخذ ملاحظات اجتماعك بالذكاء الاصطناعي دون انضمام بوت إلى مكالمتك
ملاحظات اجتماع بالذكاء الاصطناعي دون بوت: تسجيل على الجهاز بلا طرف ثالث. لماذا يصلح للفِرَق، المقايضات، والمنظومة التقنية الدقيقة.

ما أدوات تدوين الاجتماعات بالذكاء الاصطناعي التي تعمل مع Claude وChatGPT؟
أي أدوات تدوين الاجتماعات بالذكاء الاصطناعي تعمل مع Claude وChatGPT، ومن المُدرج في كل دليل، وكيف تربط Reline: من دليل موصّلات Claude، أو بعنوان خادم MCP الخاص به في ChatGPT وCursor.

ما هو أفضل تطبيق ذكاء اصطناعي لتدوين ملاحظات الاجتماعات على Linux؟
أفضل مدوّن ملاحظات بالذكاء الاصطناعي على Linux هو الذي يسجّل بلا روبوت. يقدّم Reline تطبيق سطح مكتب لنظام Linux (نسخة تجريبية) لـ Meet وZoom وTeams، وتطبيق ويب كاملًا.
كفّ عن تدوين الملاحظات.ابدأ بإيصال النتائج.
مجاني للأبد للأفراد. خمس دقائق للتثبيت. اجتماعك القادم يكتب ملاحظاته بنفسه.