Panggilan dan suara
Panggilan dan kanal suara mengirim audio, video, dan berbagi layar langsung ke server melalui port khusus. Halaman ini membahas sisi jaringan, pengaturan yang perlu diperiksa setelah instalasi, dan transkripsi dengan model speech-to-text yang Anda jalankan sendiri.
Cara kerja panggilan
Panggilan disediakan oleh aplikasi Panggilan (id com.mattermost.calls), yang diinstal dan diaktifkan secara bawaan. Kanal suara (aplikasi Kanal Suara, image antimatter-next) adalah ruang panggilan permanen yang dibangun di atas Panggilan: mereka memerlukan Panggilan untuk diaktifkan dan menggunakan pengaturan, port, dan server yang sama.
Aplikasi Panggilan menjalankan server media di dalam Antimatter. Aplikasi web, aplikasi desktop, dan aplikasi seluler terhubung ke server tersebut dengan WebRTC:
- sinyal (signalling) melewati koneksi web normal (proxy HTTPS Anda);
- media (audio, video, berbagi layar) tidak: media dikirim langsung ke server melalui port panggilan, 8443 UDP dan TCP secara bawaan.
Pengaturannya ada di Konsol Sistem › Plugin › Panggilan. Masing-masing juga dapat diatur dengan variabel lingkungan AM_CALLS_ pada layanan antimatter, yang kemudian mengungguli Konsol Sistem dan mengunci pengaturan di sana. Nama lama MM_CALLS_ juga berfungsi.
Periksa ini setelah instalasi
- Buka port panggilan. Izinkan 8443/udp dan 8443/tcp di firewall server dan penyedia cloud Anda.
- Periksa mode uji. Mode uji (
DefaultEnabled) mati secara bawaan, sehingga semua orang dapat memulai panggilan. Aktifkan Aktif di Konsol Sistem › Plugin › Panggilan untuk hanya membiarkan administrator sistem memulai panggilan di kanal sambil Anda memeriksa apakah panggilan berfungsi, lalu matikan lagi. Variabelnya adalahAM_CALLS_DEFAULT_ENABLED:trueberarti mode uji mati. Server yang dipindahkan dari Mattermost mempertahankan pilihan yang disimpan dalam konfigurasinya. - Tentukan tentang video. Aktifkan video (
EnableVideo,AM_CALLS_ENABLE_VIDEO) aktif secara bawaan: orang dapat menyalakan kamera di mana pun panggilan diaktifkan, dalam pesan langsung, pesan grup, dan di kanal. Di kanal suara, Izinkan video di kanal suara dari aplikasi Kanal Suara yang menentukan. Matikan dan tidak ada yang dapat menyalakan kamera, bahkan di kanal suara. - Di belakang NAT, atur alamat publik (bagian berikutnya).
Di mana panggilan diaktifkan
Setiap komunitas memiliki jenis, Tempat kerja atau Komunitas (lihat Jenis komunitas baru). Kanal yang admin-nya tidak mengaktifkan atau menonaktifkan panggilan mengikuti jenis komunitasnya:
- di Tempat kerja, kanal mengikuti default server: panggilan diaktifkan untuk semua orang selama mode uji nonaktif;
- di Komunitas, panggilan nonaktif di kanal: orang-orang berbicara di kanal suara. Admin kanal dan komunitas tetap dapat mengaktifkan panggilan di sebuah kanal.
Pengaturan kanal itu sendiri selalu menang. Pesan langsung dan grup tidak termasuk dalam komunitas: panggilan di sana diaktifkan untuk semua orang selama mode uji nonaktif. Perubahan jenis komunitas berlaku untuk panggilan dalam 30 detik.
Port, NAT, dan STUN
| Pengaturan | Variabel | Bawaan |
|---|---|---|
| Port Server RTC (UDP) | AM_CALLS_UDP_SERVER_PORT | 8443 |
| Port Server RTC (TCP) | AM_CALLS_TCP_SERVER_PORT | 8443 |
| Alamat Server RTC (UDP), (TCP) | AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESS | kosong: semua alamat |
| Penimpaan Host ICE | AM_CALLS_ICE_HOST_OVERRIDE | kosong: ditemukan melalui STUN |
| Penimpaan Port Host ICE | AM_CALLS_ICE_HOST_PORT_OVERRIDE | kosong: port server |
| Konfigurasi Server ICE | AM_CALLS_ICE_SERVERS_CONFIGS | [{"urls":["stun:stun.cloudflare.com:3478"]}] |
| (Eksperimental) Aktifkan dukungan IPv6 | (Konsol Sistem) | nonaktif |
Port harus antara 80 dan 49151. Dengan file compose situs, ubah CALLS_PORT di .env: ini mengatur kedua variabel dan menerbitkan port, nomor yang sama di host dan di dalam kontainer. Klien pertama kali mencoba UDP dan beralih ke TCP di port yang sama.
Alamat mana yang klien kirim media ke
Server memberi tahu setiap klien alamat untuk mengirim media ("kandidat host"-nya). Secara default, server menemukan alamat publiknya dengan bertanya ke server STUN, layanan publik yang membalas dengan alamat dan port tempat permintaan berasal. Defaultnya adalah server STUN publik Cloudflare, stun:stun.cloudflare.com:3478. Server bukan satu-satunya yang menggunakannya: setiap klien yang bergabung ke panggilan juga bertanya ke server tersebut untuk alamat publiknya sendiri. Server STUN hanya melihat alamat IP dan port, tidak pernah audio, video, atau pesan panggilan.
Server yang masih menyimpan server STUN Mattermost (stun.global.calls.mattermost.com) di Konfigurasi Server ICE, misalnya setelah berpindah dari Mattermost, menggunakan Cloudflare sebagai gantinya. Pengaturan yang disimpan tidak diubah.
Atur alamat Anda sendiri ketika:
- server berada di belakang NAT, atau memiliki beberapa alamat publik: atur Penimpaan Host ICE ke alamat IP publik (atau nama host yang dipecahkan ke sana);
- NAT memetakan port publik yang berbeda ke 8443: juga atur Penimpaan Port Host ICE ke port publik tersebut;
- jika server tidak memiliki akses Internet, atau Anda tidak ingin server dan klien menghubungi server STUN eksternal: atur ICE Host Override, dan kosongkan daftar STUN dengan
AM_CALLS_ICE_SERVERS_CONFIGS=[]. Dengan ICE Host Override diatur, server tidak lagi meminta alamatnya dari server STUN; daftar kosong menghentikan klien dari melakukan hal yang sama.
services:
antimatter:
environment:
AM_CALLS_ICE_HOST_OVERRIDE: 203.0.113.10
AM_CALLS_ICE_SERVERS_CONFIGS: "[]"
Untuk tetap menggunakan STUN tanpa pihak ketiga, jalankan server STUN Anda sendiri (server TURN seperti coturn juga menjawab permintaan STUN) dan daftarkan di ICE Servers Configurations sebagai gantinya, seperti pada contoh TURN di bawah.
Hanya di jaringan lokal, gunakan alamat LAN server. Mulai ulang server setelah mengubah port, alamat, atau pengaturan ICE, atau nonaktifkan lalu aktifkan ulang aplikasi Calls: server media diatur saat aplikasi dimulai.
TURN, untuk firewall ketat
Beberapa jaringan memblokir UDP dan koneksi keluar ke port TCP yang tidak biasa. Orang-orang di jaringan tersebut membutuhkan server TURN, yang meneruskan media melalui port yang dapat mereka jangkau (sering kali 443). Antimatter tidak menyertakan server TURN; jalankan server TURN seperti coturn dan tambahkan ke ICE Servers Configurations, sebuah daftar JSON:
[
{"urls": ["stun:turn.example.com:3478"]},
{"urls": ["turn:turn.example.com:3478?transport=udp", "turns:turn.example.com:443?transport=tcp"]}
]
- Dengan rahasia bersama (coturn's
use-auth-secret), masukkan rahasia yang sama ke TURN Static Auth Secret (AM_CALLS_TURN_STATIC_AUTH_SECRET): server memberikan kredensial berumur pendek untuk setiap klien, yang berlaku selama TURN Credentials Expiration (minutes) (240 menit secara default). - Dengan kredensial tetap, tambahkan
"username"dan"credential"ke entri TURN sebagai gantinya. - Server Side TURN (nonaktif secara default) juga menggunakan server TURN untuk koneksi yang dimulai oleh server.
Pengaturan panggilan lainnya
| Pengaturan | Variabel | Bawaan | Fungsinya |
|---|---|---|---|
| Max call participants | AM_CALLS_MAX_CALL_PARTICIPANTS | 0 (tanpa batas) | Jumlah orang terbesar dalam satu panggilan. |
| Allow screen sharing | (Konsol Sistem) | on | Memungkinkan peserta untuk membagikan layar mereka. |
| Enable call ringing | AM_CALLS_ENABLE_RINGING | on | Membunyikan bel untuk orang lain dalam pesan langsung atau grup saat panggilan dimulai di sana. |
| Enable simulcast for screen sharing (Experimental) | (Konsol Sistem) | nonaktif | Mengirim bagikan layar dalam beberapa kualitas. |
| Enable AV1 codec for screen sharing (Experimental) | (Konsol Sistem) | nonaktif | Diabaikan saat simulcast aktif. |
Aplikasi Voice Channels memiliki dua pengaturan, di Konsol Sistem › Plugin › Voice Channels: Join when opening a voice channel (aktif secara default) dan Allow video in voice channels (aktif secara default, tetapi lihat video di atas). Admin komunitas mengubah kanal menjadi kanal suara di pengaturannya.
AM_CALLS_DISABLE=true. Kanal suara juga akan berhenti berfungsi.Server besar: rtcd eksternal
Secara bawaan, satu server Antimatter menangani semua media panggilan. Untuk banyak panggilan simultan, atau untuk memisahkan media dari server obrolan, aplikasi Panggilan dapat menyerahkan media ke rtcd, server media terpisah (rtcd open-source dari Mattermost, versi 0.17 atau lebih baru). Atur URL layanan RTCD (AM_CALLS_RTCD_SERVICE_URL), misalnya https://rtcd.example.com: semua panggilan kemudian akan melewati rtcd, dan klien akan mengirim media mereka ke port rtcd sendiri, bukan ke port Antimatter. Kredensial dapat diberikan dengan AM_CALLS_RTCD_CLIENT_ID dan AM_CALLS_RTCD_AUTH_KEY; tanpa kredensial, aplikasi akan mendaftarkan dirinya ke rtcd. Tidak diperlukan lisensi. Aplikasi Panggilan menampilkan peringatan kepada admin yang merekomendasikan penggunaan rtcd ketika server sering memiliki lebih dari 50 orang dalam panggilan secara bersamaan.
Transkripsi dan teks langsung
Antimatter dapat mentranskripsikan panggilan dengan model speech-to-text yang Anda jalankan sendiri, dan menampilkan teks langsung (live captions) saat orang berbicara. Antimatter menggunakan server mana pun yang menyediakan endpoint /v1/audio/transcriptions yang kompatibel dengan OpenAI, seperti server Whisper di jaringan Anda. Tidak diperlukan layanan tambahan dari Antimatter.
Cara kerjanya
- Tuan rumah panggilan memulai transkripsi dengan Transkripsikan panggilan di kontrol panggilan. Lencana Mentranskripsikan memberi tahu semua orang.
- Aplikasi setiap peserta mendengarkan mikrofonnya sendiri, memotong ucapan menjadi potongan-potongan pendek (maksimal 12 detik, tidak pernah saat dibisukan), dan mengirimkannya ke Antimatter, yang meneruskannya ke server speech-to-text Anda.
- Dengan teks langsung (live captions) diaktifkan, teks dari setiap potongan ditampilkan kepada peserta sebagai teks langsung (caption) segera.
- Ketika transkripsi berhenti atau panggilan berakhir, bot Panggilan memposting transkripsi sebagai file teks dan file subtitle WebVTT, di utas panggilan (di kanal suara, di kanal).
- Dengan Rangkum transkripsi diaktifkan, agen bawaan dari aplikasi Agen juga memposting ringkasan di utas (lihat AI).

Cara mengaturnya
Atur ini di layanan 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
| Pengaturan | Variabel | Isi apa |
|---|---|---|
| Aktifkan transkripsi panggilan (Beta) | AM_CALLS_ENABLE_TRANSCRIPTIONS | true |
| API transkripsi panggilan | AM_CALLS_TRANSCRIBE_API | openai (ditampilkan sebagai "OpenAI-compatible API (no job service)") |
| URL API speech-to-text | AM_CALLS_TRANSCRIBE_API_OPEN_AIURL | URL dasar API, hingga dan termasuk /v1. |
| Model speech-to-text | AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL | Nama model sebagaimana dikenal oleh API, misalnya whisper-1. Wajib diisi. |
| Kunci API speech-to-text | AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY | Dikirim sebagai token bearer. Biarkan kosong jika API tidak membutuhkannya. |
| Aktifkan Teks Langsung (Beta) | AM_CALLS_ENABLE_LIVE_CAPTIONS | true untuk teks langsung selama panggilan. |
| Bahasa Teks Langsung | AM_CALLS_LIVE_CAPTIONS_LANGUAGE | Bahasa yang diucapkan, sebagai kode dua huruf (en secara bawaan). Kode ini juga dikirim ke API speech-to-text untuk transkripsi, jadi tetapkan meskipun tanpa teks langsung. |
| Rangkum transkripsi | AM_CALLS_SUMMARIZE_TRANSCRIPTIONS | true untuk ringkasan AI setelah panggilan. |
openai: memulai rekaman akan mencoba memulai transkrip job-service dan gagal.Audio dari semua orang yang berbicara saat transkripsi aktif dikirim ke server speech-to-text yang Anda konfigurasikan, dan transkripsi diposting di tempat yang dapat dibaca oleh semua orang di kanal. Informasikan kepada pengguna Anda, dan simpan server tersebut di jaringan Anda sendiri jika panggilan bersifat rahasia.
Rekaman
Merekam panggilan (dan mentranskripsi dengan transkrip bawaan whisper.cpp atau Azure) dijalankan di kontainer terpisah yang dimulai oleh layanan tugas, calls-offloader open-source dari Mattermost, yang Anda deploy sendiri di samping Antimatter. Pengaturannya adalah Aktifkan rekaman panggilan (AM_CALLS_ENABLE_RECORDINGS, mati secara bawaan), URL layanan tugas (AM_CALLS_JOB_SERVICE_URL), Durasi maksimum rekaman panggilan (60 menit secara bawaan, 15 hingga 180) dan Kualitas rekaman panggilan (rendah, sedang, atau tinggi; sedang secara bawaan). Tidak diperlukan lisensi. Setelah rekaman diaktifkan, host panggilan memulai dan menghentikan rekaman dengan Rekam panggilan di kontrol panggilan; semua orang di panggilan melihat bahwa itu direkam, dan rekaman diposting di utas panggilan saat dihentikan. Panggilan di kanal suara tidak memiliki utas, sehingga tidak dapat direkam. Untuk transkripsi dan teks langsung saja, pengaturan speech-to-text di atas lebih sederhana: tidak memerlukan layanan tugas.