المكالمات والصوت
ترسل مكالمات وقنوات الصوت الصوت والفيديو ومشاركة الشاشة مباشرةً إلى الخادم عبر منفذ خاص بها. تغطي هذه الصفحة الجانب الشبكي، والإعدادات التي يجب التحقق منها بعد التثبيت، والنسخ النصي باستخدام نموذج تحويل الصوت إلى نص تشغّله بنفسك.
كيف تعمل المكالمات
تُوفَّر المكالمات بواسطة تطبيق المكالمات (المعرّف com.mattermost.calls)، وهو مثبَّت ومُفعَّل افتراضيًا. قنوات الصوت (تطبيق قنوات الصوت، صورة antimatter-next) هي غرف مكالمات دائمة مبنية على المكالمات: فهي تتطلب تفعيل المكالمات وتستخدم نفس الإعدادات ومنافذ وخوادم.
يشغّل تطبيق المكالمات خادم وسائط داخل Antimatter. تتصل به تطبيق الويب وتطبيق سطح المكتب وتطبيقات الجوال عبر WebRTC:
- يمرّ الإشاراة عبر اتصال الويب العادي (وكيل HTTPS الخاص بك)؛
- لا تمرّ الوسائط (الصوت، الفيديو، مشاركة الشاشة) عبره: فهي تذهب مباشرةً إلى الخادم عبر منفذ المكالمات، 8443 UDP وTCP افتراضيًا.
توجد الإعدادات في وحدة التحكم بالنظام › الإضافات › المكالمات. يمكن ضبط كل منها أيضًا عبر متغير بيئة AM_CALLS_ على خدمة antimatter، والذي يتغلب حينها على وحدة التحكم بالنظام ويقفل الإعداد هناك. تعمل أيضًا أسماء MM_CALLS_ القديمة.
تحقق من هذه بعد التثبيت
- افتح منفذ المكالمات. اسمح بـ 8443/udp و8443/tcp في جدار حماية الخادم ومزوّد الخدمات السحابية الخاص بك.
- تحقّق من وضع الاختبار. وضع الاختبار (
DefaultEnabled) يكون معطّلًا افتراضيًا، مما يتيح للجميع بدء المكالمات. فعّله (مفعّل) من وحدة التحكم بالنظام › الإضافات › المكالمات للسماح لمديري النظام فقط ببدء المكالمات في القنوات أثناء التحقق من عملها، ثم عطّله مرة أخرى. المتغير هوAM_CALLS_DEFAULT_ENABLED: القيمةtrueتعني أن وضع الاختبار معطّل. الخادم المنقول من Mattermost يحتفظ بالخيار المحفوظ في إعداداته. - اتخاذ قرار بشأن الفيديو. تفعيل الفيديو (
EnableVideo,AM_CALLS_ENABLE_VIDEO) يكون مفعّلًا افتراضيًا: يمكن للأشخاص تفعيل كاميراتهم في أي مكان تكون فيه المكالمات مفعّلة، في الرسائل المباشرة والجماعية وفي القنوات. في القنوات الصوتية، يحدد خيار السماح بالفيديو في القنوات الصوتية في تطبيق القنوات الصوتية ذلك. عطّل الخيار ولن يتمكن أحد من تفعيل الكاميرا، حتى في القنوات الصوتية. - خلف NAT، اضبط العنوان العام (القسم التالي).
أين تكون المكالمات مفعّلة
لكل مجتمع نوع، إما مساحة عمل أو نقابة (انظر النقابة أو مساحة العمل). تتبع القناة التي لم يفعّل فيها المشرفون المكالمات أو يعطلوها نوع مجتمعها:
- في مساحة العمل، تتبع القنوات الإعداد الافتراضي للخادم: تكون المكالمات مفعّلة للجميع طالما أن وضع الاختبار معطّل؛
- في النقابة، تكون المكالمات معطّلة في القنوات: يتحدث الأشخاص في القنوات الصوتية بدلاً من ذلك. لا يزال بإمكان مشرفي القنوات والمجتمعات تفعيل المكالمات في قناة معينة.
إعداد القناة الخاص بها يفوز دائمًا. الرسائل المباشرة والجماعية لا تنتمي إلى مجتمع: المكالمات هناك مفعّلة للجميع بينما وضع الاختبار معطّل. تغيير نوع المجتمع يسري على المكالمات خلال 30 ثانية.
المنافذ وNAT وSTUN
| الإعداد | المتغير | الافتراضي |
|---|---|---|
| منفذ خادم RTC (UDP) | AM_CALLS_UDP_SERVER_PORT | 8443 |
| منفذ خادم RTC (TCP) | AM_CALLS_TCP_SERVER_PORT | 8443 |
| عنوان خادم RTC (UDP)، (TCP) | AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESS | فارغ: جميع العناوين |
| تجاوز مضيف ICE | AM_CALLS_ICE_HOST_OVERRIDE | فارغ: يُكتشف عبر STUN |
| تجاوز منفذ مضيف ICE | AM_CALLS_ICE_HOST_PORT_OVERRIDE | فارغ: منفذ الخادم |
| إعدادات خوادم ICE | AM_CALLS_ICE_SERVERS_CONFIGS | [{"urls":["stun:stun.cloudflare.com:3478"]}] |
| (تجريبي) تفعيل دعم IPv6 | (وحدة التحكم بالنظام) | معطّل |
يجب أن تكون المنافذ بين 80 و49151. باستخدام ملف compose الخاص بالموقع، غيّر CALLS_PORT في .env: فهو يضبط كلا المتغيّرين وينشر المنفذ، بنفس الرقم على المضيف وفي الحاوية. تحاول العملاء أولاً استخدام UDP ثم تعود إلى TCP على نفس المنفذ.
العنوان الذي ترسل إليه العملاء الوسائط
يُخبر الخادم كل عميل بالعنوان الذي يجب أن يرسل إليه الوسائط (مرشّح "المضيف" الخاص به). افتراضياً، يجد عنوانه العام عن طريق الاستفسار من خادم STUN، وهو خدمة عامة تردّ بالعنوان والمنفذ الذي جاء منه الطلب. الافتراضي هو خادم STUN العام من Cloudflare، stun:stun.cloudflare.com:3478. الخادم ليس الوحيد الذي يستخدمه: كل عميل ينضم إلى مكالمة يستفسر منه أيضاً عن عنوانه العام. لا يرى خادم STUN سوى عناوين IP ومنافذ، ولا يرى أبداً صوت أو فيديو أو رسائل المكالمة.
الخادم الذي لا يزال يحتفظ بخادم STUN الخاص بـ Mattermost (stun.global.calls.mattermost.com) محفوظاً في إعدادات خوادم ICE، على سبيل المثال بعد الانتقال من Mattermost، يستخدم خادم Cloudflare بدلاً منه. لا يتم تغيير الإعداد المحفوظ.
اضبط العنوان بنفسك عندما:
- يكون الخادم خلف NAT، أو لديه عدة عناوين عامة: اضبط تجاوز مضيف ICE على عنوان IP العام (أو اسم مضيف يحلّ إليه)؛
- يُخفي NAT منفذاً عاماً مختلفاً عن 8443: اضبط أيضاً تجاوز منفذ مضيف ICE على ذلك المنفذ العام؛
- لا يوجد لدى الخادم اتصال بالإنترنت، أو لا تريد أن يتواصل الخادم والعملاء مع خادم STUN خارجي: اضبط تجاوز مضيف ICE، وأفرغ قائمة STUN باستخدام
AM_CALLS_ICE_SERVERS_CONFIGS=[]. عند ضبط تجاوز مضيف ICE، لم يعد الخادم يستفسر من خادم STUN عن عنوانه؛ والقائمة الفارغة تمنع العملاء من الاستفسار من خادم.
services:
antimatter:
environment:
AM_CALLS_ICE_HOST_OVERRIDE: 203.0.113.10
AM_CALLS_ICE_SERVERS_CONFIGS: "[]"
للحفاظ على STUN دون طرف ثالث، شغّل خادم STUN خاصاً بك (يُجيب خادم TURN مثل coturn أيضاً على طلبات STUN) وقم بتضمينه في إعدادات خوادم ICE بدلاً من ذلك، كما في مثال TURN أدناه.
على شبكة محلية فقط، استخدم عنوان LAN الخاص بالخادم. أعد تشغيل الخادم بعد تغيير المنافذ أو العناوين أو إعدادات ICE، أو عطّل وتفعّل تطبيق المكالمات: يتم إعداد خادم الوسائط عند بدء تشغيل التطبيق.
TURN، للحوامل النارية الصارمة
تقوم بعض الشبكات بحجب كلا من بروتوكول UDP والاتصالات الصادرة إلى منافذ TCP غير الاعتيادية. يحتاج المستخدمون على هذه الشبكات إلى خادم TURN، والذي يعيد توجيه الوسائط عبر منفذ يمكن الوصول إليه (غالباً 443). لا يتضمن Antimatter خادم TURN؛ قم بتشغيل خادم TURN مثل coturn وإضافته إلى إعدادات خوادم ICE، وهو قائمة JSON:
[
{"urls": ["stun:turn.example.com:3478"]},
{"urls": ["turn:turn.example.com:3478?transport=udp", "turns:turn.example.com:443?transport=tcp"]}
]
- عند استخدام سر مشترك (خاصية
use-auth-secretفي coturn)، ضع نفس السر في سر المصادقة الثابتة لـ TURN (AM_CALLS_TURN_STATIC_AUTH_SECRET): يمنح الخادم كل عميل بيانات اعتماد قصيرة العمر، صالحة لمدة انتهاء صلاحية بيانات اعتماد TURN (بالدقائق) (240 دقيقة افتراضياً). - عند استخدام بيانات اعتماد ثابتة، أضف
"username"و"credential"إلى إدخال TURN بدلاً من ذلك. - TURN على جانب الخادم (معطّل افتراضياً) يستخدم أيضاً خوادم TURN للاتصالات التي يبدأها الخادم.
إعدادات المكالمات الأخرى
| الإعداد | المتغير | الافتراضي | وظيفته |
|---|---|---|---|
| الحد الأقصى لعدد المشاركين في المكالمة | AM_CALLS_MAX_CALL_PARTICIPANTS | 0 (بدون حد) | العدد الأقصى للأشخاص في مكالمة واحدة. |
| السماح بمشاركة الشاشة | (وحدة التحكم بالنظام) | مفعّل | يسمح للمشاركين بمشاركة شاشاتهم. |
| تفعيل رنين المكالمات | AM_CALLS_ENABLE_RINGING | مفعّل | يُصدر رنيناً للأشخاص الآخرين في رسالة مباشرة أو جماعية عند بدء مكالمة فيها. |
| تفعيل البث المتزامن (Simulcast) لمشاركة الشاشة (تجريبي) | (وحدة التحكم بالنظام) | معطّل | يرسل مشاركات الشاشة بعدة مستويات جودة. |
| تفعيل مشفر AV1 لمشاركة الشاشة (تجريبي) | (وحدة التحكم بالنظام) | معطّل | يتم تجاهله عندما يكون البث المتزامن مفعلاً. |
لتطبيق القنوات الصوتية إعدادان في وحدة التحكم بالنظام › الإضافات › القنوات الصوتية: الانضمام عند فتح قناة صوتية (مفعّل افتراضيًا) والسماح بالفيديو في القنوات الصوتية (مفعّل افتراضيًا، لكن راجع قسم الفيديو أعلاه). الصوت نوع من أنواع القنوات، ويُختار عند إنشاء القناة (انظر إنشاء قناة)؛ لا توجد خطوة لاحقة لتحويل القناة إلى قناة صوتية. لا يزال هذان الإعدادان ينطبقان على كل قناة صوتية. يتطلب إنشاء قناة صوتية تفعيل تطبيق القنوات الصوتية؛ وبدونه، يكون خيار الصوت باهتًا في نافذة إنشاء القناة.

AM_CALLS_DISABLE=true. ستوقف القنوات الصوتية العمل أيضاً.الخوادم الأكبر: rtcd خارجي
بشكل افتراضي، يستضيف خادم Antimatter جميع وسائط المكالمات. في حالة وجود العديد من المكالمات المتزامنة، أو للحفاظ على فصل الوسائط عن خادم الدردشة، يمكن لتطبيق المكالمات تفويض الوسائط إلى rtcd، وهو خادم وسائط مستقل (نسخة مفتوحة المصدر من rtcd الخاصة بـ Mattermost، الإصدار 0.17 أو الأحدث). اضبط RTCD service URL (AM_CALLS_RTCD_SERVICE_URL)، على سبيل المثال https://rtcd.example.com: عندئذٍ تمر جميع المكالمات عبره، وترسل العملاء وسائطهم إلى منفذ rtcd الخاص به بدلاً من منفذ Antimatter. يمكن تقديم بيانات الاعتماد باستخدام AM_CALLS_RTCD_CLIENT_ID وAM_CALLS_RTCD_AUTH_KEY؛ وفي حال عدم تقديمها، يقوم التطبيق بتسجيل نفسه لدى rtcd. لا يتطلب الأمر ترخيصاً. يعرض تطبيق المكالمات للمديرين تحذيراً يوصي باستخدام rtcd عندما يكون لدى الخادم عادةً أكثر من 50 شخصاً في مكالمات في وقت واحد.
النسخ النصي والتسميات التوضيحية المباشرة
يمكن لـ Antimatter إجراء النسخ النصي للمكالمات باستخدام نموذج تحويل الصوت إلى نص تشغّله بنفسك، وعرض تسميات توضيحية مباشرة أثناء حديث الأشخاص. يستخدم Antimatter أي خادم يوفر نقطة نهاية /v1/audio/transcriptions متوافقة مع OpenAI، مثل خادم Whisper على شبكتك. لا حاجة إلى خدمة إضافية من Antimatter.
كيف يعمل
- يبدأ مضيف المكالمة النسخ النصي باستخدام نسخ المكالمة نصياً في عناصر التحكم بالمكالمة. يخبر شارة جارٍ النسخ النصي الجميع بذلك.
- يستمع تطبيق كل مشارك إلى ميكروفونه الخاص، ويقطع الكلام إلى مقاطع قصيرة (حتى 12 ثانية، ولا يتم ذلك أبداً أثناء الكتم) ويرسلها إلى Antimatter، التي تقوم بتحويلها إلى خادم تحويل الصوت إلى النص الخاص بك.
- عند تفعيل التسميات التوضيحية المباشرة، يُعرض نص كل مقطع كملاحظة توضيحية للمشاركين فوراً.
- عند توقف النسخ النصي أو انتهاء المكالمة، ينشر بوت المكالمات النص المنسوخ كملف نصي وملف تسميات WebVTT، في سلسلة رسائل المكالمة (في القنوات الصوتية، في القناة).
- عند تفعيل تلخيص النسخ النصية، ينشر الوكيل الافتراضي لتطبيق الدردشة بالذكاء الاصطناعي ملخصًا أيضًا في سلسلة الرسائل (انظر الذكاء الاصطناعي).

إعداد النظام
اضبط هذه الإعدادات على خدمة antimatter:
services:
antimatter:
environment:
AM_CALLS_ENABLE_TRANSCRIPTIONS: "true"
AM_CALLS_TRANSCRIBE_API: openai
AM_CALLS_TRANSCRIBE_API_OPEN_AIURL: http://stt.internal:8000/v1
AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL: whisper-1
AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY: ""
AM_CALLS_ENABLE_LIVE_CAPTIONS: "true"
AM_CALLS_LIVE_CAPTIONS_LANGUAGE: en
| الإعداد | المتغير | ما يجب إدخاله |
|---|---|---|
| تفعيل النسخ النصي للمكالمات (نسخة تجريبية) | AM_CALLS_ENABLE_TRANSCRIPTIONS | true |
| واجهة برمجة تطبيقات النسخ النصي للمكالمات | AM_CALLS_TRANSCRIBE_API | openai (يظهر كـ "واجهة برمجة تطبيقات متوافقة مع OpenAI (بدون خدمة مهام)") |
| عنوان واجهة برمجة تطبيقات تحويل الصوت إلى النص | AM_CALLS_TRANSCRIBE_API_OPEN_AIURL | عنوان URL الأساسي للواجهة، بما في ذلك /v1. |
| نموذج تحويل الصوت إلى النص | AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL | اسم النموذج كما تعرفه الواجهة، على سبيل المثال whisper-1. مطلوب. |
| مفتاح واجهة برمجة تطبيقات تحويل الصوت إلى النص | AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY | يُرسل كرمز حامل (bearer token). اتركه فارغاً إذا لم تكن الواجهة تتطلب مفتاحاً. |
| تفعيل التسميات التوضيحية المباشرة (نسخة تجريبية) | AM_CALLS_ENABLE_LIVE_CAPTIONS | true لعرض التسميات التوضيحية أثناء المكالمة. |
| لغة التسميات التوضيحية المباشرة | AM_CALLS_LIVE_CAPTIONS_LANGUAGE | اللغة المنطوقة، كرمز من حرفين (en افتراضياً). تُرسل هذه اللغة إلى واجهة برمجة التطبيقات لتحويل الصوت إلى نص للنسخ النصية أيضاً، لذا اضبطها حتى بدون تفعيل التسميات التوضيحية. |
| تلخيص النسخ النصية | AM_CALLS_SUMMARIZE_TRANSCRIPTIONS | true للحصول على ملخص بالذكاء الاصطناعي بعد المكالمة. |
openai للنسخ النصي: فبدء التسجيل سيحاول حينها بدء مُحوِّل خدمة المهام وسيفشل.يُرسل صوت كل من يتحدث أثناء تفعيل النسخ النصي إلى خادم تحويل الصوت إلى النص الذي قمت بإعداده، ويُنشر النص حيث يمكن للجميع في القناة قراءته. أخبر مستخدميك، وإذا كانت المكالمات سرّية، فاحتفظ بهذا الخادم على شبكتك الخاصة.
التسجيلات
تعمل تسجيلات المكالمات (والتحويل إلى نص باستخدام whisper.cpp المدمج أو محوّلات Azure) في حاويات منفصلة تبدأها خدمة مهام، وهي calls-offloader مفتوحة المصدر من Mattermost، والتي تقوم أنت بنشرها بجانب Antimatter. الإعدادات هي تفعيل تسجيل المكالمات (AM_CALLS_ENABLE_RECORDINGS، غير مفعّل افتراضيًا)، عنوان URL لخدمة المهام (AM_CALLS_JOB_SERVICE_URL)، الحد الأقصى لمدة تسجيل المكالمة (60 دقيقة افتراضيًا، بين 15 و180 دقيقة)، وجودة تسجيل المكالمة (منخفضة، متوسطة أو عالية؛ متوسطة افتراضيًا). لا حاجة إلى ترخيص. عند تفعيل التسجيلات، يبدأ مضيف المكالمة إيقافها وبدئها باستخدام تسجيل المكالمة في أدوات التحكم بالمكالمة؛ يرى جميع المشاركين في المكالمة أنها قيد التسجيل، ويُنشر التسجيل في سلسلة رسائل المكالمة عند إيقافه. لا تحتوي المكالمات في القنوات الصوتية على سلسلة رسائل، لذا لا يمكن تسجيلها. أما بالنسبة للنصوص التوضيحية والتسميات فقط، فإن إعداد تحويل الصوت إلى النص أعلاه أبسط: فهو لا يتطلب خدمة مهام.