कॉल और वॉइस

कॉल और वॉइस चैनल ऑडियो, वीडियो और स्क्रीन शेयरिंग को सीधे सर्वर पर उनके अपने पोर्ट पर भेजते हैं। यह पेज नेटवर्क की ओर, इंस्टॉल करने के बाद जाँचने वाली सेटिंग्स, और अपने स्वयं के speech-to-text मॉडल के साथ ट्रान्सक्रिप्शन पर कवर करता है।

कॉल कैसे काम करते हैं

कॉल Calls ऐप (id com.mattermost.calls) द्वारा प्रदान किए जाते हैं, जो डिफ़ॉल्ट रूप से इंस्टॉल और सक्षम होता है। वॉइस चैनल (Voice Channels ऐप, antimatter-next इमेज) Calls पर बनाए गए स्थायी कॉल रूम हैं: इनके लिए Calls को सक्षम होना आवश्यक है और वे समान सेटिंग्स, पोर्ट और सर्वर का उपयोग करते हैं।

Calls ऐप Antimatter के अंदर एक मीडिया सर्वर चलाता है। वेब ऐप, डेस्कटॉप ऐप और मोबाइल ऐप WebRTC के माध्यम से इससे जुड़ते हैं:

  • सिग्नलिंग सामान्य वेब कनेक्शन (आपके HTTPS प्रॉक्सी) के माध्यम से जाती है;
  • मीडिया (ऑडियो, वीडियो, स्क्रीन शेयरिंग) नहीं: यह कॉल पोर्ट, डिफ़ॉल्ट रूप से 8443 UDP और TCP, पर सीधे सर्वर तक जाती है।

सेटिंग्स सिस्टम कंसोल › प्लगइन्स › Calls में हैं। इनमें से प्रत्येक को antimatter सर्विस पर AM_CALLS_ एनवायरनमेंट वेरिएबल के साथ भी सेट किया जा सकता है, जो तब सिस्टम कंसोल पर हावी होता है और वहाँ सेटिंग को लॉक कर देता है। पुराने MM_CALLS_ नाम भी काम करते हैं।

इंस्टॉल करने के बाद इनकी जाँच करें

  1. कॉल पोर्ट खोलें। सर्वर और आपके क्लाउड प्रोवाइडर के फायरवॉल में 8443/udp और 8443/tcp की अनुमति दें।
  2. टेस्ट मोड जांचें। टेस्ट मोड (DefaultEnabled) डिफ़ॉल्ट रूप से बंद रहता है, जिससे सभी उपयोगकर्ता कॉल शुरू कर सकते हैं। जब तक आप कॉल की जांच कर रहे हैं, सिस्टम कंसोल › प्लगइन्स › कॉल में इसे चालू कर दें, ताकि केवल सिस्टम एडमिन ही चैनल में कॉल शुरू कर सकें, और जांच के बाद इसे फिर से बंद कर दें। इसकी वेरिएबल AM_CALLS_DEFAULT_ENABLED है: true का अर्थ है कि टेस्ट मोड बंद है। Mattermost से स्थानांतरित सर्वर अपनी कॉन्फ़िगरेशन में सहेजे गए विकल्प को बनाए रखता है।
  3. वीडियो के बारे में निर्णय लें। वीडियो सक्षम करें (EnableVideo, AM_CALLS_ENABLE_VIDEO) डिफ़ॉल्ट रूप से चालू रहता है: जहाँ भी कॉल सक्षम हैं, वहाँ लोग डायरेक्ट मैसेज, समूह संदेश और चैनल में अपनी कैमरा चालू कर सकते हैं। वॉइस चैनल में, वॉइस चैनल ऐप का वॉइस चैनल में वीडियो की अनुमति दें विकल्प निर्णायक होता है। यदि आप इसे बंद कर दें, तो कोई भी अपनी कैमरा चालू नहीं कर पाएगा, न ही वॉइस चैनल में।
  4. NAT के पीछे, पब्लिक एड्रेस सेट करें (अगला खंड)।

कॉल कहाँ चालू हैं

हर समुदाय का एक प्रकार होता है, कार्यस्थल या समुदाय (देखें नए समुदायों का प्रकार)। किसी चैनल के एडमिन ने कॉल को चालू या बंद नहीं किया है, तो वह अपने समुदाय के प्रकार का पालन करता है:

  • एक कार्यस्थल में, चैनल सर्वर के डिफ़ॉल्ट का पालन करते हैं: जब तक टेस्ट मोड बंद है, कॉल सभी के लिए चालू रहते हैं;
  • एक समुदाय में, चैनल में कॉल बंद रहते हैं: लोग बजाय इसके वॉइस चैनल में बात करते हैं। चैनल और समुदाय के एडमिन फिर भी किसी चैनल में कॉल चालू कर सकते हैं।

किसी चैनल की अपनी सेटिंग हमेशा प्राथमिक होती है। डायरेक्ट मैसेज और समूह संदेश किसी समुदाय का हिस्सा नहीं होते हैं: जब तक टेस्ट मोड बंद है, वहाँ कॉल सभी के लिए चालू रहते हैं। किसी समुदाय के प्रकार में बदलाव कॉल पर 30 सेकंड के भीतर लागू होता है।

पोर्ट, NAT और STUN

सेटिंगवेरिएबलडिफ़ॉल्ट
RTC Server Port (UDP)AM_CALLS_UDP_SERVER_PORT8443
RTC Server Port (TCP)AM_CALLS_TCP_SERVER_PORT8443
RTC Server Address (UDP), (TCP)AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESSखाली: सभी एड्रेस
ICE Host OverrideAM_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 के बीच होना चाहिए। साइट के कॉम्पोज़ फ़ाइल में, .env में CALLS_PORT बदलें: यह दोनों वेरिएबल्स सेट करता है और पोर्ट प्रकाशित करता है, होस्ट और कंटेनर में एक ही संख्या। क्लाइंट पहले UDP का प्रयास करते हैं और उसी पोर्ट पर TCP पर फ़ॉल बैक करते हैं।

जिस पता पर क्लाइंट मीडिया भेजते हैं

सर्वर हर क्लाइंट को वह पता बताता है जिस पर मीडिया भेजना है (इसका "होस्ट कैंडिडेट")। डिफ़ॉल्ट रूप से यह STUN सर्वर से पूछकर अपना सार्वजनिक पता खोजता है, जो एक सार्वजनिक सेवा है जो उस पते और पोर्ट के साथ जवाब देती है जिससे अनुरोध आया था। डिफ़ॉल्ट Cloudflare का सार्वजनिक STUN सर्वर है, stun:stun.cloudflare.com:3478। सर्वर ही इसका इस्तेमाल करने वाला एकमात्र नहीं है: कॉल में शामिल होने वाला हर क्लाइंट भी अपना सार्वजनिक पता पाने के लिए इससे पूछता है। STUN सर्वर केवल IP पते और पोर्ट देखता है, कभी कॉल की ऑडियो, वीडियो या संदेश नहीं।

जिस सर्वर में Mattermost का STUN सर्वर (stun.global.calls.mattermost.com) ICE सर्वर कॉन्फ़िगरेशन में सेव है, उदाहरण के लिए Mattermost से स्थानांतरण के बाद, वह इसके बजाय Cloudflare का इस्तेमाल करता है। सेव की गई सेटिंग नहीं बदली जाती।

पता स्वयं तब सेट करें जब:

  • सर्वर NAT के पीछे है, या इसके कई सार्वजनिक पते हैं: ICE होस्ट ओवरराइड को सार्वजनिक IP पते (या उसमें रिज़ॉल्व होने वाले होस्टनेम) पर सेट करें;
  • NAT 8443 पर एक अलग सार्वजनिक पोर्ट मैप करता है: उस सार्वजनिक पोर्ट पर ICE होस्ट पोर्ट ओवरराइड भी सेट करें;
  • सर्वर का इंटरनेट एक्सेस नहीं है, या आप चाहते हैं कि सर्वर और क्लाइंट बाहरी STUN सर्वर से संपर्क न करें: ICE होस्ट ओवरराइड सेट करें, और AM_CALLS_ICE_SERVERS_CONFIGS=[] के साथ STUN सूची खाली करें। ICE होस्ट ओवरराइड सेट होने पर, सर्वर अपना पता पाने के लिए STUN सर्वर से नहीं पूछता; खाली सूची क्लाइंट को पूछने से रोकती है।
services:
  antimatter:
    environment:
      AM_CALLS_ICE_HOST_OVERRIDE: 203.0.113.10
      AM_CALLS_ICE_SERVERS_CONFIGS: "[]"

तीसरे पक्ष के बिना STUN बनाए रखने के लिए, अपना खुद का STUN सर्वर चलाएँ (coturn जैसे TURN सर्वर भी STUN अनुरोधों का जवाब देते हैं) और ICE सर्वर कॉन्फ़िगरेशन में इसे सूचीबद्ध करें, नीचे दिए गए TURN उदाहरण की तरह।

केवल लोकल नेटवर्क पर, सर्वर का LAN पता इस्तेमाल करें। पोर्ट, पते या ICE सेटिंग्स बदलने के बाद सर्वर को रीस्टार्ट करें, या Calls ऐप को अक्षम और फिर सक्षम करें: मीडिया सर्वर तब सेटअप होता है जब ऐप शुरू होता है।

TURN, कठोर फ़ायरवॉल के लिए

कुछ नेटवर्क UDP और असामान्य TCP पोर्ट्स पर आउटगोइंग कनेक्शन दोनों को ब्लॉक करते हैं। ऐसे नेटवर्क पर रहने वाले लोगों को TURN सर्वर की ज़रूरत होती है, जो मीडिया को उस पोर्ट के माध्यम से रिले करता है जिसे वे पहुँच सकते हैं (अक्सर 443)। Antimatter में कोई TURN सर्वर शामिल नहीं है; coturn जैसे TURN सर्वर चलाएँ और उसे ICE Servers Configurations में जोड़ें, जो एक JSON सूची है:

[
  {"urls": ["stun:turn.example.com:3478"]},
  {"urls": ["turn:turn.example.com:3478?transport=udp", "turns:turn.example.com:443?transport=tcp"]}
]
  • एक साझा सीक्रेट (coturn का use-auth-secret) के साथ, वही सीक्रेट TURN Static Auth Secret (AM_CALLS_TURN_STATIC_AUTH_SECRET) में डालें: सर्वर हर क्लाइंट को छोटी अवधि के क्रेडेंशियल्स देता है, जो TURN Credentials Expiration (minutes) (डिफ़ॉल्ट रूप से 240) तक मान्य रहते हैं।
  • स्थिर क्रेडेंशियल्स के साथ, TURN एंट्री में "username" और "credential" जोड़ें।
  • Server Side TURN (डिफ़ॉल्ट रूप से बंद) भी उन कनेक्शन के लिए TURN सर्वर का उपयोग करता है जिन्हें सर्वर शुरू करता है।

अन्य कॉल सेटिंग्स

सेटिंगवेरिएबलडिफ़ॉल्टयह क्या करता है
Max call participantsAM_CALLS_MAX_CALL_PARTICIPANTS0 (कोई सीमा नहीं)एक कॉल में अधिकतम लोगों की संख्या।
Allow screen sharing(सिस्टम कंसोल)चालूभागियों को अपनी स्क्रीन साझा करने की अनुमति देता है।
Enable call ringingAM_CALLS_ENABLE_RINGINGचालूजब किसी डायरेक्ट या समूह संदेश में कॉल शुरू होती है, तो उसमें शामिल अन्य लोगों के फ़ोन बजते हैं।
Enable simulcast for screen sharing (Experimental)(सिस्टम कंसोल)बंदस्क्रीन शेयरिंग को कई गुणवत्ताओं में भेजता है।
Enable AV1 codec for screen sharing (Experimental)(सिस्टम कंसोल)बंदजब सिमुलकास्ट चालू हो, तो इसे नज़रअंदाज़ किया जाता है।

Voice Channels ऐप में दो सेटिंंग्स हैं, सिस्टम कंसोल › प्लगइन्स › Voice Channels में: Join when opening a voice channel (डिफ़ॉल्ट रूप से चालू) और Allow video in voice channels (डिफ़ॉल्ट रूप से चालू, लेकिन ऊपर दिए गए वीडियो को देखें)। कम्युनिटी एडमिन चैनल की सेटिंंग्स में उसे वॉइस चैनल में बदलते हैं।

कॉल को पूरी तरह बंद करने के लिए, सिस्टम कंसोल › प्लगइन्स › प्लगइन प्रबंधन में Calls ऐप को अक्षम करें, या AM_CALLS_DISABLE=true सेट करें। तब वॉइस चैनल भी काम करना बंद कर देंगे।

बड़े सर्वर: एक बाहरी rtcd

डिफ़ॉल्ट रूप से, एक Antimatter सर्वर सभी कॉल मीडिया संभालता है। कई एक साथ होने वाले कॉलों के लिए, या मीडिया को चैट सर्वर से अलग रखने के लिए, Calls ऐप मीडिया को rtcd को सौंप सकता है, जो एक अलग मीडिया सर्वर है (Mattermost का ओपन-सोर्स rtcd, संस्करण 0.17 या नवीनतम)। RTCD service URL (AM_CALLS_RTCD_SERVICE_URL) सेट करें, उदाहरण के लिए https://rtcd.example.com: तब सभी कॉल इसके माध्यम से जाएंगे, और क्लाइंट अपना मीडिया Antimatter के बजाय rtcd के अपने पोर्ट पर भेजेंगे। क्रेडेंशियल्स AM_CALLS_RTCD_CLIENT_ID और AM_CALLS_RTCD_AUTH_KEY के साथ दिए जा सकते हैं; यदि नहीं दिए जाते, तो ऐप स्वयं rtcd के साथ पंजीकरण करता है। कोई लाइसेंस आवश्यक नहीं है। जब सर्वर पर एक साथ 50 से अधिक लोग कॉल में हों, तो Calls ऐप एडमिन को rtcd की सिफारिश करने वाली एक चेतावनी दिखाता है।

ट्रान्सक्रिप्शन और लाइव कैप्शन

Antimatter आपके द्वारा स्वयं चलाए गए speech-to-text मॉडल के साथ कॉल का ट्रान्सक्रिप्ट बना सकता है, और लोगों की बात करते समय लिव कैप्शन दिखा सकता है। Antimatter किसी भी सर्वर का उपयोग करता है जो OpenAI-संगत /v1/audio/transcriptions एंडपॉइंट प्रदान करता है, जैसे आपके नेटवर्क पर एक Whisper सर्वर। Antimatter से कोई अतिरिक्त सेवा आवश्यक नहीं है।

यह कैसे काम करता है

  • कॉल का होस्ट कॉल कंट्रोल्स में कॉल ट्रान्सक्राइब करें के माध्यम से ट्रान्सक्रिप्ट शुरू करता है। ट्रान्सक्राइब हो रहा है बैज सभी को बताता है।
  • प्रत्येक प्रतिभागी का ऐप अपने माइक्रोफ़ोन को सुनता है, बोलचाल को छोटे-छोटे टुकड़ों में काटता है (अधिकतम 12 सेकंड, कभी भी म्यूट किए जाने पर नहीं) और उन्हें Antimatter को भेजता है, जो उन्हें आपके speech-to-text सर्वर को आगे भेजता है।
  • जब लिव कैप्शन चालू हैं, तो प्रत्येक टुकड़े का टेक्स्ट तुरंत प्रतिभागियों को एक कैप्शन के रूप में दिखाया जाता है।
  • जब ट्रान्सक्रिप्ट रुकता है या कॉल समाप्त होता है, तो Calls बॉट ट्रान्सक्रिप्ट को एक टेक्स्ट फ़ाइल और WebVTT सबटाइटल फ़ाइल के रूप में कॉल के थ्रेड में पोस्ट करता है (वॉइस चैनलों में, चैनल में)।
  • जब Summarize transcriptions चालू है, तो Agents ऐप का डिफ़ॉल्ट एजेंट थ्रेड में एक सारांश भी पोस्ट करता है (देखें AI)।
A call's thread: the Calls bot has posted the transcript as a text file, and an AI agent has posted a summary below it.
कॉल के बाद, कॉल के थ्रेड में ट्रान्सक्रिप्ट और उसका सारांश।

सेटअप करें

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
सेटिंगवेरिएबलक्या डालें
Enable call transcriptions (Beta)AM_CALLS_ENABLE_TRANSCRIPTIONStrue
Call transcriber APIAM_CALLS_TRANSCRIBE_APIopenai ("OpenAI-compatible API (no job service)" के रूप में दिखाया जाता है)
Speech-to-text API URLAM_CALLS_TRANSCRIBE_API_OPEN_AIURLAPI का बेस URL, /v1 तक समेत।
Speech-to-text modelAM_CALLS_TRANSCRIBE_API_OPEN_AI_MODELAPI द्वारा जाना जाने वाला मॉडल का नाम, उदाहरण के लिए whisper-1। आवश्यक है।
Speech-to-text API keyAM_CALLS_TRANSCRIBE_API_OPEN_AI_KEYबेयरर टोकन के रूप में भेजा जाता है। यदि API को कोई कुंजी नहीं चाहिए, तो इसे खाली छोड़ दें।
Enable live captions (Beta)AM_CALLS_ENABLE_LIVE_CAPTIONSकॉल के दौरान कैप्शन के लिए true।
लिवे कैप्शन भाषाAM_CALLS_LIVE_CAPTIONS_LANGUAGEबोली जाने वाली भाषा, दो अक्षरों के कोड के रूप में (डिफ़ॉल्ट रूप से en)। ट्रान्सक्रिप्ट के लिए भी इसे स्पीच-टू-टेक्स्ट API में भेजा जाता है, इसलिए कैप्शन के बिना भी इसे सेट करें।
ट्रान्सक्रिप्ट का सारांशAM_CALLS_SUMMARIZE_TRANSCRIPTIONSकॉल के बाद AI सारांश के लिए true।
सिस्टम कंसोल में, ट्रान्सक्रिप्टन सेटिंग्स तब तक दिखाई नहीं देतीं जब तक Enable call recordings चालू न हो, हालाँकि इस प्रकार के ट्रान्सक्रिप्टन के लिए रिकॉर्डिंग की आवश्यकता नहीं होती है। ऊपर दिए गए वेरिएबल्स के साथ उन्हें सेट करने से यह समस्या टल जाती है। openai ट्रान्सक्रिबर के साथ रिकॉर्डिंग चालू न करें: तब रिकॉर्डिंग शुरू करने पर job-service ट्रान्सक्रिबर शुरू करने की कोशिश होगी और वह विफल हो जाएगा।

जब ट्रान्सक्रिप्टन चालू होता है, तो हर उस व्यक्ति की ऑडियो जो बोल रहा है, आपके द्वारा कॉन्फ़िगर किए गए स्पीच-टू-टेक्स्ट सर्वर पर जाती है, और ट्रान्सक्रिप्ट वहाँ पोस्ट किया जाता है जहाँ चैनल के सभी सदस्य इसे पढ़ सकते हैं। अपने उपयोगकर्ताओं को इसकी सूचना दें, और यदि कॉल गोपनीय हैं तो उस सर्वर को अपने नेटवर्क पर ही रखें।

रिकॉर्डिंग

कॉल रिकॉर्डिंग (और बिल्ट-इन whisper.cpp या Azure ट्रान्सक्रिबर के साथ ट्रान्सक्रिप्शन) अलग-अलग कंटेनरों में चलती है, जिन्हें एक जॉब सर्विस शुरू करती है। यह Mattermost की ओपन-सोर्स calls-offloader है, जिसे आपको Antimatter के पास स्वयं डिप्लॉय करना होता है। सेटिंग्स हैं: Enable call recordings (AM_CALLS_ENABLE_RECORDINGS, डिफ़ॉल्ट रूप से बंद), Job service URL (AM_CALLS_JOB_SERVICE_URL), Maximum call recording duration (डिफ़ॉल्ट रूप से 60 मिनट, 15 से 180 के बीच) और Call recording quality (लो, मीडियम या हाई; डिफ़ॉल्ट रूप से मीडियम)। इसके लिए कोई लाइसेंस नहीं चाहिए। एक बार रिकॉर्डिंग चालू हो जाने के बाद, कॉल के होस्ट कॉल कंट्रोल्स में Record the call के माध्यम से रिकॉर्डिंग शुरू और रोक सकते हैं; कॉल में मौजूद सभी लोग देख सकते हैं कि रिकॉर्डिंग हो रही है, और रिकॉर्डिंग रोकने पर कॉल के थ्रेड में पोस्ट कर दी जाती है। वॉइस चैनल में कॉल का कोई थ्रेड नहीं होता, इसलिए उन्हें रिकॉर्ड नहीं किया जा सकता। केवल ट्रान्सक्रिप्ट और कैप्शन के लिए, ऊपर दिया गया स्पीच-टू-टेक्स्ट सेटअप सरल है: इसके लिए कोई जॉब सर्विस नहीं चाहिए।