FreeSWITCH
O FreeSWITCH é usado como PBX/gateway SIP para receber chamadas de telefonia (por exemplo, via tronco Twilio) e encaminhá-las para o Janus.
Script pronto
O repositório do Rouxinol já traz um script de instalação testado para Ubuntu LTS: scripts/install_freeswitch_do.sh. Ele cobre todos os passos desta página automaticamente. Use esta página para entender o que o script faz, ou para instalar manualmente em outra distribuição.
Usando o script pronto
sudo bash scripts/install_freeswitch_do.sh
Variáveis de ambiente aceitas pelo script:
| Variável | Descrição |
|---|---|
FS_PUBLIC_IP | IP público do servidor. Se omitido, é detectado automaticamente. |
FS_DOMAIN | Domínio SIP. Se omitido, usa o próprio IP público. |
FS_REPO_BRANCH | Branch do repositório FreeSWITCH (padrão: freeswitch-1.10). |
ENABLE_UFW_RULES | Se 1 (padrão), abre as portas SIP/RTP no UFW quando ele estiver ativo. |
Exemplo definindo domínio e IP manualmente:
sudo FS_PUBLIC_IP=203.0.113.10 FS_DOMAIN=sip.minhaempresa.com.br bash scripts/install_freeswitch_do.sh
O que o script faz (instalação manual)
Se preferir instalar manualmente ou entender cada passo:
1. Repositório oficial (SignalWire)
sudo apt update
sudo apt install -y gnupg2 ca-certificates lsb-release wget curl apt-transport-https
sudo install -d -m 0755 /usr/share/keyrings
sudo wget -qO /usr/share/keyrings/signalwire-freeswitch-repo.gpg \
https://freeswitch.signalwire.com/repo/deb/debian-release/signalwire-freeswitch-repo.gpg
echo "deb [signed-by=/usr/share/keyrings/signalwire-freeswitch-repo.gpg] https://freeswitch.signalwire.com/repo/deb/freeswitch-1.10/ $(lsb_release -sc) main" \
| sudo tee /etc/apt/sources.list.d/freeswitch.list
sudo apt update
2. Instalação dos pacotes
sudo apt install -y --no-install-recommends \
freeswitch-meta-vanilla \
freeswitch-mod-sofia \
freeswitch-mod-conference \
freeswitch-mod-commands \
freeswitch-mod-dptools \
freeswitch-lang-en
3. Configurando o IP público e domínio
Em /etc/freeswitch/vars.xml, ajuste:
<X-PRE-PROCESS cmd="set" data="external_sip_ip=SEU_IP_PUBLICO"/>
<X-PRE-PROCESS cmd="set" data="external_rtp_ip=SEU_IP_PUBLICO"/>
<X-PRE-PROCESS cmd="set" data="domain=SEU_DOMINIO_OU_IP"/>
4. Dialplan de teste (entrada pública)
Crie /etc/freeswitch/dialplan/public/00_twilio_inbound.xml:
<include>
<extension name="twilio_inbound_test">
<condition field="destination_number" expression="^inbound$">
<action application="set" data="call_direction=inbound"/>
<action application="answer"/>
<action application="playback" data="ivr/ivr-welcome_to_freeswitch.wav"/>
<action application="echo"/>
</condition>
</extension>
</include>
5. Firewall
sudo ufw allow 5060/tcp
sudo ufw allow 5060/udp
sudo ufw allow 5080/tcp
sudo ufw allow 5080/udp
sudo ufw allow 16384:32768/udp
6. Subindo o serviço
sudo systemctl daemon-reload
sudo systemctl enable freeswitch
sudo systemctl restart freeswitch
sudo systemctl status freeswitch
Alternativa em Docker
O repositório também traz uma imagem pronta em docker/freeswitch, útil para testes locais sem instalar o FreeSWITCH diretamente no host.
Integrando com o Rouxinol
Depois de subir o FreeSWITCH, aponte o .env do Rouxinol para a URI SIP de entrada do Twilio:
TWILIO_INBOUND_SIP_URI="sip:inbound@SEU_DOMINIO_OU_IP:5080;transport=udp"
E confirme que o número configurado na Twilio chama o webhook POST /api/twilio/voice/inbound do Rouxinol — veja Webhooks e endpoints internos.
Próximo passo
Continue para Nginx, responsável por servir a aplicação e emitir o certificado TLS.