Pular para o conteúdo principal

Serviços Suplementares

📖 Voltar à Documentação Principal

Configuração e implementação de serviços de desvio de chamadas, bloqueio de CLI e chamadas de emergência.

Documentação Relacionada

Documentação Principal

Processamento de Chamadas & Fontes de Dados

Interações de Serviço

  • 💳 Cobrança Online - Chamadas de emergência ignoram OCS
  • 📞 Correio de Voz - Desvio de chamadas em rotas de ocupado/sem resposta para correio de voz

Monitoramento


Serviços Suplementares (Desvio de Chamadas / CLI Bloqueado / Códigos de Emergência)

Configuração para prefixos de CLI bloqueados, códigos de chamadas de emergência e dados de Desvio de Chamadas padrão (os dados de Desvio de Chamadas / Sem Resposta são usados apenas quando nenhum dado MMTel-Config é retornado do Repositório no Sh).

config :tas,
...
blocked_cli_prefix: ["*67"],
call_forward_not_reachable_destination: "2222",
default_no_reply_timer: 30,
emergency_call_codes: ["911", "912", "913", "sos"],
...

Parâmetros de Configuração:

  • blocked_cli_prefix (lista de strings): Prefixos que acionam a retenção de CLI (Identificação da Linha Chamadora)

    • Exemplo: ["*67"] - discar *67 antes de um número oculta a ID do chamador
    • Usado no dialplan para definir a variável cli_withheld
  • call_forward_not_reachable_destination (string): Destino padrão para Desvio de Chamadas Não Atingido (CFNRc)

    • Usado apenas quando nenhum MMTel-Config é retornado da interface Sh
    • Exemplo: "2222" - desvia para o correio de voz
  • default_no_reply_timer (inteiro): Tempo limite padrão em segundos antes que o CFNRc ative

    • Usado apenas quando nenhum MMTel-Config é retornado da interface Sh
    • Exemplo: 30 - toca por 30 segundos antes de desviar
  • emergency_call_codes (lista de strings): Números de serviços de emergência para sua jurisdição

    • Verificado durante a autorização da chamada para detectar chamadas de emergência
    • URNs de emergência SIP (por exemplo, <urn:service:sos>) são sempre verificados além desses códigos
    • Exemplos comuns: ["911", "112", "000", "999", "sos"]
    • Consulte a seção Chamadas de Emergência para uso detalhado

Como Funciona o Bloqueio de ID do Chamador

O TAS suporta dois métodos para bloquear a ID do chamador (retenção de CLI), ambos os quais definem a variável de dialplan cli_withheld como "true":

Método 1: Bloqueio Baseado em Prefixo

Quando um assinante disca um número de destino prefixado com um código de blocked_cli_prefix:

  1. O módulo de tradução de números detecta o prefixo (por exemplo, o chamador disca *67555123456)
  2. O prefixo é removido do número de destino (torna-se 555123456)
  3. A variável cli_withheld é definida como "true"
  4. O dialplan pode então usar essa variável para ocultar a identidade do chamador

Exemplo de configuração:

blocked_cli_prefix: ["*67"]        # Bloqueio estilo EUA
blocked_cli_prefix: ["#31#"] # Bloqueio estilo GSM europeu
blocked_cli_prefix: ["*67", "#31#"] # Suporte a ambos

Método 2: Detecção do Cabeçalho SIP From

Quando o UE/aparelho solicita privacidade através de cabeçalhos SIP:

  1. O TAS verifica se o nome de exibição do cabeçalho SIP From contém "anônimo" (sem distinção entre maiúsculas e minúsculas)
  2. Se encontrado, a variável cli_withheld é definida como "true"
  3. Isso respeita o pedido de privacidade do assinante definido no nível do dispositivo

Implementando o Bloqueio de CLI no Dialplan

O TAS define a variável cli_withheld, mas seu dialplan XML deve implementar o comportamento real de bloqueio:

<extension name="CLI-Privacy" continue="true">
<condition field="${cli_withheld}" expression="true">
<!-- Ocultar identidade do chamador -->
<action application="set" data="effective_caller_id_name=anonymous"/>
<action application="set" data="effective_caller_id_number=anonymous"/>
<action application="set" data="origination_privacy=hide_number"/>

<!-- Opcionalmente definir privacidade do P-Asserted-Identity -->
<action application="set" data="sip_h_Privacy=id"/>
</condition>
</extension>

Variáveis Definidas pelo TAS para Bloqueio de CLI:

O TAS define essas variáveis antes da execução do dialplan:

VariávelTipoValoresDescrição
cli_withheldstring"true" ou "false"Indica se o bloqueio de CLI foi solicitado via prefixo OU cabeçalho From
tas_destination_numberstringnúmero normalizadoDestino com prefixo de bloqueio removido (por exemplo, 555123456)
destination_numberstringnúmero normalizadoIgual a tas_destination_number (ambos são definidos)

Variáveis que Seu Dialplan Deve Definir (quando cli_withheld="true"):

Essas variáveis controlam como a identidade do chamador é apresentada:

VariávelValor RecomendadoPropósito
effective_caller_id_number"anonymous"Oculta o número de telefone do chamador
effective_caller_id_name"anonymous"Oculta o nome de exibição do chamador
origination_privacy"hide_number"Sinalizador de privacidade SIP para a perna de saída
sip_h_Privacy"id"Cabeçalho de Privacidade SIP (RFC 3323)
sip_h_P-Asserted-Identity(não definido ou removido)Opcional: Remover cabeçalho P-Asserted-Identity

Exemplo Completo de Dialplan:

<extension name="CLI-Privacy-Handler" continue="true">
<condition field="${cli_withheld}" expression="true">
<!-- Log para solução de problemas -->
<action application="log" data="INFO Bloqueio de CLI solicitado para chamada para ${tas_destination_number}"/>

<!-- Ocultar identidade do chamador na chamada de saída -->
<action application="set" data="effective_caller_id_name=anonymous"/>
<action application="set" data="effective_caller_id_number=anonymous"/>
<action application="set" data="origination_privacy=hide_number"/>

<!-- Definir cabeçalhos de privacidade SIP -->
<action application="set" data="sip_h_Privacy=id"/>

<!-- Opcional: Remover P-Asserted-Identity se presente -->
<action application="unset" data="sip_h_P-Asserted-Identity"/>

<!-- A ação anti é executada se cli_withheld for falso -->
<anti-action application="log" data="DEBUG Usando ID do chamador normal: ${msisdn}"/>
<anti-action application="set" data="effective_caller_id_number=${msisdn}"/>
</condition>
</extension>

<!-- Esta extensão continua para o roteamento real da chamada -->
<extension name="Route-Outbound-Call">
<condition field="${tas_destination_number}" expression="^(.+)$">
<action application="bridge" data="sofia/gateway/trunk/${tas_destination_number}"/>
</condition>
</extension>

Notas Importantes:

  • Ambos os métodos podem funcionar simultaneamente (prefixo OU cabeçalho SIP aciona o bloqueio)
  • O prefixo é sempre removido do número de destino, mesmo que o dialplan não implemente a privacidade
  • A variável cli_withheld é uma string ("true" ou "false"), não um booleano
  • O comportamento de Desvio de Chamadas / CLI Bloqueado é implementado no seu dialplan XML
  • A configuração de exemplo inclui esses recursos, mas se você não os definir em seu dialplan, eles não funcionarão
  • Variáveis são definidas durante o fluxo de chamada MO (Origem Móvel) apenas

Como Funciona o Desvio de Chamadas

O desvio de chamadas (também conhecido como Desvio de Comunicação ou CDIV) permite que assinantes redirecionem chamadas recebidas para outro destino. O TAS suporta vários tipos de desvio de chamadas com comportamento configurável.

Tipos de Desvio de Chamadas

1. Desvio de Chamadas Todas (CFA) - Desvio Incondicional

  • Variável: call_forward_all_destination
  • Quando Ativo: Todas as chamadas recebidas são imediatamente desviadas
  • Prioridade: Verificado primeiro (após o desvio HLR)
  • Uso Comum: Assinante deseja que todas as chamadas sejam enviadas para outro número
  • Exemplo: Chamadas de negócios desviadas para o telefone pessoal

2. Desvio de Chamadas Ocupado (CFB)

  • Quando Ativo: Chamada desviada quando o assinante já está em uma chamada
  • Resposta SIP: 486 Ocupado aciona o desvio
  • Uso Comum: Desviar para correio de voz quando em outra chamada

3. Desvio de Chamadas Sem Resposta (CFNRy)

  • Variável: no_reply_timer
  • Quando Ativo: Chamada desviada após tocar por um número especificado de segundos sem resposta
  • Tempo Limite: Tipicamente 15-30 segundos
  • Uso Comum: Desviar para correio de voz se não atendido

4. Desvio de Chamadas Não Atingível (CFNRc)

  • Variável: call_forward_not_reachable_destination
  • Quando Ativo: Assinante está offline, não registrado ou não atingível
  • Resposta SIP: 480 Temporariamente Indisponível
  • Uso Comum: Desviar para correio de voz quando o telefone está desligado
  • Padrão: Parâmetro de configuração usado se nenhum MMTel-Config

Prioridade das Fontes de Dados

Os dados de desvio de chamadas são recuperados de várias fontes com esta prioridade:

1. Dados HLR (SS7 MAP)           [Maior Prioridade - substitui todos]
↓ (se nenhum desvio HLR ativo)
2. MMTel-Config (Interface Sh) [Configurações específicas do assinante do HSS]
↓ (se nenhum MMTel-Config retornado)
3. Padrões de Configuração [Menor Prioridade - valores de fallback]

Por que essa Prioridade?

  • Dados HLR: Status de desvio em tempo real para cen��rios de roaming/rede
  • MMTel-Config: Preferências configuradas pelo assinante no IMS
  • Padrões de Configuração: Fallback em toda a rede (tipicamente correio de voz)

Variáveis do Dialplan para Desvio de Chamadas

VariávelTipoFonteValor de ExemploDescrição
call_forward_all_destinationstringSh/MMTel ou "none""61403555123"Destino CFA se ativo
call_forward_not_reachable_destinationstringSh/MMTel ou configuração"2222"Destino CFNRc (correio de voz)
no_reply_timerinteiroSh/MMTel ou configuração30Segundos para tocar antes do CFNRy
msrnstringHLR (apenas MT)"61400123456"MSRN ou número desviado do HLR
tas_destination_numberstringCalculado"2222"Destino real de roteamento (pode ser número desviado)

Implementando o Desvio de Chamadas no Dialplan

Exemplo de Dialplan MT com Desvio de Chamadas:

<!-- Verificar Desvio de Chamadas Todas (maior prioridade após HLR) -->
<extension name="Check-CFA" continue="true">
<condition field="${call_forward_all_destination}" expression="^(?!none$).+$">
<action application="log" data="INFO Desvio de Chamadas Todas ativo para ${call_forward_all_destination}"/>
<action application="set" data="tas_destination_number=${call_forward_all_destination}"/>
</condition>
</extension>

<!-- Tentar conectar ao assinante -->
<extension name="Bridge-To-Subscriber">
<condition field="${msrn}" expression="^none$">
<!-- Sem MSRN, roteamento para assinante local -->
<action application="set" data="call_timeout=${no_reply_timer}"/>
<action application="bridge" data="sofia/internal/${tas_destination_number}@${scscf_address}"/>

<!-- Se a conexão falhar, verificar o desvio -->
<action application="log" data="INFO Conexão falhou, verificando desvio de chamadas"/>

<!-- Desvio de Chamadas Não Atingível -->
<action application="set" data="forward_destination=${call_forward_not_reachable_destination}"/>
<action application="log" data="INFO Desviando para ${forward_destination}"/>
<action application="answer"/>
<action application="voicemail" data="default default ${msisdn}"/>
</condition>
</extension>

Configurando Desvio de Chamadas Padrão

Defina padrões em toda a rede em config/runtime.exs:

config :tas,
# Destino padrão CFNRc (usado quando nenhum MMTel-Config)
call_forward_not_reachable_destination: "2222", # Número de acesso ao correio de voz

# Tempo limite padrão antes que CFNRy ative (usado quando nenhum MMTel-Config)
default_no_reply_timer: 30 # Tocar por 30 segundos

Quando os Padrões São Usados:

  • O assinante existe no HSS, mas não tem MMTel-Config provisionado
  • A consulta Sh é bem-sucedida, mas não retorna configurações de desvio de chamadas
  • Novos assinantes antes que o desvio de chamadas seja configurado

Solução de Problemas de Desvio de Chamadas

Problema: Chamadas não desviando como esperado

  1. Verifique os Dados Sh:

    • Use a interface Web /sh_test para consultar o assinante
    • Verifique se o MMTel-Config contém regras de CDIV
    • Confira o valor de call_forward_all_destination
  2. Verifique as Variáveis do Dialplan:

    • Revise os logs de chamadas para os valores das variáveis
    • Confirme que call_forward_all_destination != "none"
    • Verifique se tas_destination_number está definido para o destino de desvio
  3. Verifique os Dados HLR (se SS7 MAP habilitado):

    • Use a interface Web /hlr para consultar o assinante
    • O desvio HLR substitui os dados Sh
    • Verifique se a variável msrn não contém um número de desvio inesperado
  4. Verifique os Padrões de Configuração:

    • Verifique call_forward_not_reachable_destination na configuração
    • Confirme se default_no_reply_timer é apropriado
    • Esses só se aplicam quando nenhum MMTel-Config existe

Problema: Laços de desvio

Sintomas: Chamada desvia para um número que desvia de volta, criando um laço

Prevenção no Dialplan:

<!-- Rastrear contagem de saltos de desvio -->
<extension name="Prevent-Forward-Loop" continue="true">
<condition field="${sip_h_X-Forward-Hop-Count}" expression="^$">
<action application="set" data="sip_h_X-Forward-Hop-Count=1"/>
<anti-action application="set" data="sip_h_X-Forward-Hop-Count=${expr(${sip_h_X-Forward-Hop-Count}+1)}"/>
</condition>
</extension>

<extension name="Check-Forward-Hop-Limit">
<condition field="${sip_h_X-Forward-Hop-Count}" expression="^([3-9]|[1-9][0-9]+)$">
<action application="log" data="ERROR Laço de desvio detectado, contagem de saltos: ${sip_h_X-Forward-Hop-Count}"/>
<action application="hangup" data="LOOP_DETECTED"/>
</condition>
</extension>

Monitorando o Desvio de Chamadas

Indicadores Chave:

  • Alta taxa de chamadas para números de correio de voz
  • Padrão de chamadas expirando no valor de no_reply_timer
  • Chamadas consistentemente roteadas para os mesmos destinos de desvio

Logs Úteis:

INFO Desvio de Chamadas Todas ativo para 61403555123
INFO Desviando para 2222
INFO Conexão falhou, verificando desvio de chamadas

Inteligência de Negócios:

  • Rastrear taxas de ativação de desvio por assinante
  • Monitorar padrões de uso do correio de voz
  • Identificar assinantes com desvio incondicional