Kaynağa Gözat

feat(jigasi,transcriber): transcriber component and jigasi configuration updates (#1881)

* feat(jigasi): new JIGASI_MODE variable for sip vs transcriber behavior

* wip: split jigasi config into segments

* prune jigasi compose variables

* prune further variables

* append instead of overwrite

* fix variables

* sync xmpp config with meet configs

* further config syncup

* remove property from xmpp section

* move translator as per comments

* fix sipserver trailing end

* fix acc domain for jigasi bosh join

* fix public domain

* jigasi openjdk requirement

* make gcloud optional for transcription configuration

* revert dockerfile to discuss separately

* revert translator config removal

* remove translator config from transcriber compose
Aaron van Meerten 8 ay önce
ebeveyn
işleme
3f6740809c

+ 1 - 11
jigasi.yml

@@ -9,7 +9,6 @@ services:
             - '${JIGASI_PORT_MIN:-20000}-${JIGASI_PORT_MAX:-20050}:${JIGASI_PORT_MIN:-20000}-${JIGASI_PORT_MAX:-20050}/udp'
         volumes:
             - ${CONFIG}/jigasi:/config:Z
-            - ${CONFIG}/transcripts:/tmp/transcripts:Z
         environment:
             - AUTOSCALER_SIDECAR_KEY_FILE
             - AUTOSCALER_SIDECAR_KEY_ID
@@ -37,6 +36,7 @@ services:
             - JIGASI_JVB_TIMEOUT
             - JIGASI_LOCAL_REGION
             - JIGASI_LOG_FILE
+            - JIGASI_MODE=sip
             - JIGASI_SIP_URI
             - JIGASI_SIP_PASSWORD
             - JIGASI_SIP_SERVER
@@ -52,16 +52,6 @@ services:
             - JIGASI_HEALTH_CHECK_INTERVAL
             - JIGASI_SIP_KEEP_ALIVE_METHOD
             - JIGASI_ENABLE_SDES_SRTP
-            - ENABLE_TRANSCRIPTIONS
-            - JIGASI_TRANSCRIBER_ADVERTISE_URL
-            - JIGASI_TRANSCRIBER_RECORD_AUDIO
-            - JIGASI_TRANSCRIBER_SEND_TXT
-            - GC_PROJECT_ID
-            - GC_PRIVATE_KEY_ID
-            - GC_PRIVATE_KEY
-            - GC_CLIENT_EMAIL
-            - GC_CLIENT_ID
-            - GC_CLIENT_CERT_URL
             - SHUTDOWN_REST_ENABLED
             - SENTRY_DSN="${JIGASI_SENTRY_DSN:-0}"
             - SENTRY_ENVIRONMENT

+ 3 - 150
jigasi/rootfs/defaults/sip-communicator.properties

@@ -1,24 +1,12 @@
-{{ $ENABLE_TRANSCRIPTIONS := .Env.ENABLE_TRANSCRIPTIONS | default "0" | toBool -}}
-{{ $JIGASI_BREWERY_MUC := .Env.JIGASI_BREWERY_MUC | default "jigasibrewery" -}}
-{{ $JIGASI_XMPP_USER := .Env.JIGASI_XMPP_USER | default "jigasi" -}}
 {{ $JIGASI_JVB_TIMEOUT := .Env.JIGASI_JVB_TIMEOUT | default "30000" -}}
 {{ $JIGASI_LOCAL_REGION := .Env.JIGASI_LOCAL_REGION | default "" -}}
 {{ $BOSH_URL_PATTERN := .Env.BOSH_URL_PATTERN | default "" -}}
-{{ $USE_TRANSLATOR_IN_CONFERENCE := .Env.USE_TRANSLATOR_IN_CONFERENCE | default "0" | toBool -}}
-{{ $XMPP_AUTH_DOMAIN := .Env.XMPP_AUTH_DOMAIN | default "auth.meet.jitsi" -}}
 {{ $XMPP_MUC_DOMAIN := .Env.XMPP_MUC_DOMAIN | default "muc.meet.jitsi" -}}
-{{ $XMPP_GUEST_DOMAIN := .Env.XMPP_GUEST_DOMAIN | default "guest.meet.jitsi" -}}
-{{ $XMPP_INTERNAL_MUC_DOMAIN := .Env.XMPP_INTERNAL_MUC_DOMAIN | default "internal-muc.meet.jitsi" -}}
-{{ $XMPP_DOMAIN := .Env.XMPP_DOMAIN | default "meet.jitsi" -}}
-{{ $XMPP_PORT := .Env.XMPP_PORT | default "5222" -}}
 {{ $XMPP_SERVER := .Env.XMPP_SERVER | default "xmpp.meet.jitsi" -}}
-{{ $XMPP_SERVERS := splitList "," $XMPP_SERVER -}}
+{{ $PUBLIC_URL_DOMAIN := .Env.PUBLIC_URL | default "https://localhost:8443" | trimPrefix "https://" | trimSuffix "/" -}}
 {{ $SHUTDOWN_REST_ENABLED := .Env.SHUTDOWN_REST_ENABLED | default "false" | toBool -}}
-{{ $DISABLE_SIP := .Env.JIGASI_DISABLE_SIP | default "false" | toBool -}}
-{{/* assign env from context, preserve during range when . is re-assigned */}}
 {{ $TRUSTED_DOMAIN_LIST := .Env.JIGASI_TRUSTED_DOMAINS | default "" -}}
 {{ $TRUSTED_DOMAINS := splitList "," $TRUSTED_DOMAIN_LIST -}}
-{{ $ENV := .Env -}}
 
 net.java.sip.communicator.impl.protocol.SingleCallInProgressPolicy.enabled=false
 
@@ -31,155 +19,27 @@ net.java.sip.communicator.packetlogging.PACKET_LOGGING_ENABLED=false
 # Control REST Shutdown
 org.jitsi.jigasi.ENABLE_REST_SHUTDOWN={{ $SHUTDOWN_REST_ENABLED }}
 
-{{ if not $ENABLE_TRANSCRIPTIONS -}}
-# SIP account
-net.java.sip.communicator.impl.protocol.sip.acc1=acc1
-{{ if .Env.JIGASI_SIP_SERVER }}
-net.java.sip.communicator.impl.protocol.sip.acc1.PROXY_ADDRESS={{ .Env.JIGASI_SIP_SERVER }}
-net.java.sip.communicator.impl.protocol.sip.acc1.PROXY_AUTO_CONFIG=false
-net.java.sip.communicator.impl.protocol.sip.acc1.PROXY_PORT={{ .Env.JIGASI_SIP_PORT | default "5060" }}
-net.java.sip.communicator.impl.protocol.sip.acc1.PREFERRED_TRANSPORT={{ .Env.JIGASI_SIP_TRANSPORT | default "UDP" }}
-{{ end }}
-{{ if .Env.JIGASI_ENABLE_SDES_SRTP | default "0" | toBool }}
-net.java.sip.communicator.impl.protocol.sip.acc1.SAVP_OPTION=1
-net.java.sip.communicator.impl.protocol.sip.acc1.DEFAULT_ENCRYPTION=true
-net.java.sip.communicator.impl.protocol.sip.acc1.DEFAULT_SIPZRTP_ATTRIBUTE=false
-net.java.sip.communicator.impl.protocol.sip.acc1.ENCRYPTION_PROTOCOL.ZRTP=0
-net.java.sip.communicator.impl.protocol.sip.acc1.ENCRYPTION_PROTOCOL.SDES=1
-net.java.sip.communicator.impl.protocol.sip.acc1.ENCRYPTION_PROTOCOL.DTLS-SRTP=0
-net.java.sip.communicator.impl.protocol.sip.acc1.ENCRYPTION_PROTOCOL_STATUS.ZRTP=false
-net.java.sip.communicator.impl.protocol.sip.acc1.ENCRYPTION_PROTOCOL_STATUS.SDES=true
-net.java.sip.communicator.impl.protocol.sip.acc1.ENCRYPTION_PROTOCOL_STATUS.DTLS-SRTP=false
-net.java.sip.communicator.impl.protocol.sip.acc1.SDES_CIPHER_SUITES=AES_CM_128_HMAC_SHA1_80,AES_CM_128_HMAC_SHA1_32
-{{ end }}
-net.java.sip.communicator.impl.protocol.sip.acc1.ACCOUNT_UID=SIP\:{{ .Env.JIGASI_SIP_URI }}
-net.java.sip.communicator.impl.protocol.sip.acc1.PASSWORD={{ .Env.JIGASI_SIP_PASSWORD | b64enc }}
-net.java.sip.communicator.impl.protocol.sip.acc1.PROTOCOL_NAME=SIP
-net.java.sip.communicator.impl.protocol.sip.acc1.SERVER_ADDRESS={{ .Env.JIGASI_SIP_SERVER }}
-net.java.sip.communicator.impl.protocol.sip.acc1.USER_ID={{ .Env.JIGASI_SIP_URI }}
-net.java.sip.communicator.impl.protocol.sip.acc1.KEEP_ALIVE_INTERVAL=25
-net.java.sip.communicator.impl.protocol.sip.acc1.KEEP_ALIVE_METHOD={{ .Env.JIGASI_SIP_KEEP_ALIVE_METHOD | default "OPTIONS" }}
-net.java.sip.communicator.impl.protocol.sip.acc1.VOICEMAIL_ENABLED=false
-net.java.sip.communicator.impl.protocol.sip.acc1.JITSI_MEET_ROOM_HEADER_NAME=X-Room-Name
-net.java.sip.communicator.impl.protocol.sip.acc1.JITSI_MEET_DOMAIN_BASE_HEADER_NAME=X-Domain-Base
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.AMR-WB/16000=750
-# Temporarily disable G722, see: https://github.com/jitsi/docker-jitsi-meet/issues/1357
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.G722/8000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.GSM/8000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.H263-1998/90000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.H264/90000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.PCMA/8000=600
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.PCMU/8000=650
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.SILK/12000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.SILK/16000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.SILK/24000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.SILK/8000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.VP8/90000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.iLBC/8000=10
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.opus/48000=1000
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.red/90000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.speex/16000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.speex/32000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.speex/8000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.telephone-event/8000=1
-net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.ulpfec/90000=0
-net.java.sip.communicator.impl.protocol.sip.acc1.OVERRIDE_ENCODINGS=true
-net.java.sip.communicator.impl.protocol.sip.acc1.DOMAIN_BASE={{ $XMPP_DOMAIN }}
-{{ end -}}
-
-# XMPP account used for control
-
-{{ range $index, $element := $XMPP_SERVERS -}}
-{{ $SERVER := splitn ":" 2 $element }}
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}=acc{{ $index }}
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.ACCOUNT_UID=Jabber:{{ $JIGASI_XMPP_USER }}@{{ $XMPP_AUTH_DOMAIN }}
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.USER_ID={{ $JIGASI_XMPP_USER }}@{{ $XMPP_AUTH_DOMAIN }}
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_SERVER_OVERRIDDEN=true
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.SERVER_ADDRESS={{ $SERVER._0 }}
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.SERVER_PORT={{ $SERVER._1 | default $XMPP_PORT }}
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.PASSWORD={{ $ENV.JIGASI_XMPP_PASSWORD | b64enc }}
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.AUTO_GENERATE_RESOURCE=true
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.RESOURCE_PRIORITY=30
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_CARBON_DISABLED=true
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.DEFAULT_ENCRYPTION=true
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_USE_ICE=true
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_ACCOUNT_DISABLED=false
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_PREFERRED_PROTOCOL=false
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.AUTO_DISCOVER_JINGLE_NODES=false
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.PROTOCOL=Jabber
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_USE_UPNP=false
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.USE_DEFAULT_STUN_SERVER=true
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.ENCRYPTION_PROTOCOL.DTLS-SRTP=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.ENCRYPTION_PROTOCOL_STATUS.DTLS-SRTP=true
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.VIDEO_CALLING_DISABLED=true
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.OVERRIDE_ENCODINGS=true
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.G722/8000=705
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.GSM/8000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.H263-1998/90000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.H264/90000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.PCMA/8000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.PCMU/8000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.SILK/12000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.SILK/16000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.SILK/24000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.SILK/8000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.VP8/90000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.iLBC/8000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.opus/48000=750
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.speex/16000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.speex/32000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.speex/8000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.telephone-event/8000=0
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.BREWERY={{ $JIGASI_BREWERY_MUC }}@{{ $XMPP_INTERNAL_MUC_DOMAIN }}
-net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.DOMAIN_BASE={{ $XMPP_DOMAIN }}
-{{ end -}}
 org.jitsi.jigasi.BREWERY_ENABLED=true
-org.jitsi.jigasi.ENABLE_SIP={{ not $DISABLE_SIP }}
+org.jitsi.jigasi.MUC_JOIN_TIMEOUT=10
 
 org.jitsi.jigasi.HEALTH_CHECK_SIP_URI={{ .Env.JIGASI_HEALTH_CHECK_SIP_URI | default "" }}
 org.jitsi.jigasi.HEALTH_CHECK_INTERVAL={{ .Env.JIGASI_HEALTH_CHECK_INTERVAL | default "300000" }}
 org.jitsi.jigasi.HEALTH_CHECK_TIMEOUT=600000
 
 org.jitsi.jigasi.xmpp.acc.IS_SERVER_OVERRIDDEN=true
-org.jitsi.jigasi.xmpp.acc.SERVER_ADDRESS={{ $XMPP_SERVER }}
+org.jitsi.jigasi.xmpp.acc.SERVER_ADDRESS={{ $PUBLIC_URL_DOMAIN }}
 org.jitsi.jigasi.xmpp.acc.VIDEO_CALLING_DISABLED=true
 org.jitsi.jigasi.xmpp.acc.JINGLE_NODES_ENABLED=false
 org.jitsi.jigasi.xmpp.acc.AUTO_DISCOVER_STUN=false
 org.jitsi.jigasi.xmpp.acc.IM_DISABLED=true
 org.jitsi.jigasi.xmpp.acc.SERVER_STORED_INFO_DISABLED=true
 org.jitsi.jigasi.xmpp.acc.IS_FILE_TRANSFER_DISABLED=true
-{{ if .Env.ENABLE_AUTH | default "0" | toBool }}
-{{ if .Env.ENABLE_GUESTS | default "0" | toBool }}
-org.jitsi.jigasi.xmpp.acc.USER_ID={{ $JIGASI_XMPP_USER }}@{{ $XMPP_GUEST_DOMAIN }}
-org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=true
-{{ else }}
-org.jitsi.jigasi.xmpp.acc.USER_ID={{ $JIGASI_XMPP_USER }}@{{ $XMPP_AUTH_DOMAIN }}
-org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false
-{{ end }}
-org.jitsi.jigasi.xmpp.acc.PASS={{ .Env.JIGASI_XMPP_PASSWORD }}
-org.jitsi.jigasi.xmpp.acc.ALLOW_NON_SECURE=true
-{{ end }}
 
 # Activate this property if you are using self-signed certificates or other
 # type of non-trusted certicates. In this mode your service trust in the
 # remote certificates always.
 net.java.sip.communicator.service.gui.ALWAYS_TRUST_MODE_ENABLED=true
 
-{{ if $ENABLE_TRANSCRIPTIONS -}}
-# Transcription config
-org.jitsi.jigasi.ENABLE_TRANSCRIPTION=true
-org.jitsi.jigasi.transcription.ENABLE_TRANSLATION=true
-org.jitsi.jigasi.transcription.DIRECTORY=/tmp/transcripts
-org.jitsi.jigasi.transcription.BASE_URL={{ .Env.PUBLIC_URL }}/transcripts
-org.jitsi.jigasi.transcription.jetty.port=-1
-org.jitsi.jigasi.transcription.ADVERTISE_URL={{ .Env.JIGASI_TRANSCRIBER_ADVERTISE_URL | default "false"}}
-org.jitsi.jigasi.transcription.SAVE_JSON=false
-org.jitsi.jigasi.transcription.SEND_JSON=true
-org.jitsi.jigasi.transcription.SAVE_TXT=true
-org.jitsi.jigasi.transcription.SEND_TXT={{ .Env.JIGASI_TRANSCRIBER_SEND_TXT | default "false"}}
-org.jitsi.jigasi.transcription.RECORD_AUDIO={{ .Env.JIGASI_TRANSCRIBER_RECORD_AUDIO | default "false"}}
-org.jitsi.jigasi.transcription.RECORD_AUDIO_FORMAT=wav
-{{ end -}}
 
 {{ if .Env.JIGASI_SIP_DEFAULT_ROOM }}
 org.jitsi.jigasi.DEFAULT_JVB_ROOM_NAME={{ .Env.JIGASI_SIP_DEFAULT_ROOM }}
@@ -202,13 +62,6 @@ org.jitsi.jigasi.LOCAL_REGION={{ $JIGASI_LOCAL_REGION }}
 org.jitsi.jigasi.xmpp.acc.BOSH_URL_PATTERN={{ $BOSH_URL_PATTERN }}
 {{ end }}
 
-{{ if $USE_TRANSLATOR_IN_CONFERENCE }}
-org.jitsi.jigasi.xmpp.acc.USE_TRANSLATOR_IN_CONFERENCE=true
-net.java.sip.communicator.impl.protocol.sip.acc1.USE_TRANSLATOR_IN_CONFERENCE=true
-# Should be enabled when using translator mode
-net.java.sip.communicator.impl.neomedia.audioSystem.audiosilence.captureDevice_list=["AudioSilenceCaptureDevice:noTransferData"]
-{{ end }}
-
 {{ if .Env.JIGASI_CONFIGURATION -}}
 {{ join "\n" (splitList "," .Env.JIGASI_CONFIGURATION) }}
 {{ end -}}

+ 83 - 0
jigasi/rootfs/defaults/sipserver-sip-communicator.properties

@@ -0,0 +1,83 @@
+{{ $JIGASI_XMPP_USER := .Env.JIGASI_XMPP_USER | default "jigasi" -}}
+{{ $XMPP_AUTH_DOMAIN := .Env.XMPP_AUTH_DOMAIN | default "auth.meet.jitsi" -}}
+{{ $XMPP_DOMAIN := .Env.XMPP_DOMAIN | default "meet.jitsi" -}}
+{{ $XMPP_GUEST_DOMAIN := .Env.XMPP_GUEST_DOMAIN | default "guest.meet.jitsi" -}}
+{{ $USE_TRANSLATOR_IN_CONFERENCE := .Env.USE_TRANSLATOR_IN_CONFERENCE | default "0" | toBool -}}
+
+org.jitsi.jigasi.ENABLE_SIP=true
+
+# SIP account
+net.java.sip.communicator.impl.protocol.sip.acc1=acc1
+{{ if .Env.JIGASI_SIP_SERVER }}
+net.java.sip.communicator.impl.protocol.sip.acc1.PROXY_ADDRESS={{ .Env.JIGASI_SIP_SERVER }}
+net.java.sip.communicator.impl.protocol.sip.acc1.PROXY_AUTO_CONFIG=false
+net.java.sip.communicator.impl.protocol.sip.acc1.PROXY_PORT={{ .Env.JIGASI_SIP_PORT | default "5060" }}
+net.java.sip.communicator.impl.protocol.sip.acc1.PREFERRED_TRANSPORT={{ .Env.JIGASI_SIP_TRANSPORT | default "UDP" }}
+{{ end }}
+{{ if .Env.JIGASI_ENABLE_SDES_SRTP | default "0" | toBool }}
+net.java.sip.communicator.impl.protocol.sip.acc1.SAVP_OPTION=1
+net.java.sip.communicator.impl.protocol.sip.acc1.DEFAULT_ENCRYPTION=true
+net.java.sip.communicator.impl.protocol.sip.acc1.DEFAULT_SIPZRTP_ATTRIBUTE=false
+net.java.sip.communicator.impl.protocol.sip.acc1.ENCRYPTION_PROTOCOL.ZRTP=0
+net.java.sip.communicator.impl.protocol.sip.acc1.ENCRYPTION_PROTOCOL.SDES=1
+net.java.sip.communicator.impl.protocol.sip.acc1.ENCRYPTION_PROTOCOL.DTLS-SRTP=0
+net.java.sip.communicator.impl.protocol.sip.acc1.ENCRYPTION_PROTOCOL_STATUS.ZRTP=false
+net.java.sip.communicator.impl.protocol.sip.acc1.ENCRYPTION_PROTOCOL_STATUS.SDES=true
+net.java.sip.communicator.impl.protocol.sip.acc1.ENCRYPTION_PROTOCOL_STATUS.DTLS-SRTP=false
+net.java.sip.communicator.impl.protocol.sip.acc1.SDES_CIPHER_SUITES=AES_CM_128_HMAC_SHA1_80,AES_CM_128_HMAC_SHA1_32
+{{ end }}
+net.java.sip.communicator.impl.protocol.sip.acc1.ACCOUNT_UID=SIP\:{{ .Env.JIGASI_SIP_URI }}
+net.java.sip.communicator.impl.protocol.sip.acc1.PASSWORD={{ .Env.JIGASI_SIP_PASSWORD | b64enc }}
+net.java.sip.communicator.impl.protocol.sip.acc1.PROTOCOL_NAME=SIP
+net.java.sip.communicator.impl.protocol.sip.acc1.SERVER_ADDRESS={{ .Env.JIGASI_SIP_SERVER }}
+net.java.sip.communicator.impl.protocol.sip.acc1.USER_ID={{ .Env.JIGASI_SIP_URI }}
+net.java.sip.communicator.impl.protocol.sip.acc1.KEEP_ALIVE_INTERVAL=25
+net.java.sip.communicator.impl.protocol.sip.acc1.KEEP_ALIVE_METHOD={{ .Env.JIGASI_SIP_KEEP_ALIVE_METHOD | default "OPTIONS" }}
+net.java.sip.communicator.impl.protocol.sip.acc1.VOICEMAIL_ENABLED=false
+net.java.sip.communicator.impl.protocol.sip.acc1.JITSI_MEET_ROOM_HEADER_NAME=X-Room-Name
+net.java.sip.communicator.impl.protocol.sip.acc1.JITSI_MEET_DOMAIN_BASE_HEADER_NAME=X-Domain-Base
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.AMR-WB/16000=750
+# Temporarily disable G722, see: https://github.com/jitsi/docker-jitsi-meet/issues/1357
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.G722/8000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.GSM/8000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.H263-1998/90000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.H264/90000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.PCMA/8000=600
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.PCMU/8000=650
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.SILK/12000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.SILK/16000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.SILK/24000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.SILK/8000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.VP8/90000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.iLBC/8000=10
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.opus/48000=1000
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.red/90000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.speex/16000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.speex/32000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.speex/8000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.telephone-event/8000=1
+net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.ulpfec/90000=0
+net.java.sip.communicator.impl.protocol.sip.acc1.OVERRIDE_ENCODINGS=true
+net.java.sip.communicator.impl.protocol.sip.acc1.DOMAIN_BASE={{ $XMPP_DOMAIN }}
+
+{{ if .Env.ENABLE_AUTH | default "0" | toBool }}
+{{ if .Env.ENABLE_GUESTS | default "0" | toBool }}
+org.jitsi.jigasi.xmpp.acc.USER_ID={{ $JIGASI_XMPP_USER }}@{{ $XMPP_GUEST_DOMAIN }}
+org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=true
+{{ else }}
+org.jitsi.jigasi.xmpp.acc.USER_ID={{ $JIGASI_XMPP_USER }}@{{ $XMPP_AUTH_DOMAIN }}
+org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false
+{{ end }}
+org.jitsi.jigasi.xmpp.acc.PASS={{ .Env.JIGASI_XMPP_PASSWORD }}
+org.jitsi.jigasi.xmpp.acc.ALLOW_NON_SECURE=true
+{{ end }}
+
+# forces sending presence on sip call hangup
+net.java.sip.communicator.impl.protocol.jabber.FORCE_PRESENCE_ON_LEAVE=true
+
+{{ if $USE_TRANSLATOR_IN_CONFERENCE }}
+org.jitsi.jigasi.xmpp.acc.USE_TRANSLATOR_IN_CONFERENCE=true
+net.java.sip.communicator.impl.protocol.sip.acc1.USE_TRANSLATOR_IN_CONFERENCE=true
+# Should be enabled when using translator mode
+net.java.sip.communicator.impl.neomedia.audioSystem.audiosilence.captureDevice_list=["AudioSilenceCaptureDevice:noTransferData"]
+{{ end }}

+ 32 - 0
jigasi/rootfs/defaults/transcriber-sip-communicator.properties

@@ -0,0 +1,32 @@
+{{ $JIGASI_TRANSCRIBER_USER := .Env.JIGASI_TRANSCRIBER_USER | default "transcriber" -}}
+{{ $JIGASI_TRANSCRIBER_FILTER_SILENCE := .Env.JIGASI_TRANSCRIBER_FILTER_SILENCE | default "0" | toBool -}}
+{{ $XMPP_RECORDER_DOMAIN := .Env.XMPP_RECORDER_DOMAIN | default "recorder.meet.jitsi" -}}
+
+org.jitsi.jigasi.ENABLE_SIP=false
+org.jitsi.jigasi.xmpp.acc.USER_ID={{ $JIGASI_TRANSCRIBER_USER }}@{{ $XMPP_RECORDER_DOMAIN }}
+org.jitsi.jigasi.xmpp.acc.PASS={{ .Env.JIGASI_TRANSCRIBER_PASSWORD }}
+org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false
+org.jitsi.jigasi.xmpp.acc.ALLOW_NON_SECURE=true
+
+# Transcription config
+org.jitsi.jigasi.ENABLE_TRANSCRIPTION=true
+org.jitsi.jigasi.transcription.ENABLE_TRANSLATION=true
+org.jitsi.jigasi.transcription.DIRECTORY=/tmp/transcripts
+org.jitsi.jigasi.transcription.BASE_URL={{ .Env.PUBLIC_URL }}/transcripts
+org.jitsi.jigasi.transcription.jetty.port=-1
+org.jitsi.jigasi.transcription.ADVERTISE_URL={{ .Env.JIGASI_TRANSCRIBER_ADVERTISE_URL | default "false"}}
+org.jitsi.jigasi.transcription.SAVE_JSON=false
+org.jitsi.jigasi.transcription.SEND_JSON=true
+org.jitsi.jigasi.transcription.SAVE_TXT=true
+org.jitsi.jigasi.transcription.SEND_TXT={{ .Env.JIGASI_TRANSCRIBER_SEND_TXT | default "false"}}
+org.jitsi.jigasi.transcription.RECORD_AUDIO={{ .Env.JIGASI_TRANSCRIBER_RECORD_AUDIO | default "false"}}
+org.jitsi.jigasi.transcription.RECORD_AUDIO_FORMAT=wav
+{{ if .Env.JIGASI_TRANSCRIBER_CUSTOM_SERVICE -}}
+org.jitsi.jigasi.transcription.customService={{ .Env.JIGASI_TRANSCRIBER_CUSTOM_SERVICE }}
+{{ end -}}
+{{ if $JIGASI_TRANSCRIBER_FILTER_SILENCE -}}
+org.jitsi.jigasi.transcription.FILTER_SILENCE = true
+{{ end -}}
+{{ if .Env.JIGASI_TRANSCRIBER_REMOTE_CONFIG_URL -}}
+org.jitsi.jigasi.transcription.remoteTranscriptionConfigUrl={{ .Env.JIGASI_TRANSCRIBER_REMOTE_CONFIG_URL }}
+{{ end -}}

+ 67 - 0
jigasi/rootfs/defaults/xmpp-sip-communicator.properties

@@ -0,0 +1,67 @@
+{{ $JIGASI_BREWERY_MUC := .Env.JIGASI_BREWERY_MUC | default "jigasibrewery" -}}
+{{ $JIGASI_XMPP_USER := .Env.JIGASI_XMPP_USER | default "jigasi" -}}
+{{ $XMPP_AUTH_DOMAIN := .Env.XMPP_AUTH_DOMAIN | default "auth.meet.jitsi" -}}
+{{ $XMPP_DOMAIN := .Env.XMPP_DOMAIN | default "meet.jitsi" -}}
+{{ $XMPP_INTERNAL_MUC_DOMAIN := .Env.XMPP_INTERNAL_MUC_DOMAIN | default "internal-muc.meet.jitsi" -}}
+{{ $XMPP_PORT := .Env.XMPP_PORT | default "5222" -}}
+{{ $XMPP_SERVER := .Env.XMPP_SERVER | default "xmpp.meet.jitsi" -}}
+{{ $XMPP_SERVERS := splitList "," $XMPP_SERVER -}}
+{{/* assign env from context, preserve during range when . is re-assigned */}}
+{{ $ENV := .Env -}}
+
+# XMPP account used for control
+{{ range $index, $element := $XMPP_SERVERS -}}
+{{ $SERVER := splitn ":" 2 $element }}
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}=acc{{ $index }}
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.ACCOUNT_UID=Jabber:{{ $JIGASI_XMPP_USER }}@{{ $XMPP_AUTH_DOMAIN }}
+net.java.sip.communicator.plugin.reconnectplugin.ATLEAST_ONE_SUCCESSFUL_CONNECTION.Jabber\:{{ $JIGASI_XMPP_USER }}@{{ $XMPP_AUTH_DOMAIN }}=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.USER_ID={{ $JIGASI_XMPP_USER }}@{{ $XMPP_AUTH_DOMAIN }}
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_SERVER_OVERRIDDEN=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.SERVER_ADDRESS={{ $SERVER._0 }}
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.SERVER_PORT={{ $SERVER._1 | default $XMPP_PORT }}
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.ALLOW_NON_SECURE=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.PASSWORD={{ $ENV.JIGASI_XMPP_PASSWORD | b64enc }}
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.AUTO_GENERATE_RESOURCE=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.RESOURCE_PRIORITY=30
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.KEEP_ALIVE_METHOD=XEP-0199
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.KEEP_ALIVE_INTERVAL=20
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.CALLING_DISABLED=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.JINGLE_NODES_ENABLED=false
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_CARBON_DISABLED=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.DEFAULT_ENCRYPTION=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_USE_ICE=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_ACCOUNT_DISABLED=false
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_PREFERRED_PROTOCOL=false
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.AUTO_DISCOVER_JINGLE_NODES=false
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.PROTOCOL=Jabber
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_USE_UPNP=false
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IM_DISABLED=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.SERVER_STORED_INFO_DISABLED=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.IS_FILE_TRANSFER_DISABLED=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.USE_DEFAULT_STUN_SERVER=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.ENCRYPTION_PROTOCOL.DTLS-SRTP=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.ENCRYPTION_PROTOCOL_STATUS.DTLS-SRTP=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.VIDEO_CALLING_DISABLED=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.OVERRIDE_ENCODINGS=true
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.G722/8000=705
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.GSM/8000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.H263-1998/90000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.H264/90000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.PCMA/8000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.PCMU/8000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.SILK/12000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.SILK/16000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.SILK/24000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.SILK/8000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.VP8/90000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.iLBC/8000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.opus/48000=750
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.speex/16000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.speex/32000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.speex/8000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.Encodings.telephone-event/8000=0
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.BREWERY={{ $JIGASI_BREWERY_MUC }}@{{ $XMPP_INTERNAL_MUC_DOMAIN }}
+net.java.sip.communicator.impl.protocol.jabber.acc{{ $index }}.DOMAIN_BASE={{ $XMPP_DOMAIN }}
+{{ end -}}
+
+org.jitsi.jigasi.ALLOWED_JID={{ $JIGASI_BREWERY_MUC }}@{{ $XMPP_INTERNAL_MUC_DOMAIN }}

+ 41 - 30
jigasi/rootfs/etc/cont-init.d/10-config

@@ -13,6 +13,14 @@ if [[ "$JIGASI_XMPP_PASSWORD" == "$OLD_JIGASI_XMPP_PASSWORD" ]]; then
     exit 1
 fi
 
+[ -z "$JIGASI_MODE" ] && JIGASI_MODE="sip"
+JIGASI_MODE="$(echo $JIGASI_MODE | tr '[:upper:]' '[:lower:]')"
+
+if [[ "$JIGASI_MODE" == "transcriber" ]]; then
+    # set random jigasi nickname for the instance if is not set
+    [ -z "${JIGASI_INSTANCE_ID}" ] && export JIGASI_INSTANCE_ID="transcriber-$(date +%N)"
+fi
+
 # set random jigasi nickname for the instance if is not set
 [ -z "${JIGASI_INSTANCE_ID}" ] && export JIGASI_INSTANCE_ID="jigasi-$(date +%N)"
 
@@ -47,39 +55,42 @@ fi
 
 tpl /defaults/logging.properties > /config/logging.properties
 tpl /defaults/sip-communicator.properties > /config/sip-communicator.properties
+tpl /defaults/xmpp-sip-communicator.properties >> /config/sip-communicator.properties
 
-if [[ -f /config/custom-sip-communicator.properties ]]; then
-    cat /config/custom-sip-communicator.properties >> /config/sip-communicator.properties
-fi
+if [[ "$JIGASI_MODE" == "sip" ]]; then
+    tpl /defaults/sipserver-sip-communicator.properties >> /config/sip-communicator.properties
+elif [[ "$JIGASI_MODE" == "transcriber" ]]; then
+    tpl /defaults/transcriber-sip-communicator.properties >> /config/sip-communicator.properties
+    mkdir -pm777 /tmp/transcripts
+    chown jigasi:jitsi /tmp/transcripts
 
-mkdir -pm777 /tmp/transcripts
-chown jigasi:jitsi /tmp/transcripts
-
-# Create Google Cloud Credentials
-if [[ $ENABLE_TRANSCRIPTIONS -eq 1 || $ENABLE_TRANSCRIPTIONS == "true" ]]; then
+    # Create Google Cloud Credentials
     if [[ -z $GC_PROJECT_ID || -z $GC_PRIVATE_KEY_ID || -z $GC_PRIVATE_KEY || -z $GC_CLIENT_EMAIL || -z $GC_CLIENT_ID || -z $GC_CLIENT_CERT_URL ]]; then
-        echo 'Transcriptions: One or more environment variables are undefined'
-        exit 1
+        echo 'Transcriptions: One or more gcloud environment variables are undefined, skipping gcloud credentials file /config/key.json'
+    else
+        jq -n \
+            --arg GC_PROJECT_ID "$GC_PROJECT_ID" \
+            --arg GC_PRIVATE_KEY_ID "$GC_PRIVATE_KEY_ID" \
+            --arg GC_PRIVATE_KEY "$GC_PRIVATE_KEY" \
+            --arg GC_CLIENT_EMAIL "$GC_CLIENT_EMAIL" \
+            --arg GC_CLIENT_ID "$GC_CLIENT_ID" \
+            --arg GC_CLIENT_CERT_URL "$GC_CLIENT_CERT_URL" \
+            '{
+                type: "service_account",
+                project_id: $GC_PROJECT_ID,
+                private_key_id: $GC_PRIVATE_KEY_ID,
+                private_key: $GC_PRIVATE_KEY,
+                client_email: $GC_CLIENT_EMAIL,
+                client_id: $GC_CLIENT_ID,
+                auth_uri: "https://accounts.google.com/o/oauth2/auth",
+                token_uri: "https://oauth2.googleapis.com/token",
+                auth_provider_x509_cert_url: "https://www.googleapis.com/oauth2/v1/certs",
+                client_x509_cert_url: $GC_CLIENT_CERT_URL
+            }' \
+            > /config/key.json
     fi
+fi
 
-    jq -n \
-        --arg GC_PROJECT_ID "$GC_PROJECT_ID" \
-        --arg GC_PRIVATE_KEY_ID "$GC_PRIVATE_KEY_ID" \
-        --arg GC_PRIVATE_KEY "$GC_PRIVATE_KEY" \
-        --arg GC_CLIENT_EMAIL "$GC_CLIENT_EMAIL" \
-        --arg GC_CLIENT_ID "$GC_CLIENT_ID" \
-        --arg GC_CLIENT_CERT_URL "$GC_CLIENT_CERT_URL" \
-        '{
-            type: "service_account",
-            project_id: $GC_PROJECT_ID,
-            private_key_id: $GC_PRIVATE_KEY_ID,
-            private_key: $GC_PRIVATE_KEY,
-            client_email: $GC_CLIENT_EMAIL,
-            client_id: $GC_CLIENT_ID,
-            auth_uri: "https://accounts.google.com/o/oauth2/auth",
-            token_uri: "https://oauth2.googleapis.com/token",
-            auth_provider_x509_cert_url: "https://www.googleapis.com/oauth2/v1/certs",
-            client_x509_cert_url: $GC_CLIENT_CERT_URL
-        }' \
-        > /config/key.json
+if [[ -f /config/custom-sip-communicator.properties ]]; then
+    cat /config/custom-sip-communicator.properties >> /config/sip-communicator.properties
 fi

+ 61 - 0
transcriber.yml

@@ -0,0 +1,61 @@
+version: '3.5'
+
+services:
+    transcriber:
+        image: jitsi/jigasi:${JITSI_IMAGE_VERSION:-unstable}
+        restart: ${RESTART_POLICY:-unless-stopped}
+        volumes:
+            - ${CONFIG}/transcriber:/config:Z
+            - ${CONFIG}/transcripts:/tmp/transcripts:Z
+        environment:
+            - AUTOSCALER_SIDECAR_KEY_FILE
+            - AUTOSCALER_SIDECAR_KEY_ID
+            - AUTOSCALER_SIDECAR_GROUP_NAME
+            - AUTOSCALER_SIDECAR_HOST_ID
+            - AUTOSCALER_SIDECAR_INSTANCE_ID
+            - AUTOSCALER_SIDECAR_PORT
+            - AUTOSCALER_SIDECAR_REGION
+            - AUTOSCALER_SIDECAR_SHUTDOWN_POLLING_INTERVAL
+            - AUTOSCALER_SIDECAR_STATS_POLLING_INTERVAL
+            - AUTOSCALER_URL
+            - BOSH_URL_PATTERN
+            - XMPP_AUTH_DOMAIN
+            - XMPP_GUEST_DOMAIN
+            - XMPP_MUC_DOMAIN
+            - XMPP_INTERNAL_MUC_DOMAIN
+            - XMPP_SERVER
+            - XMPP_PORT
+            - XMPP_RECORDER_DOMAIN
+            - XMPP_DOMAIN
+            - PUBLIC_URL
+            - JIGASI_CONFIGURATION
+            - JIGASI_JVB_TIMEOUT
+            - JIGASI_LOCAL_REGION
+            - JIGASI_LOG_FILE
+            - JIGASI_MODE=transcriber
+            - JIGASI_XMPP_USER
+            - JIGASI_XMPP_PASSWORD
+            - JIGASI_BREWERY_MUC
+            - JIGASI_TRANSCRIBER_ADVERTISE_URL
+            - JIGASI_TRANSCRIBER_CUSTOM_SERVICE
+            - JIGASI_TRANSCRIBER_FILTER_SILENCE
+            - JIGASI_TRANSCRIBER_PASSWORD
+            - JIGASI_TRANSCRIBER_RECORD_AUDIO
+            - JIGASI_TRANSCRIBER_REMOTE_CONFIG_URL
+            - JIGASI_TRANSCRIBER_SEND_TXT
+            - JIGASI_TRANSCRIBER_USER
+            - GC_PROJECT_ID
+            - GC_PRIVATE_KEY_ID
+            - GC_PRIVATE_KEY
+            - GC_CLIENT_EMAIL
+            - GC_CLIENT_ID
+            - GC_CLIENT_CERT_URL
+            - SHUTDOWN_REST_ENABLED
+            - SENTRY_DSN="${JIGASI_SENTRY_DSN:-0}"
+            - SENTRY_ENVIRONMENT
+            - SENTRY_RELEASE
+            - TZ
+        depends_on:
+            - prosody
+        networks:
+            meet.jitsi: