Pular para o conteúdo principal

Guia de Configuração

📖 Voltar à Documentação Principal

Este documento fornece uma referência abrangente de configuração para o Servidor de Aplicação TAS.

Documentação Relacionada

Configuração Principal

Interfaces de Integração

  • 👥 Interface Sh - Recuperação de dados de assinantes do HSS/Repositorio
  • 💳 Cobrança Online (Ro) - Integração OCS e controle de crédito
  • 📡 SS7 MAP - Consultas HLR para roaming e encaminhamento de chamadas

Processamento de Chamadas

Serviços de Valor Agregado

Testes & Conformidade


Configuração

O Servidor de Aplicação precisa:

  • Conectar-se a SIP Trunks / SBCs para chamadas de/para fora da rede
  • Conectar-se ao DRA ou HSS para obter o Sh
  • Opcionalmente conectar-se ao DRA ou OCS para cobrança online Ro
  • Configuração do Dialplan
  • Configuração em torno das regras de discagem / tradução de números
  • Configuração de correio de voz
  • Prompts
  • Testes
  • Métricas (Prometheus)

Configuração do Socket de Evento

O Socket de Evento é usado para controle de chamadas, monitoramento de chamadas ativas e interação com o mecanismo de telefonia. Esta conexão permite que o TAS controle o roteamento de chamadas, recupere variáveis de canal e gerencie sessões ativas.

Localização da Configuração: config/runtime.exs

config :tas,
fs_event_socket: %{
host: "127.0.0.1",
port: 8021,
secret: "YourSecretPassword"
}

Parâmetros de Configuração:

  • host (string, obrigatório): Nome do host ou endereço IP do servidor Socket de Evento

    • Padrão: "127.0.0.1" (localhost)
    • Use localhost se o mecanismo de telefonia estiver em execução no mesmo servidor que o TAS
    • Use IP remoto para implantações distribuídas
    • Exemplo: "10.8.82.60" para conexão remota
  • port (inteiro, obrigatório): Porta TCP para conexões do Socket de Evento

    • Padrão: 8021
    • A porta padrão do Socket de Evento é 8021
    • Deve corresponder à configuração do Socket de Evento em seu mecanismo de telefonia
    • Exemplo: 8021
  • secret (string, obrigatório): Senha de autenticação para o Socket de Evento

    • Deve corresponder à senha configurada em seu mecanismo de telefonia
    • Usada para autenticar conexões ESL
    • Nota de Segurança: Use uma senha forte e aleatória e mantenha-a segura
    • Exemplo: "cd463RZ8qMk9AHMMDGT3V"

Casos de Uso:

  • Controle e roteamento de chamadas em tempo real
  • Recuperação de informações de chamadas ativas para a visualização /calls no Painel de Controle
  • Execução programática de aplicações de dialplan
  • Monitoramento de mudanças de estado de chamadas e eventos
  • Gerenciamento de chamadas em conferência

Comportamento da Conexão:

  • O TAS estabelece conexões persistentes com o Socket de Evento
  • Reconecta automaticamente em caso de falha de conexão
  • Usado tanto para modos de entrada (recebendo eventos) quanto de saída (controlando chamadas)
  • Timeouts de conexão e lógica de retry estão embutidos

Considerações de Segurança:

  • Sempre use uma senha forte e única para o parâmetro secret
  • Se usar conexões remotas, certifique-se de que as regras de firewall permitam apenas servidores TAS confiáveis
  • Considere usar conexões apenas localhost quando o TAS e o mecanismo de telefonia estiverem co-localizados
  • Não exponha a porta do Socket de Evento a redes públicas

Solução de Problemas:

  • Conexão Recusada: Verifique se o mecanismo de telefonia está em execução e se o Socket de Evento está habilitado
  • Autenticação Falhou: Verifique se secret corresponde à configuração do mecanismo de telefonia
  • Erros de Timeout: Verifique a conectividade da rede e as regras de firewall
  • Não é possível controlar chamadas: Certifique-se de que o TAS se conectou com sucesso (verifique os logs)

Configuração do Painel de Controle

O Painel de Controle fornece uma interface baseada na web para monitorar e gerenciar o sistema TAS. Isso inclui visualizar assinantes, CDRs, chamadas ativas, pares Diameter, gateways e configuração do sistema.

Localização da Configuração: config/runtime.exs

config :control_panel,
page_order: ["/application", "/configuration"]

config :control_panel, ControlPanelWeb.Endpoint,
url: [host: "0.0.0.0", path: "/"],
https: [
port: 443,
keyfile: "priv/cert/server.key",
certfile: "priv/cert/server.crt"
]

Parâmetros de Configuração:

Configuração da Ordem das Páginas

  • page_order (lista de strings): Controla a ordem de exibição das páginas de configuração no Painel de Controle
    • Especifica quais páginas aparecem na navegação e sua ordem
    • Exemplo: ["/application", "/configuration"]
    • Padrão: Se não definido, as páginas aparecem na ordem alfabética padrão

Configuração do Endpoint Web

  • url (mapa): Configuração da URL pública para o Painel de Controle

    • host: Nome do host para gerar URLs (ex: "tas.example.com" ou "0.0.0.0")
    • path: Caminho base para todas as rotas do Painel de Controle (padrão: "/")
    • Usado para gerar URLs absolutas em redirecionamentos e links
  • https (mapa): Configuração HTTPS/TLS para acesso seguro

    • port (inteiro): Número da porta HTTPS (padrão é 443)
    • keyfile (string): Caminho para o arquivo de chave privada TLS (formato PEM)
    • certfile (string): Caminho para o arquivo de certificado TLS (formato PEM)
    • Ambos os arquivos devem ser legíveis pela aplicação TAS

Gerenciamento de Certificados:

O Painel de Controle requer certificados TLS válidos para acesso HTTPS:

  1. Certificados Autoassinados (Desenvolvimento/Teste):

    openssl req -x509 -newkey rsa:4096 -keyout priv/cert/server.key \
    -out priv/cert/server.crt -days 365 -nodes
  2. Certificados de Produção:

    • Use certificados de uma Autoridade Certificadora (CA) confiável
    • Provedores comuns: Let's Encrypt (grátis), CAs comerciais
    • Certifique-se de que os certificados incluam a cadeia completa para confiança do navegador
    • Mantenha as chaves privadas seguras com permissões de arquivo apropriadas (chmod 600)

Controle de Acesso:

O Painel de Controle fornece acesso a dados operacionais sensíveis:

  • Informações do Assinante: Detalhes de registro, histórico de chamadas, localizações
  • Registros de Detalhes de Chamadas: Registros completos de chamadas com dados MSISDN
  • Configuração do Sistema: Pares Diameter, gateways, roteamento
  • Chamadas Ativas: Monitoramento em tempo real de sessões em andamento

Medidas de Segurança Recomendadas:

  • Implante atrás de firewall ou VPN para ambientes de produção
  • Use certificados TLS fortes de CAs confiáveis
  • Implemente controles de acesso em nível de rede (whitelisting de IP)
  • Considere camadas adicionais de autenticação se expostas externamente
  • Audite regularmente os logs de acesso
  • Use HTTPS apenas - nunca sirva sobre HTTP simples

Padrões Comuns de Implantação:

  1. Acesso Somente Interno:

    url: [host: "10.8.82.60", path: "/"]  # Somente rede interna
  2. Acesso Externo com Domínio:

    url: [host: "tas.operator.com", path: "/"]
    https: [port: 443, ...]
  3. Atrás de Proxy Reverso:

    url: [host: "tas.internal", path: "/panel"]  # Nginx/Apache encaminha para isso

Solução de Problemas:

  • Erros de Certificado: Verifique se os caminhos para keyfile e certfile estão corretos e os arquivos são legíveis
  • Porta Já em Uso: Verifique se outro serviço está usando a porta 443 ou mude para outra porta
  • Não é possível acessar a UI: Verifique se as regras de firewall permitem acesso à porta HTTPS configurada
  • Falhas na Negociação SSL: Certifique-se de que o certificado e a chave correspondem e estão no formato PEM

Configuração da API

O TAS inclui uma API REST para acesso programático às funções do sistema, gerenciamento de assinantes e dados operacionais. A API suporta documentação OpenAPI/Swagger e é protegida com TLS.

Localização da Configuração: config/runtime.exs

config :api_ex,
api: %{
port: 8444,
listen_ip: "0.0.0.0",
product_name: "OmniTAS",
title: "API - OmniTAS",
hostname: "localhost",
enable_tls: true,
tls_cert_path: "priv/cert/server.crt",
tls_key_path: "priv/cert/server.key"
}

Parâmetros de Configuração:

  • port (inteiro, obrigatório): Porta TCP para o servidor API

    • Padrão: 8444
    • Escolha uma porta que não conflite com outros serviços
    • A porta HTTPS padrão é 443, mas portas personalizadas são comuns para APIs
    • Exemplo: 8444, 8443, 9443
  • listen_ip (string, obrigatório): Endereço IP para vincular o servidor API

    • "0.0.0.0": Ouvir em todas as interfaces de rede (acesso externo)
    • "127.0.0.1": Ouvir apenas no localhost (acesso interno apenas)
    • IP específico: Vincular a uma interface particular (ex: "10.8.82.60")
    • Segurança: Use "127.0.0.1" se a API for necessária apenas internamente
  • product_name (string): Identificador do produto para metadados da API

    • Usado nas respostas da API e na documentação
    • Exemplo: "OmniTAS", "MyOperator-IMS"
  • title (string): Título legível por humanos para a documentação da API

    • Exibido no cabeçalho da UI OpenAPI/Swagger
    • Exemplo: "API - OmniTAS", "API do Servidor de Aplicação IMS"
  • hostname (string): Nome do host para o servidor API na documentação

    • Usado na especificação OpenAPI para gerar URLs de exemplo
    • Deve corresponder à forma como os clientes acessam a API
    • Exemplos: "localhost", "api.operator.com", "10.8.82.60"
  • enable_tls (booleano): Habilitar ou desabilitar TLS/HTTPS para a API

    • true: Servir API sobre HTTPS (recomendado para produção)
    • false: Servir API sobre HTTP (apenas para teste/desenvolvimento)
    • Segurança: Sempre use true em ambientes de produção
  • tls_cert_path (string): Caminho para o arquivo de certificado TLS (formato PEM)

    • Necessário quando enable_tls: true
    • Deve ser legível pela aplicação TAS
    • Exemplo: "priv/cert/server.crt"
  • tls_key_path (string): Caminho para o arquivo de chave privada TLS (formato PEM)

    • Necessário quando enable_tls: true
    • Deve ser legível pela aplicação TAS
    • Segurança: Proteja com permissões de arquivo (chmod 600)
    • Exemplo: "priv/cert/server.key"

Recursos da API:

A API REST fornece acesso programático a:

  • Gerenciamento e provisionamento de assinantes
  • Consultas de Registros de Detalhes de Chamadas (CDR)
  • Status do sistema e verificações de saúde
  • Status de pares Diameter
  • Status e estatísticas de gateways
  • Monitoramento de chamadas ativas
  • Gerenciamento de configuração

Documentação OpenAPI/Swagger:

A API inclui documentação OpenAPI (Swagger) embutida:

  • Acesse a UI Swagger em: https://hostname:port/api/swaggerui
  • Especificação JSON OpenAPI em: https://hostname:port/api/openapi
  • Teste interativo da API diretamente do navegador
  • Documentação completa de endpoints com esquemas de solicitação/resposta

Considerações de Segurança:

  • Autenticação: Implemente autenticação da API com base em seus requisitos de segurança
  • Acesso à Rede: Use regras de firewall para restringir o acesso à API a clientes autorizados
  • TLS Necessário: Sempre habilite TLS em produção (enable_tls: true)
  • Validação de Certificado: Use certificados confiáveis para APIs de produção
  • Limitação de Taxa: Considere implementar limitação de taxa para APIs voltadas ao público
  • Logs de Acesso: Monitore os logs de acesso da API para atividades suspeitas

Exemplo de Uso:

# Consultar API com curl (substitua pelo endpoint real)
curl -k https://localhost:8444/api/health

# Acessar documentação Swagger
https://localhost:8444/api/swaggerui

Cenários Comuns de Implantação:

  1. API Somente Interna:

    listen_ip: "127.0.0.1"  # Acessível apenas do localhost
    enable_tls: false # HTTP para teste interno
  2. API de Produção com TLS:

    listen_ip: "0.0.0.0"    # Acessível pela rede
    enable_tls: true # HTTPS necessário
    hostname: "api.operator.com"
  3. Desenvolvimento/Teste:

    listen_ip: "0.0.0.0"
    enable_tls: false # HTTP para facilitar o teste
    port: 8080 # Porta não privilegiada

Solução de Problemas:

  • Falha ao Vincular Porta: Verifique se a porta não está em uso por outro serviço ou execute como root para portas < 1024
  • Erros de TLS: Verifique se os caminhos do certificado e da chave estão corretos e os arquivos são legíveis
  • Não é possível Conectar: Verifique se o firewall permite acesso à porta configurada
  • Desvio de Certificado: Certifique-se de que hostname corresponde ao Nome Comum (CN) ou SAN do certificado
  • API Retorna 404: Verifique se a aplicação da API foi iniciada com sucesso nos logs

Configuração do SIP Trunk

O Ansible é responsável por criar a configuração XML para cada gateway de saída, visível na aba Gateways, que são usados para chamadas de saída.

Os endereços CSCF e os endereços de Gateway devem ser incluídos na configuração de runtime, para que saibamos quais IPs permitir chamadas, fazemos isso em allowed_sbc_source_ips para Gateways / SBCs (fontes que enviarão tráfego MT para a rede) e allowed_cscf_ips para CSCFs (fontes de onde o tráfego MO se originará).

Nota - Se você irá roteirizar chamadas do seu TAS para ele mesmo (ou seja, uma chamada MO para um assinante on-net roteia de volta para o dialplan MT), então o IP do seu TAS também deve estar na lista de IPs de origem permitidos.

config :tas,
allowed_sbc_source_ips: ["10.5.198.200", "103.26.174.36"],
allowed_cscf_ips: ["10.8.3.34"],

Na interface da Web, podemos ver o estado de cada gateway, e:

  • Status de Registro SIP (se o registro estiver habilitado)
  • Realm SIP
  • Endereço Proxy SIP (se usado)
  • Nome de Usuário
  • Tempo de Ping (Tempo médio de resposta SIP OPTIONs (se SIP OPTIONs habilitado))
  • Tempo de Atividade (Segundos desde que o perfil foi reiniciado ou ativado)
  • Chamadas em / Chamadas Saindo / Chamadas Falhadas em / Chamadas Falhadas Saindo
  • Último tempo de ping SIP OPTIONs (Epoch)
  • Frequência de ping SIP OPTIONs
  • Mais informações no botão detalhe

Visão dos Gateways

Referência de Configuração do Gateway

Os gateways são configurados em formato XML. Cada gateway representa uma conexão SIP trunk para um SBC externo, operadora ou gateway PSTN.

Exemplo Básico de Gateway:

<include>
<gateway name="carrier_trunk">
<param name="proxy" value="203.0.113.50;transport=tcp"/>
<param name="register" value="true"/>
<param name="caller-id-in-from" value="true"/>
<param name="username" value="trunk_user"/>
<param name="password" value="secure_password"/>
<param name="register-transport" value="tcp"/>
<param name="retry-seconds" value="30"/>
<param name="ping" value="25"/>
</gateway>
</include>

Gateway sem Registro:

<include>
<gateway name="sbc_static">
<param name="proxy" value="198.51.100.10"/>
<param name="register" value="false"/>
<param name="caller-id-in-from" value="true"/>
</gateway>
</include>

Parâmetros do Gateway

Parâmetros Obrigatórios

name (atributo do gateway)

  • O identificador único para este gateway
  • Usado no dialplan para referenciar o gateway: sofia/gateway/name/destination
  • Exemplo: <gateway name="my_trunk">

proxy

  • Endereço IP ou nome do host do proxy/gateway SIP
  • Pode incluir porta e protocolo de transporte
  • Exemplos:
    • value="203.0.113.50" (porta padrão 5060, UDP)
    • value="203.0.113.50:5061" (porta personalizada)
    • value="203.0.113.50;transport=tcp" (transporte TCP)
    • value="203.0.113.50:5061;transport=tls" (TLS na porta 5061)

register

  • Se deve enviar SIP REGISTER para o gateway
  • Valores: true | false
  • Defina como true se o trunk exigir registro
  • Defina como false para trunks baseados em IP estático
Parâmetros de Autenticação

username

  • Nome de usuário de autenticação SIP
  • Usado no REGISTER e para autenticação digest
  • Obrigatório se register="true"
  • Exemplo: value="trunk_account_123"

password

  • Senha de autenticação SIP
  • Usada para desafios de autenticação digest
  • Obrigatório se register="true"
  • Exemplo: value="MySecureP@ssw0rd"

realm

  • Realm SIP para autenticação
  • Opcional - geralmente detectado automaticamente a partir do desafio
  • Exemplo: value="sip.carrier.com"

auth-username

  • Nome de usuário alternativo para autenticação (se diferente de username)
  • Raramente necessário - apenas se a operadora exigir um usuário diferente no auth vs cabeçalho From
  • Exemplo: value="auth_user_456"
Parâmetros de Registro

register-transport

  • Protocolo de transporte para mensagens REGISTER
  • Valores: udp | tcp | tls
  • Deve corresponder ao transporte especificado no parâmetro proxy
  • Exemplo: value="tcp"

register-proxy

  • Endereço proxy alternativo para REGISTER (se diferente do roteamento de chamadas)
  • Útil quando o servidor de registro difere do servidor de roteamento de chamadas
  • Exemplo: value="register.carrier.com:5060"

retry-seconds

  • Segundos a esperar antes de tentar novamente o registro falhado
  • Padrão: 30
  • Intervalo: 5 a 3600
  • Exemplo: value="30"

expire-seconds

  • Tempo de expiração do registro em segundos
  • Padrão: 3600 (1 hora)
  • O gateway irá re-registrar antes da expiração
  • Exemplo: value="1800" (30 minutos)

caller-id-in-from

  • Incluir ID do chamador no cabeçalho From SIP
  • Valores: true | false
  • true: O cabeçalho From inclui o número real do chamador (exigido pela maioria das operadoras)
  • false: O cabeçalho From usa o nome de usuário do gateway
  • Recomendação: Defina como true para a maioria das implantações
  • Exemplo: value="true"
Parâmetros de Monitoramento

ping

  • Enviar ping SIP OPTIONS a cada N segundos
  • Monitora a disponibilidade do gateway e mede a latência
  • Desativado se não especificado ou definido como 0
  • Valores típicos: 15 a 60 segundos
  • Visível na UI de Status do Gateway como "Tempo de Ping"
  • Exemplo: value="25"

ping-max

  • Tempo máximo (em segundos) para tentar pings antes de marcar o gateway como inativo
  • Padrão: Calculado a partir do intervalo de ping
  • Exemplo: value="3"
Parâmetros de Roteamento de Chamadas

extension

  • Número de destino fixo para sempre discar neste gateway
  • Raramente usado - geralmente o destino vem do dialplan
  • Exemplo: value="+12125551234"

extension-in-contact

  • Incluir extensão no cabeçalho Contact
  • Valores: true | false
  • Padrão: false
  • Exemplo: value="false"

contact-params

  • Parâmetros adicionais para anexar ao cabeçalho Contact
  • Útil para requisitos específicos da operadora
  • Exemplo: value="line=1;isup=true"
Parâmetros Avançados

from-user

  • Substituir nome de usuário no cabeçalho From
  • Padrão: Usa o número de chamada ou nome de usuário do gateway
  • Exemplo: value="trunk_pilot"

from-domain

  • Substituir domínio no cabeçalho From
  • Padrão: Usa o domínio do proxy
  • Exemplo: value="my-domain.com"

outbound-proxy

  • Proxy de saída para todas as mensagens SIP
  • Diferente de proxy - usado como alvo do cabeçalho Route
  • Exemplo: value="edge-proxy.carrier.com:5060"

context

  • Contexto do dialplan para chamadas de entrada deste gateway
  • Padrão: public
  • Permite diferentes roteamentos de chamadas de entrada por gateway
  • Exemplo: value="from-carrier"

channels

  • Chamadas simultâneas máximas neste gateway
  • Padrão: Ilimitado
  • Usado para gerenciamento de capacidade
  • Exemplo: value="100"

dtmf-type

  • Método de transmissão DTMF
  • Valores: rfc2833 | info | inband | auto
  • Padrão: rfc2833 (recomendado)
  • rfc2833: Eventos de telefone RTP (mais comum)
  • info: Mensagens SIP INFO
  • inband: Tons de áudio
  • Exemplo: value="rfc2833"

codec-prefs

  • Lista de codecs preferidos para este gateway
  • Lista separada por vírgulas na ordem de preferência
  • Exemplo: value="PCMU,PCMA,G729"
  • Codecs comuns: PCMU, PCMA, G729, AMR, AMR-WB, G722, OPUS

rtp-timeout-sec

  • Desligar chamada se nenhum RTP recebido por N segundos
  • Padrão: 0 (desativado)
  • Útil para detectar chamadas mortas
  • Exemplo: value="120"

rtp-hold-timeout-sec

  • Timeout para chamadas em espera sem RTP
  • Padrão: 0 (desativado)
  • Exemplo: value="1800" (30 minutos)
Opções de Sinalização SIP

sip-port

  • Porta SIP local a ser usada para este gateway
  • Padrão: Porta do perfil
  • Raramente necessário
  • Exemplo: value="5060"

rtp-ip

  • Endereço IP local para mídia RTP
  • Padrão: IP RTP do perfil
  • Exemplo: value="10.0.0.5"

register-proxy-port

  • Porta para proxy de registro
  • Apenas necessário se diferente da porta do proxy
  • Exemplo: value="5061"

contact-host

  • Substituir a parte do host do cabeçalho Contact
  • Útil para cenários NAT
  • Exemplo: value="public-ip.example.com"

distinct-to

  • Usar cabeçalho To distinto (diferente do Request-URI)
  • Valores: true | false
  • Requisito específico da operadora
  • Exemplo: value="false"

cid-type

  • Tipo de ID do chamador nos cabeçalhos Remote-Party-ID ou P-Asserted-Identity
  • Valores: rpid | pid | none
  • rpid: Cabeçalho Remote-Party-ID
  • pid: Cabeçalho P-Asserted-Identity
  • Exemplo: value="pid"

extension-in-contact

  • Adicionar parâmetro de extensão ao URI de Contact
  • Valores: true | false
  • Exemplo: value="true"
Segurança de Transporte

transport (no parâmetro proxy)

  • Protocolo de transporte
  • Valores: udp | tcp | tls | ws | wss
  • Especificado como parte do valor do proxy
  • Exemplo: proxy="203.0.113.50;transport=tcp"

Para conexões TLS, pode ser necessária configuração adicional de certificado no perfil SIP.

Exemplo Completo com Opções Comuns

<include>
<gateway name="primary_carrier">
<!-- Obrigatório: Conexão básica -->
<param name="proxy" value="sbc.carrier.com:5060;transport=tcp"/>
<param name="register" value="true"/>

<!-- Autenticação -->
<param name="username" value="customer_trunk_01"/>
<param name="password" value="SecurePassword123"/>

<!-- Registro -->
<param name="register-transport" value="tcp"/>
<param name="expire-seconds" value="1800"/>
<param name="retry-seconds" value="30"/>

<!-- ID do Chamador -->
<param name="caller-id-in-from" value="true"/>

<!-- Monitoramento -->
<param name="ping" value="30"/>

<!-- Mídia -->
<param name="codec-prefs" value="PCMU,PCMA,G729"/>
<param name="dtmf-type" value="rfc2833"/>

<!-- Limites de Chamadas -->
<param name="channels" value="100"/>

<!-- Timeouts RTP -->
<param name="rtp-timeout-sec" value="300"/>
</gateway>
</include>

Uso do Gateway no Dialplan

Referencie gateways em seu dialplan usando o formato sofia/gateway/name/destination:

<!-- Roteamento para gateway específico -->
<action application="bridge" data="sofia/gateway/primary_carrier/+12125551234"/>

<!-- Roteamento usando variável -->
<action application="bridge" data="sofia/gateway/primary_carrier/${tas_destination_number}"/>

<!-- Roteamento com cabeçalhos SIP personalizados -->
<action application="bridge" data="{sip_h_X-Custom=Value}sofia/gateway/primary_carrier/${tas_destination_number}"/>

<!-- Failover entre gateways -->
<action application="bridge" data="sofia/gateway/primary_carrier/${tas_destination_number}|sofia/gateway/backup_carrier/${tas_destination_number}"/>

Solução de Problemas com Gateway

Gateway Não Registra:

  • Verifique se username e password estão corretos
  • Verifique se o endereço proxy é acessível
  • Confirme se register-transport corresponde aos requisitos da operadora
  • Revise os logs para falhas de autenticação

Chamadas Falham:

  • Verifique o status do gateway na UI da Web (/gw)
  • Verifique se a configuração de caller-id-in-from corresponde ao requisito da operadora
  • Confirme a compatibilidade de codec com codec-prefs
  • Verifique se o firewall permite tráfego SIP e RTP

Qualidade de Chamada Ruim:

  • Revise os tempos de ping no Status do Gateway
  • Verifique se rtp-timeout-sec não é muito agressivo
  • Confirme se as preferências de codec correspondem às capacidades da rede
  • Monitore a latência da rede e a perda de pacotes

Configuração do Par de Diameter

Os pares Diameter devem ser definidos na configuração de runtime.

Esta configuração é em grande parte boilerplate.

A interface Ro não precisa ser incluída nas Aplicações se Ro não for usada em sua implantação.

config :diameter_ex,
diameter: %{
service_name: :omnitouch_tas,
listen_ip: "10.8.82.60",
listen_port: 3868,
decode_format: :map,
host: "example-dc01-as01",
realm: "epc.mnc001.mcc001.3gppnetwork.org",
product_name: "OmniTAS",
request_timeout: 5000,
peer_selection_algorithm: :random,
allow_undefined_peers_to_connect: true,
log_unauthorized_peer_connection_attempts: true,
control_module: Tas.Control.Diameter,
processor_module: DiameterEx.Processor,
auth_application_ids: [],
acct_application_ids: [],
vendor_id: 10415,
supported_vendor_ids: [10415],
# Opcional: Realm de destino global para todas as aplicações
# destination_realm: "global.destination.realm",
applications: [
%{
application_name: :sh,
application_dictionary: :diameter_gen_3gpp_sh,
# Opcional: Realm de destino específico da aplicação para solicitações Sh
# destination_realm: "sh.destination.realm",
vendor_specific_application_ids: [
%{
vendor_id: 10415,
auth_application_id: 16_777_217,
acct_application_id: nil
}
]
},
%{
application_name: :ro,
application_dictionary: :diameter_gen_3gpp_ro,
# Opcional: Realm de destino específico da aplicação para solicitações Ro
# destination_realm: "ocs.destination.realm",
vendor_specific_application_ids: [
%{
vendor_id: 0,
auth_application_id: 4,
acct_application_id: nil
}
]
}
],
peers: [
%{
port: 3868,
host: "example-dc01-dra01.epc.mnc001.mcc001.3gppnetwork.org",
ip: "1.2.3.4",
realm: "epc.mnc001.mcc001.3gppnetwork.org",
tls: false,
transport: :diameter_tcp,
initiate_connection: true
},
%{
port: 3869,
host: "example-dc01-dra02.epc.mnc001.mcc001.3gppnetwork.org",
ip: "1.2.3.44",
realm: "epc.mnc001.mcc001.3gppnetwork.org",
tls: false,
transport: :diameter_tcp,
initiate_connection: true
}
]
}

Parâmetros de Configuração do Diameter

Configuração do Serviço:

  • service_name (atom): Identificador único para esta instância de serviço Diameter

    • Exemplo: :omnitouch_tas
    • Usado internamente para gerenciamento de serviço
  • listen_ip (string): Endereço IP para vincular conexões Diameter

    • Exemplo: "10.8.82.60"
    • Use "0.0.0.0" para ouvir em todas as interfaces
    • Os pares se conectarão a este IP
  • listen_port (inteiro): Porta TCP para conexões Diameter

    • Porta Diameter padrão: 3868
    • Não deve conflitar com outros serviços
  • host (string): Identidade do host Diameter (sem realm)

    • Exemplo: "example-dc01-as01"
    • Combinado com realm para formar o AVP Origin-Host
    • Deve ser único dentro da rede Diameter
  • realm (string): Identidade do realm Diameter

    • Exemplo: "epc.mnc001.mcc001.3gppnetwork.org"
    • Usado no AVP Origin-Realm
    • Deve corresponder às convenções de identificador de rede 3GPP
  • product_name (string): Identificador do produto nas mensagens CER/CEA

    • Exemplo: "OmniTAS"
    • Usado em mensagens de Troca de Capacidades
  • request_timeout (inteiro): Timeout em milissegundos para solicitações Diameter

    • Exemplo: 5000 (5 segundos)
    • Solicitações sem resposta dentro deste tempo irão expirar
  • peer_selection_algorithm (atom): Algoritmo para selecionar o par quando múltiplos disponíveis

    • Valores: :random | :round_robin | :priority
    • :random: Seleção aleatória de par
    • :round_robin: Distribuir solicitações uniformemente entre os pares
  • vendor_id (inteiro): ID do fornecedor 3GPP

    • ID do fornecedor 3GPP padrão: 10415
    • Usado no AVP Vendor-Specific-Application-Id

Configuração do Realm de Destino

O parâmetro destination_realm controla o AVP Destination-Realm incluído nas solicitações Diameter. Este AVP informa ao Agente de Roteamento Diameter (DRA) para onde roteá a solicitação.

Três níveis de configuração:

  1. Específico da aplicação (maior prioridade): Defina destination_realm dentro de cada configuração de aplicação
  2. Global: Defina destination_realm no nível superior da configuração diameter
  3. Fallback (menor prioridade): Usa o valor de realm se nenhum dos acima estiver configurado

Exemplos de Configuração:

# Exemplo 1: Realms de destino específicos da aplicação
config :diameter_ex,
diameter: %{
realm: "epc.mnc001.mcc001.3gppnetwork.org",
applications: [
%{
application_name: :sh,
destination_realm: "hss.epc.mnc001.mcc001.3gppnetwork.org",
# ... outras configurações
},
%{
application_name: :ro,
destination_realm: "ocs.epc.mnc001.mcc001.3gppnetwork.org",
# ... outras configurações
}
]
}

# Exemplo 2: Realm de destino global com substituição específica da aplicação
config :diameter_ex,
diameter: %{
realm: "epc.mnc001.mcc001.3gppnetwork.org",
destination_realm: "dra.epc.mnc001.mcc001.3gppnetwork.org", # Padrão para todas as aplicações
applications: [
%{
application_name: :sh,
# Usará global: "dra.epc.mnc001.mcc001.3gppnetwork.org"
},
%{
application_name: :ro,
destination_realm: "ocs.epc.mnc001.mcc001.3gppnetwork.org", # Substituição
}
]
}

# Exemplo 3: Nenhum destination_realm configurado (usa realm)
config :diameter_ex,
diameter: %{
realm: "epc.mnc001.mcc001.3gppnetwork.org",
# Nenhum destination_realm especificado em nenhum lugar
applications: [
%{
application_name: :sh,
# Usará fallback de realm: "epc.mnc001.mcc001.3gppnetwork.org"
}
]
}

Quando Usar o Realm de Destino:

  • Sistemas de backend diferentes: Quando Sh vai para HSS e Ro vai para OCS em realms diferentes
  • Roteamento DRA: Quando DRA usa Destination-Realm para roteamento para diferentes clusters de backend
  • Implantações multi-inquilino: Roteie diferentes aplicações para diferentes realms de inquilinos
  • Cenários de teste: Substitua o realm de destino por aplicação para teste sem alterar pares

Hierarquia de Fallback:

Destination-Realm específico da aplicação
↓ (se não definido)
Realm de destino global
↓ (se não definido)
realm

Isso garante que o AVP Destination-Realm obrigatório esteja sempre presente nas solicitações de saída.

Você pode verificar o status dos pares Diameter na aba Diameter na interface da Web.

Visão dos Pares Diameter

Você também pode testar a recuperação de dados Sh na aba Sh na interface da Web para tentar buscar qualquer um dos dados do Sh.

Teste de Dados Sh