שיחות וקול
שיחות וערוצי קול שולחים שמע, וידאו ושיתוף מסך ישירות לשרת על הפורט המיוחד שלהם. עמוד זה עוסק בצד הרשת, בהגדרות שיש לבדוק לאחר התקנה, ובתמלול באמצעות מודל speech-to-text שאתה מפעיל בעצמך.
איך השיחות עובדות
השיחות מסופקות על ידי אפליקציית Calls (מזהה com.mattermost.calls), המותקנת ומופעלת כברירת מחדל. ערוצי קול (אפליקציית Voice Channels, תמונת antimatter-next) הם חדרים קבועים לשיחות הבנויים על Calls: הם דורשים הפעלת Calls ומשתמשים באותן הגדרות, פורטים ושרתים.
אפליקציית Calls מפעילה שרת מדיה בתוך Antimatter. אפליקציית ה-Web, אפליקציית שולחן העבודה והאפליקציות המובייל מתחברות אליה באמצעות WebRTC:
- ה-signal עובר דרך חיבור ה-Web הרגיל (פרוקסי ה-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 Host | AM_CALLS_ICE_HOST_OVERRIDE | ריק: נמצא באמצעות STUN |
| החלפת פורט ICE Host | 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 על אותו פורט.
הכתובת אליה הלקוחות שולחים מדיה
השרת מודיע לכל לקוח את הכתובת אליה יש לשלוח מדיה (ה-"host candidate" שלו). כברירת מחדל הוא מזהה את כתובתו הציבורית על ידי שאלה לשרת STUN, שירות ציבורי שמשיב את הכתובת והפורט שמהם הגיעה הבקשה. ברירת המחדל היא שרת STUN הציבורי של Cloudflare, stun:stun.cloudflare.com:3478. השרת אינו הבלעדי שמשתמש בו: כל לקוח המצטרף לשיחה שואל גם את כתובתו הציבורית. שרת STUN רואה רק כתובות IP ופורטים, מעולם לא שמע, וידאו או הודעות.
שרת שיש לו עדיין את שרת STUN של Mattermost (stun.global.calls.mattermost.com) שמור בהגדרות שרתי ICE, למשל לאחר מעבר מ-Mattermost, משתמש בזה של Cloudflare. ההגדרה השמורה אינה משתנה.
יש להגדיר את הכתובת ידנית כאשר:
- השרת נמצא מאחורי NAT, או שיש לו כמה כתובות ציבוריות: יש להגדיר את החלפת ICE Host לכתובת IP הציבורית (או שם מחשב שמתורגם אליה);
- ה-NAT ממפה פורט ציבורי אחר ל-8443: יש להגדיר גם את החלפת פורט ICE Host לפורט הציבורי הזה;
- לשרת אין גישה לאינטרנט, או שאין רצון שהשרת והלקוחות יפנו לשרת STUN חיצוני: יש להגדיר את החלפת ICE Host, ולרוקן את רשימת STUN עם
AM_CALLS_ICE_SERVERS_CONFIGS=[]. כאשר החלפת ICE Host מוגדר, השרת לא שואל יותר שרת 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 כמו coturn ולהוסיף אותו ל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"]}
]
- עם סוד משותף (הפרמטר
use-auth-secretשל coturn), יש להזין את אותו סוד בסוד אימות סטטי ל-TURN (AM_CALLS_TURN_STATIC_AUTH_SECRET): השרת נותן לכל לקוח אימותים לזמן מוגבל, בתוקף לתוקף אימותי TURN (דקות) (240 כברירת מחדל). - במקרה של פרטי התחברות קבועים, יש להוסיף
"username"ו-"credential"לרשומת TURN. - 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) | (קונסולת מערכת) | כבוי | מועבר כאשר simulcast פעיל. |
לאפליקציית ערוצי הקול יש שתי הגדרות, בקונסולת מערכת › תוספים › ערוצי קול: הצטרפות בפתיחת ערוץ קול (באופן מוגדר כברירת מחדל) ואפשרות וידאו בערוצי קול (באופן מוגדר כברירת מחדל, אך ראו וידאו למעלה). מנהלי קהילה הופכים ערוץ לערוץ קול בהגדרות שלו.
AM_CALLS_DISABLE=true. ערוצי הקול יפסיקו לעבוד גם הם.שרתים גדולים יותר: rtcd חיצוני
ברירת המחדל היא ששרת Antimatter אחד נושא את כל מדיה השיחות. עבור שיחות רבות בו־זמנית, או כדי להשאיר את המדיה מחוץ לשרת הצ'אט, אפליקציית השיחות יכולה להעביר את המדיה ל־rtcd, שרת מדיה נפרד (ה־rtcd בקוד פתוח של Mattermost, גרסה 0.17 או חדשה יותר). יש להגדיר את כתובת שירות RTCD (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 |
| API לתמלול שיחות | AM_CALLS_TRANSCRIBE_API | openai (מוצג כ-"OpenAI-compatible API (no job service)") |
| כתובת API לדיבור-ל-טקסט | AM_CALLS_TRANSCRIBE_API_OPEN_AIURL | כתובת הבסיס של ה-API, עד כולל /v1. |
| מודל דיבור-ל-טקסט | AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL | שם המודל כפי שה-API מכיר אותו, לדוגמה whisper-1. חובה. |
| מפתח API לדיבור-ל-טקסט | AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY | נשלח כ- bearer token. יש להשאיר ריק אם ה-API אינו דורש מפתח. |
| הפעלת כתוביות חיות (בטא) | AM_CALLS_ENABLE_LIVE_CAPTIONS | true כדי להציג כתוביות חיות במהלך השיחה. |
| שפת כתוביות חיות | AM_CALLS_LIVE_CAPTIONS_LANGUAGE | השפה הנדברת, בקוד של שתי אותיות (en כברירת מחדל). הקוד נשלח גם ל-API של ההמרה מדיבור לטקסט, כך שיש להגדיר אותו גם אם לא משתמשים בכתוביות. |
| סיכום תמלול | AM_CALLS_SUMMARIZE_TRANSCRIPTIONS | true כדי לקבל סיכום באמצעות בינה מלאכותית לאחר השיחה. |
openai: אם תופעל הקלטה, המערכת תנסה להפעיל את הממליא של שירות המשימות ותכשל.הקול של כל מי שמדבר בזמן שהתמלול מופעל נשלח לשרת ההמרה מדיבור לטקסט שהוגדר, והתמלול מפורסם במקום שבו כל חברי הערוץ יכולים לקרוא אותו. יש להודיע על כך למשתמשים, ולשמור את השרת ברשת הפנימית שלכם אם השיחות סודיות.
הקלטות
הקלטת שיחות (כולל תמלול באמצעות whisper.cpp או Azure) מתבצעת בקונטיינרים נפרדים שמופעלים על ידי שירות משימות, calls-offloader של Mattermost, אותו אתם פורסים ליד Antimatter. ההגדרות הן הפעלת הקלטת שיחות (AM_CALLS_ENABLE_RECORDINGS, כבוי כברירת מחדל), כתובת שירות המשימות (AM_CALLS_JOB_SERVICE_URL), משך מקסימלי להקלטת שיחה (60 דקות כברירת מחדל, בין 15 ל-180) ו-איכות הקלטת השיחה (נמוכה, בינונית או גבוהה; בינונית כברירת מחדל). אין צורך ברשיון. לאחר שהקלטות מופעלות, המארח של השיחה מופעל ומעציר הקלטה באמצעות הקלטת השיחה בשליטות השיחה; כל המשתתפים בשיחה רואים שהיא מתקלטת, וההקלטה מפורסמת בשרשור של השיחה כאשר היא נעצרת. שיחות בערוצי קול אינן כוללות שרשור, ולכן אינן ניתנות להקלטה. עבור תמלול וכתוביות בלבד, הגדרת ההמרה מדבור לטקסט שמתוארת לעיל פשוטה יותר: היא אינה דורשת שירות משימות.