Pular para o conteúdo principal

FreeSWITCH

O FreeSWITCH é usado como PBX/gateway SIP para receber chamadas de telefonia (por exemplo, via tronco Twilio) e encaminhá-las para o Janus.

dica

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ávelDescrição
FS_PUBLIC_IPIP público do servidor. Se omitido, é detectado automaticamente.
FS_DOMAINDomínio SIP. Se omitido, usa o próprio IP público.
FS_REPO_BRANCHBranch do repositório FreeSWITCH (padrão: freeswitch-1.10).
ENABLE_UFW_RULESSe 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.