Quando o FreeSWITCH é utilizado em ambientes cloud com alta concorrência de chamadas, o suporte a múltiplos domínios ou locatários se torna essencial. O próprio FreeSWITCH oferece suporte nativo a essa funcionalidade.
Cada domínio pode operar de forma independente, permitindo que números de ramal idênticos não consigam se chamar entre si, além de posssuir linhas, IVRs e roteamentos distintos.
A configuração é realizada conforme descrito abaixo:
1. conf/vars.xml
<X-PRE-PROCESS cmd="set" data="domain=$${local_ip_v4}" />
<X-PRE-PROCESS cmd="set" data="domain_name=$${domain}" />
Neste arquivo são definidos os parâmetros padrão do domínio. Após ativar o modo multi-domínio, esse valor deixa de ser relevante.
2. conf/sip_profile/internal.xml
<!-- todos os registros de entrada usarão este domínio para buscar usuários -->
<param name="force-register-domain" value="$${domain}"/>
<!-- força o uso deste domínio nas assinaturas -->
<param name="force-subscription-domain" value="$${domain}"/>
<!-- todos os registros de entrada serão armazenados no banco com este domínio -->
<param name="force-register-db-domain" value="$${domain}"/>
Os três parâmetros acima devem ser comentados e o perfil reiniciado.
<É possível criar múltiplos perfis SIP>
3. conf/directory/default.xml
<include>
<!-- o domínio ou IP (lado direito do @ na URI) -->
<domain name="$${domain}">
O elemento <domain> especifica qual domínio esta configuração de diretório se aplica (o valor padrão $${domain} vem da variável definida em vars.xml).
Pode-se criar várias definições de domínios (copiando e alterando o nome do domínio), criando assim múltiplos domínios.
Para cada domínio, recomenda-se ter um diretório de usuários separado, especialmente com suas respectivas configurações de usuário. Para isso, atualize também o carregamento dos usuários:
<users>
<X-PRE-PROCESS cmd="include" data="default/*.xml"/>
</users>
<Adicionalmente, para garantir que cada domínio utilize seu próprio dialplan, deve-se ajustar o campo user_context nos arquivos de usuário>
4. conf/directory/default/<user>.xml
Para que cada domínio utilize seu próprio dialplan, o campo user_context no arquivo do usuário precisa ser modificado:
<variables>
<variable name="user_context" value="default"/>
<É necessário então criar as rotas correspondentes, caso contrário as chamadas falharão>
5. conf/dialplan/default.xml
<include>
<context name="default">
Copie esse dialplan e altere o atributo name do contexto para corresponder ao valor configurado no campo user_context dos usuários.
6. Recarregar XML, registrar e testar chamadas
7. Após habilitar o modo domínio, não é mais possível utilizar formas abreviadas como user/1000, sendo obrigatório usar o formato completo: user/1000@${domain_name}
Ao utilizar aplicativos como conferências ou filas (fifo), também é necessário usar o formato completo. Ou seja, com o modo multi-domínio ativo, sempre que se referir a um usuário, deve-se incluir o nome do domínio.
8. Também é possível distribuir diferentes domínios em perfis Sofia distintos, permitindo o uso de portas diferentes por perfil.
Ao trabalhar com portas, preste atenção especial às portas WebSocket:
Se duas instâncias estiverem tentando usar a mesma porta WebSocket, o perfil pode falhar ao iniciar — mesmo que a porta pareça livre.
<!-- para suporte a SIP sobre WebSocket -->
<param name="ws-binding" value=":5066"/>
<!-- para suporte a SIP sobre WebSocket seguro -->
<!-- É necessário o certificado wss.pem no diretório $${certs_dir} -->
<param name="wss-binding" value=":7443"/>