কল এবং ভয়েস
কলসমূহ এবং ভয়েস চ্যানেলসমূহ অডিও, ভিডিও এবং স্ক্রিন শেয়ার সরাসরি সার্ভারের নিজস্ব পোর্টে পাঠায়। এই পেজে নেটওয়ার্ক দিক, ইনস্টল করার পর যাচাই করার সেটিংস, এবং আপনি নিজে চালানো একটি স্পিচ-টু-টেক্সট মডেল দিয়ে ট্রান্সক্রিপশন নিয়ে আলোচনা করা হয়েছে।
কলসমূহ কীভাবে কাজ করে
কলসমূহ কলসমূহ অ্যাপ (id com.mattermost.calls) দ্বারা প্রদান করা হয়, যা ডিফল্টভাবে ইনস্টল এবং সক্রিয় থাকে। ভয়েস চ্যানেলসমূহ (ভয়েস চ্যানেলসমূহ অ্যাপ, antimatter-next ইমেজ) কলসমূহের ওপর নির্ভরশীল স্থায়ী কল রুম: এগুলোর জন্য কলসমূহ সক্রিয় থাকতে হবে এবং এগুলো একই সেটিংস, পোর্ট এবং সার্ভার ব্যবহার করে।
কলসমূহ অ্যাপটি Antimatter-এর ভেতরে একটি মিডিয়া সার্ভার চালায়। ওয়েব অ্যাপ, ডেস্কটপ অ্যাপ এবং মোবাইল অ্যাপগুলো WebRTC-এর মাধ্যমে এর সাথে সংযুক্ত হয়:
- সিগন্যালিং সাধারণ ওয়েব সংযোগের (আপনার HTTPS প্রক্সি) মাধ্যমে যায়;
- মিডিয়া (অডিও, ভিডিও, স্ক্রিন শেয়ার) নয়: এটি কলসমূহের পোর্টে, ডিফল্টভাবে 8443 UDP এবং TCP-তে, সরাসরি সার্ভারে যায়।
সেটিংসগুলো সিস্টেম কনসোল › প্লগইনসমূহ › কলসমূহ-এ রয়েছে। প্রতিটি সেটিং antimatter সার্ভিসে AM_CALLS_ পরিবেশ ভেরিয়েবল দিয়েও সেট করা যায়, যা সিস্টেম কনসোলকে অতিক্রম করে সেটিংসটি লক করে দেয়। লেগেসি MM_CALLS_ নামগুলোও কাজ করে।
ইনস্টল করার পর এগুলো যাচাই করুন
- কলসমূহের পোর্ট খুলুন। সার্ভার এবং আপনার ক্লাউড প্রোভাইডারের ফায়ারওয়ালে 8443/udp এবং 8443/tcp অনুমোদিত করুন।
- টেস্ট মোড পরীক্ষা করুন। টেস্ট মোড (
DefaultEnabled) ডিফল্টভাবে বন্ধ থাকে, তাই সবাই কল শুরু করতে পারে। কলগুলো ঠিকমতো কাজ করছে কিনা তা যাচাই করার সময়, শুধুমাত্র সিস্টেম অ্যাডমিনদের চ্যানেলে কল শুরু করার অনুমতি দিতে System Console › Plugins › Calls-এ এটি On করুন, পরে আবার বন্ধ করে দিন। ভ্যারিয়েবলটি হলোAM_CALLS_DEFAULT_ENABLED:trueমানে টেস্ট মোড বন্ধ। Mattermost থেকে সরিয়ে আনা সার্ভারটি তার কনফিগারেশনে সংরক্ষিত পছন্দটি বজায় রাখে। - ভিডিও সম্পর্কে সিদ্ধান্ত নিন। Enable video (
EnableVideo,AM_CALLS_ENABLE_VIDEO) ডিফল্টভাবে চালু থাকে: যেখানে কল চালু থাকে, সেখানে ডাইরেক্ট ও গ্রুপ মেসেজ এবং চ্যানেলে মানুষ তাদের ক্যামেরা চালু করতে পারে। ভয়েস চ্যানেলে, ভয়েস চ্যানেল অ্যাপের Allow video in voice channels নির্ধারণ করে। এটি বন্ধ করলে কেউই ক্যামেরা চালু করতে পারবে না, ভয়েস চ্যানেলেও নয়। - NAT-এর পেছনে, পাবলিক ঠিকানা সেট করুন (পরবর্তী সেকশন)।
কল কোথায় চালু থাকে
প্রতিটি কমিউনিটির একটি ধরন থাকে, ওয়ার্কস্পেস বা গিল্ড (দেখুন গিল্ড বা ওয়ার্কস্পেস)। যেসব চ্যানেলের অ্যাডমিন কল চালু বা বন্ধ করেননি, সেগুলো তাদের কমিউনিটির ধরন অনুসরণ করে:
- ওয়ার্কস্পেসে, চ্যানেলসমূহ সার্ভারের ডিফল্ট অনুসরণ করে: টেস্ট মোড বন্ধ থাকলে সবার জন্য কল চালু থাকে;
- গিল্ডে, চ্যানেলসমূহে কল বন্ধ থাকে: মানুষ ভয়েস চ্যানেলে কথা বলে। চ্যানেল এবং কমিউনিটির অ্যাডমিনরা একটি চ্যানেলে কল চালু করতে পারেন।
একটি চ্যানেলের নিজস্ব সেটিংস সবসময় অগ্রাধিকার পায়। ডাইরেক্ট ও গ্রুপ মেসেজ কোনো কমিউনিটির অংশ নয়: টেস্ট মোড বন্ধ থাকলে সেখানে সবাইয়ের জন্য কল চালু থাকে। একটি কমিউনিটির ধরনের পরিবর্তন ৩০ সেকেন্ডের মধ্যে কলে প্রযোজ্য হয়।
পোর্ট, 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 সাপোর্ট চালু করুন | (সিস্টেম কনসোল) | বন্ধ |
পোর্ট ৮০ এবং ৪৯১৫১-এর মধ্যে হতে হবে। সাইটের কম্পোজ ফাইলে .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 ৮৪৪৩-এর জন্য একটি ভিন্ন পাবলিক পোর্ট ম্যাপ করে: সেই পাবলিক পোর্টটি 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 রিকোয়েস্টের উত্তর দেয়) এবং নিচের TURN উদাহরণের মতো ICE সার্ভার কনফিগারেশনসমূহ-এ তালিকাভুক্ত করুন।
শুধুমাত্র লোকাল নেটওয়ার্কে, সার্ভারের 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 participants | AM_CALLS_MAX_CALL_PARTICIPANTS | 0 (কোনো সীমা নেই) | একটি কলে সর্বোচ্চ কতজন মানুষ থাকতে পারে। |
| Allow screen sharing | (সিস্টেম কনসোল) | অন | অংশগ্রহণকারীদের তাদের স্ক্রিন শেয়ার করতে দেয়। |
| Enable call ringing | AM_CALLS_ENABLE_RINGING | অন | যখন একটি ডাইরেক্ট বা গ্রুপ মেসেজে কল শুরু হয়, তখন অন্যদের রিং করে। |
| Enable simulcast for screen sharing (Experimental) | (সিস্টেম কনসোল) | বন্ধ | স্ক্রিন শেয়ারকে একাধিক কোয়ালিটিতে পাঠায়। |
| Enable AV1 codec for screen sharing (Experimental) | (সিস্টেম কনসোল) | বন্ধ | সিমুলকাস চালু থাকলে এটি উপেক্ষিত হয়। |
ভয়েস চ্যানেলস অ্যাপের দুটি সেটিংস আছে, সিস্টেম কনসোল › প্লাগইনসমূহ › ভয়েস চ্যানেলস-এ: ভয়েস চ্যানেল খোলার সময় যোগ দিন (ডিফল্টভাবে চালু) এবং ভয়েস চ্যানেলে ভিডিওর অনুমতি দিন (ডিফল্টভাবে চালু, তবে উপরের ভিডিও দেখুন)। ভয়েস একটি চ্যানেল টাইপ, চ্যানেল তৈরির সময় এটি বেছে নেওয়া হয় (দেখুন একটি চ্যানেল তৈরি করুন); পরে "ভয়েস চ্যানেলে রূপান্তর করুন" বলে কোনো ধাপ নেই। এই দুটি সেটিংস প্রতিটি ভয়েস চ্যানেলের জন্য প্রযোজ্য। একটি ভয়েস চ্যানেল তৈরি করতে ভয়েস চ্যানেলস অ্যাপ সক্রিয় থাকতে হবে; এটি ছাড়া, চ্যানেল তৈরির ডায়ালগে ভয়েস গ্রে আউট থাকে।

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-এ নিবন্ধিত হয়। কোনো লাইসেন্সের প্রয়োজন নেই। যখন একটি সার্ভারে একসাথে ৫০-এর বেশি মানুষ কলে থাকে, তখন Calls অ্যাপটি অ্যাডমিনদের rtcd ব্যবহার করার পরামর্শসহ একটি সতর্কবার্তা দেখায়।
ট্রান্সক্রিপশন এবং লাইভ ক্যাপশন
Antimatter আপনার নিজের চালানো speech-to-text মডেল দিয়ে কল ট্রান্সক্রিপ্ট করতে পারে এবং মানুষ কথা বলার সময় লাইভ ক্যাপশন দেখাতে পারে। Antimatter যেকোনো সার্ভার ব্যবহার করতে পারে যা OpenAI-সম্পৃক্ত /v1/audio/transcriptions এন্ডপয়েন্ট প্রদান করে, যেমন আপনার নেটওয়ার্কে একটি Whisper সার্ভার। Antimatter-এর কোনো অতিরিক্ত সার্ভিসের প্রয়োজন নেই।
কীভাবে এটি কাজ করে
- কলের হোস্ট কল কন্ট্রোলে কলের ট্রান্সক্রিপশন করুন দিয়ে ট্রান্সক্রিপশন শুরু করেন। ট্রান্সক্রিপশন চলছে ব্যাজ সবাইকে জানায়।
- প্রতিটি অংশগ্রহণকারীর অ্যাপটি নিজের মাইক্রোফোন শোনে, কথাগুলো ছোট ছোট টুকরোতে কাটে (সর্বোচ্চ ১২ সেকেন্ড, মিউট থাকলে কখনোই না) এবং Antimatter-এ পাঠায়, যা সেগুলো আপনার speech-to-text সার্ভারে ফরোয়ার্ড করে।
- লাইভ ক্যাপশন চালু থাকলে, প্রতিটি টুকরোর টেক্সট অংশগ্রহণকারীদের সাথে সাথে ক্যাপশন হিসেবে দেখানো হয়।
- ট্রান্সক্রিপশন থামলে বা কল শেষ হলে, Calls বটটি ট্রান্সক্রিপ্টটি একটি টেক্সট ফাইল এবং একটি WebVTT সাবটাইটেল ফাইল হিসেবে কলের থ্রেডে (ভয়েস চ্যানেলে, চ্যানেলে) পোস্ট করে।
- Summarize transcriptions চালু থাকলে, AI চ্যাট অ্যাপের ডিফল্ট এজেন্ট থ্রেডে একটি সারসংক্ষেপও পোস্ট করে (দেখুন AI)।

সেটআপ করুন
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_TRANSCRIPTIONS | true |
| Call transcriber API | AM_CALLS_TRANSCRIBE_API | openai (দেখানো হয় "OpenAI-compatible API (no job service)") |
| Speech-to-text API URL | AM_CALLS_TRANSCRIBE_API_OPEN_AIURL | API-এর বেস URL, /v1 পর্যন্ত এবং সহ। |
| Speech-to-text model | AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL | API যেভাবে মডেলের নাম চেনে, যেমন whisper-1। আবশ্যক। |
| Speech-to-text API key | AM_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 করুন। |
openai ট্রান্সক্রাইবারের সাথে রেকর্ডিং চালু করবেন না: রেকর্ডিং শুরু করার চেষ্টা করলে জব-সার্ভিস ট্রান্সক্রাইবার শুরু করার চেষ্টা করবে এবং ব্যর্থ হবে।ট্রান্সক্রিপশন চালু থাকাকালীন যারা কথা বলেন তাদের অডিও আপনার কনফিগার করা স্পিচ-টু-টেক্সট সার্ভারে যায়, এবং ট্রান্সক্রিপ্ট চ্যানেলে এমন জায়গায় পোস্ট করা হয় যেখানে সবাই পড়তে পারে। আপনার ব্যবহারকারীদের জানান, এবং কল গোপনীয় হলে সেই সার্ভারটি আপনার নিজের নেটওয়ার্কে রাখুন।
রেকর্ডিং
কল রেকর্ডিং (এবং বিল্ট-ইন 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 (ডিফল্ট ৬০ মিনিট, ১৫ থেকে ১৮০) এবং Call recording quality (low, medium বা high; ডিফল্ট medium)। কোনো লাইসেন্সের প্রয়োজন নেই। রেকর্ডিং চালু হলে, কলের হোস্ট কল কন্ট্রোলসের Record the call দিয়ে রেকর্ডিং শুরু এবং থামাতে পারেন; কলে থাকা সবাই দেখতে পায় যে এটি রেকর্ড হচ্ছে, এবং রেকর্ডিং থামলে কলের থ্রেডে পোস্ট করা হয়। ভয়েস চ্যানেলে থাকা কলের কোনো থ্রেড নেই, তাই সেগুলো রেকর্ড করা যায় না। শুধুমাত্র ট্রান্সক্রিপ্ট এবং ক্যাপশনের জন্য, উপরের স্পিচ-টু-টেক্সট সেটআপটি সহজ: এটির জন্য কোনো জব সার্ভিসের প্রয়োজন নেই।