Pular para o conteúdo principal

Guia de Configuração do HLR

← Voltar para a Documentação Principal

Este guia fornece configuração para usar o OmniSS7 como um Home Location Register (HLR/HSS) com OmniHSS como o banco de dados de assinantes de backend.

Integração com o OmniHSS​

O modo HLR do OmniSS7 funciona como uma interface de sinalização SS7 que se conecta ao OmniHSS, um servidor de assinantes doméstico (HSS) completo. Esta arquitetura separa as preocupações:

  • OmniSS7 (Frontend HLR): Lida com toda a sinalização do protocolo SS7/MAP, roteamento SCCP e comunicação de rede
  • OmniHSS (Backend HSS): Gerencia dados de assinantes, autenticação, provisionamento e recursos avançados

Por que o OmniHSS?​

O OmniHSS fornece gerenciamento de assinantes de nível de operadora com recursos incluindo:

  • Suporte Multi-IMSI: Cada assinante pode ter múltiplos IMSIs associados a um único MSISDN para roaming internacional, troca de rede e provisionamento de eSIM
  • Autenticação Flexível: Suporte para algoritmos de autenticação Milenage (3G/4G/5G) e COMP128 (2G)
  • Rastreamento de Sessão de Circuito e Pacote: Rastreamento independente de registros de rede CS (circuito comutado) e PS (pacote comutado)
  • Provisionamento Avançado: Perfis de serviço personalizáveis, serviços suplementares e dados de assinatura CAMEL
  • Design API-First: API RESTful HTTP para integração com sistemas de cobrança, CRM e provisionamento
  • Atualizações em Tempo Real: Rastreamento de localização, gerenciamento de sessão e geração de vetores de autenticação

Todos os dados de assinantes, credenciais de autenticação e configurações de serviço são armazenados e gerenciados no OmniHSS. O OmniSS7 consulta o OmniHSS via chamadas de API HTTPS para responder a operações MAP como UpdateLocation, SendAuthenticationInfo e SendRoutingInfo.

Importante: O modo HLR do OmniSS7 é um frontend de sinalização apenas. Toda a lógica de gerenciamento de assinantes, algoritmos de autenticação, regras de provisionamento e operações de banco de dados são tratadas pelo OmniHSS. Este guia cobre a configuração do protocolo SS7/MAP no OmniSS7. Para informações sobre provisionamento de assinantes, configuração de autenticação, perfis de serviço e operações administrativas, consulte a documentação do OmniHSS.

Suporte Multi-IMSI​

O OmniHSS suporta nativamente configurações Multi-IMSI, permitindo que um único assinante (identificado por MSISDN) tenha múltiplos IMSIs. Isso possibilita:

  • Perfis de Roaming Internacional: Diferentes IMSIs para diferentes regiões para reduzir custos de roaming
  • eSIM Multi-Perfil: Múltiplos perfis de rede em um único dispositivo compatível com eSIM
  • Troca de Rede: Troca contínua entre redes sem mudar o MSISDN
  • Coordenação de Dual SIM: Coordenação entre múltiplos SIMs físicos ou virtuais
  • Teste e Desenvolvimento: Múltiplos IMSIs de teste apontando para o mesmo assinante

Como funciona:

  • Cada IMSI tem suas próprias credenciais de autenticação (Ki, OPc, algoritmo)
  • Cada IMSI pode ter registros de sessão de circuito e pacote independentes
  • Serviços e perfis de assinantes podem ser compartilhados ou personalizados por IMSI
  • O OmniSS7 consulta o OmniHSS por IMSI, e o OmniHSS retorna os dados de assinante apropriados
  • Sistemas de cobrança podem rastrear o uso por IMSI enquanto associam todos os IMSIs a uma única conta

Exemplo de cenário Multi-IMSI:

Assinante MSISDN: +1-555-123-4567
├─ IMSI 1: 310260123456789 (Rede Doméstica dos EUA - autenticação Milenage)
├─ IMSI 2: 208011234567890 (Perfil de Roaming da França - autenticação Milenage)
└─ IMSI 3: 440201234567891 (Perfil de Roaming do Reino Unido - autenticação COMP128)

Todos os três IMSIs podem ser usados independentemente para registro na rede, mas todos pertencem à mesma conta de assinante. O OmniHSS gerencia o mapeamento IMSI-para-assinante e garante a autenticação e o provisionamento adequados para cada IMSI.

Assinantes Ativos

Índice​

  1. Integração com o OmniHSS
  2. Suporte Multi-IMSI
  3. O que é o Modo HLR?
  4. Habilitando o Modo HLR
  5. Banco de Dados de Assinantes
  6. Vetores de Autenticação
  7. Atualizações de Localização
  8. Integração CAMEL
  9. Tratamento de Assinantes em Roaming
  10. Operações HLR

O que é o Modo HLR?​

Modo HLR permite que o OmniSS7 funcione como um Home Location Register para:

  • Gerenciamento de Assinantes: Armazenar e gerenciar dados de assinantes
  • Autenticação: Gerar vetores de autenticação para acesso à rede
  • Rastreamento de Localização: Processar atualizações de localização de VLRs
  • Informações de Roteamento: Fornecer informações de roteamento para chamadas e SMS

Arquitetura HLR​


Habilitando o Modo HLR​

O OmniSS7 pode operar em diferentes modos (STP, HLR, SMSc). O modo é selecionado através de um conjunto de flags de modo e a configuração associada em config/config.exs, o arquivo de configuração padrão da aplicação.

Mudando para o Modo HLR​

Para executar o OmniSS7 como um HLR, defina as flags de modo para que os recursos HLR sejam habilitados e os recursos SMSc sejam desabilitados, e adicione a configuração específica do HLR:

  1. Abra config/config.exs
  2. Defina as flags de modo sob config :omniss7:
    • map_client_enabled: true: necessário para enviar e receber operações MAP
    • hlr_mode_enabled: true: habilita o tratamento específico do HLR
    • smsc_mode_enabled: false: desabilita os recursos do SMSc
  3. Adicione os parâmetros de configuração do HLR (endpoint da API, endereços GT, configurações ISD/CAMEL, conexão M3UA) mostrados abaixo
  4. Personalize os parâmetros para sua implantação
  5. Reinicie a aplicação para que as alterações tenham efeito

Nota: config/runtime.exs é um stub mínimo usado apenas para testes automatizados. Ele não contém definições de modo operacional. Toda a configuração de modo e HLR reside em config/config.exs (com substituições específicas de ambiente em arquivos como config/test.exs). Implantações em produção fornecem seu próprio config/config.exs.

Configuração do Modo HLR​

A configuração completa do HLR (em config/config.exs) é assim:

config :omniss7,
# Flags de Modo - Habilitar apenas recursos HLR
map_client_enabled: true,
hlr_mode_enabled: true,
smsc_mode_enabled: false,

# Configuração da API Backend OmniHSS
hlr_api_base_url: "https://omnihss.example.com:8443",

# Endereço GT do Centro de Serviço HLR para operações de SMS
hlr_service_center_gt_address: "1234567890",

# Configuração de Mapeamento MSISDN ↔ IMSI
# Veja: Seção de Mapeamento MSISDN ↔ IMSI para detalhes
hlr_imsi_plmn_prefix: "50557",
hlr_msisdn_country_code: "61",
hlr_msisdn_nsn_offset: 0,
hlr_msisdn_nsn_length: 9,

# Configuração do InsertSubscriberData
# Modo de Acesso à Rede: :packetAndCircuit, :packetOnly, ou :circuitOnly
isd_network_access_mode: :packetAndCircuit,

# Enviar ISD #2 (dados de Serviços Suplementares)
isd_send_ss_data: true,

# Enviar ISD #3 (dados de Bloqueio de Chamadas)
isd_send_call_barring: true,

# Configuração CAMEL (para respostas SendRoutingInfo)
# Chave de Serviço para iniciação de serviço CAMEL
camel_service_key: 11_110,

# Ponto de Detecção de Gatilho CAMEL
# Opções: :termAttemptAuthorized, :tBusy, :tNoAnswer, :tAnswer
camel_trigger_detection_point: :termAttemptAuthorized,

# Prefixos VLR Domésticos
# Lista de prefixos de endereços VLR que são considerados "rede" doméstica
# Se o VLR do assinante começar com um desses prefixos, use a resposta SRI padrão
# Caso contrário, o assinante está em roaming e precisamos enviar PRN para obter MSRN
# Padrão para [] (sem prefixos = todos os VLRs tratados como roaming) se omitido
home_vlr_prefixes: ["555123"],

# Configuração de Conexão M3UA
# Conectar como ASP para receber operações MAP (UpdateLocation, SendAuthInfo, etc.)
map_client_m3ua: %{
mode: "ASP",
callback: {MapClient, :handle_payload, []},
process_name: :hlr_client_asp,
# Endpoint local (sistema HLR)
local_ip: {10, 179, 4, 11},
local_port: 2905,
# Endpoint remoto STP
remote_ip: {10, 179, 4, 10},
remote_port: 2905,
routing_context: 1
}

Link para OmniHSS

Parâmetros de Configuração para Personalizar​

Para uma referência completa de todos os parâmetros de configuração, consulte a Referência de Configuração.

ParâmetroTipoPadrãoDescriçãoExemplo
hlr_api_base_urlStringObrigatórioEndpoint da API do backend OmniHSS"https://omnihss.example.com:8443"
hlr_service_center_gt_addressStringObrigatórioEndereço GT do HLR usado nas respostas UpdateLocation"5551234568"
smsc_service_center_gt_addressStringObrigatórioEndereço GT do SMSC retornado nas respostas SRI-for-SM"5551234567"
hlr_smsc_alert_gtsLista[]Lista de GTS do SMSc para enviar alertServiceCenter após UpdateLocation["15559876543", "15559876544"]
hlr_alert_location_expiry_secondsInteiro172800Tempo de expiração da localização (segundos) quando o SMSc recebe alertServiceCenter86400
hlr_imsi_plmn_prefixString"50557"Prefixo PLMN (MCC+MNC) para mapeamento MSISDN→IMSI (veja MSISDN ↔ IMSI Mapping)"001001"
hlr_msisdn_country_codeString"61"Prefixo do código do país para mapeamento reverso IMSI→MSISDN (veja MSISDN ↔ IMSI Mapping)"1"
hlr_msisdn_nsn_offsetInteiro0Deslocamento no MSISDN para extração do NSN (veja MSISDN ↔ IMSI Mapping)0
hlr_msisdn_nsn_lengthInteiro9Comprimento do Número Nacional do Assinante a ser extraído (veja MSISDN ↔ IMSI Mapping)10
isd_network_access_modeÁtomo:packetAndCircuitModo de acesso à rede para InsertSubscriberData:packetOnly
isd_send_ss_dataBooleanotrueEnviar ISD #2 com dados de Serviços Suplementaresfalse
isd_send_call_barringBooleanotrueEnviar ISD #3 com dados de Bloqueio de Chamadasfalse
camel_service_keyInteiro11_110Chave de serviço CAMEL para respostas SendRoutingInfo100
camel_trigger_detection_pointÁtomo:termAttemptAuthorizedPonto de detecção de gatilho CAMEL:tBusy
home_vlr_prefixesLista[]Lista de prefixos de endereços VLR considerados "rede" doméstica (vazio = todos os VLRs tratados como roaming)["555123"]
local_ipTuplaObrigatórioEndereço IP do seu sistema HLR{10, 179, 4, 12}
local_portInteiro2905Porta SCTP local2905
remote_ipTuplaObrigatórioEndereço IP do STP para conectividade SS7{10, 179, 4, 10}
remote_portInteiro2905Porta SCTP remota2905
routing_contextInteiro1ID do contexto de roteamento M3UA1

O que Acontece Quando o Modo HLR é Habilitado​

Quando hlr_mode_enabled: true, a interface web mostrará:

  • ✅ Eventos SS7 - Registro de eventos
  • ✅ Cliente SS7 - Teste de operações MAP
  • ✅ Pares - Status da conexão (pares M3UA/SCTP)
  • ✅ Links HLR - Status da API HLR + gerenciamento de assinantes ← Específico do HLR
  • ✅ Recursos - Monitoramento do sistema
  • ✅ Configuração - Visualizador de configuração

As abas Roteamento, Teste de Roteamento e Links SMSc serão ocultadas.

Notas Importantes​

  • Configuração Obrigatória: O parâmetro hlr_service_center_gt_address é mandatório. A aplicação falhará ao iniciar se não estiver configurado.
  • Backend OmniHSS: A API do OmniHSS deve ser acessível no hlr_api_base_url configurado
  • Tempo Limite de Solicitação da API: Todas as solicitações da API OmniHSS têm um tempo limite fixo de 5 segundos
  • Tempo Limite de Solicitação MAP: Todas as solicitações MAP (SRI, UpdateLocation, SendAuthInfo, etc.) têm um tempo limite fixo de 10 segundos
  • Tempo Limite ISD: Cada mensagem InsertSubscriberData (ISD) em uma sequência UpdateLocation tem um tempo limite fixo de 10 segundos
  • A conexão M3UA com o STP é necessária para receber operações MAP
  • Após mudar de modos, você deve reiniciar a aplicação para que as alterações tenham efeito
  • Interface Web: Consulte o Guia da Interface Web para informações sobre como usar a interface web
  • Acesso à API: Consulte o Guia da API para documentação da API REST e acesso à Swagger UI

Banco de Dados de Assinantes​

O OmniHSS gerencia todos os dados de assinantes incluindo identidades, credenciais de autenticação, perfis de serviço e informações de localização. O OmniSS7 recupera esses dados por meio de chamadas de API RESTful.

Modelo de Assinante do OmniHSS​

O OmniHSS armazena informações abrangentes sobre assinantes:

  • Múltiplos IMSIs por assinante: Suporte para configurações Multi-IMSI (eSIM, perfis de roaming, troca de rede)
  • Credenciais de autenticação: Seleção de Ki, OPc e algoritmo (Milenage ou COMP128)
  • Perfis de serviço: Categoria de assinante, serviços permitidos, parâmetros de QoS
  • Rastreamento de localização: Rastreamento independente da localização atual VLR/MSC (sessão de circuito) e SGSN/GGSN (sessão de pacote)
  • Dados de assinatura CAMEL: Chaves de serviço, pontos de gatilho e endereços gsmSCF
  • Serviços suplementares: Encaminhamento de chamadas, bloqueio, espera, configurações CLIP/CLIR
  • Estado administrativo: Habilitado/desabilitado, restrições de serviço, datas de expiração

Vetores de Autenticação​

Gerar Vetores de Autenticação​

O OmniHSS gera vetores de autenticação usando os algoritmos Milenage ou COMP128 com base no método de autenticação configurado de cada assinante. Quando o OmniSS7 recebe solicitações MAP sendAuthenticationInfo:

  1. O OmniSS7 extrai o IMSI da solicitação MAP
  2. O OmniSS7 chama a API do OmniHSS para gerar vetores de autenticação
  3. O OmniHSS recupera as credenciais Ki e OPc do assinante
  4. O OmniHSS gera o número solicitado de vetores (RAND, XRES, CK, IK, AUTN)
  5. O OmniSS7 codifica os vetores no formato MAP e os retorna ao VLR/SGSN solicitante

Integração da API OmniHSS​

O OmniSS7 se comunica com o OmniHSS via API RESTful HTTPS para recuperar informações de assinantes, atualizar dados de localização e gerar vetores de autenticação:

config :omniss7,
hlr_api_base_url: "https://omnihss-server:8443"

Quando o OmniSS7 recebe operações MAP da rede SS7, ele consulta o OmniHSS para:

  • Recuperar dados de assinante por IMSI ou MSISDN
  • Gerar vetores de autenticação usando credenciais Ki/OPc armazenadas
  • Atualizar a localização da sessão de circuito quando os assinantes realizam UpdateLocation
  • Verificar o status do assinante e os direitos de serviço

Atualizações de Localização​

Processamento de Atualização de Localização​

Ao receber solicitações MAP updateLocation, o OmniSS7 coordena com o OmniHSS para registrar o assinante em um novo VLR:

  1. Extrair informações de localização da solicitação UpdateLocation (IMSI, novo GT VLR, novo GT MSC)
  2. Consultar o OmniHSS para verificar se o assinante existe e está habilitado
  3. Atualizar a sessão de circuito no OmniHSS com a nova localização VLR/MSC
  4. Enviar mensagens InsertSubscriberData (ISD) para provisionar o assinante no novo VLR
  5. Retornar a resposta UpdateLocation ao VLR (inclui GT HLR do hlr_service_center_gt_address)
  6. Enviar alertServiceCenter para os GTs do SMSc configurados (se hlr_smsc_alert_gts estiver populado)

Nota: O parâmetro de configuração hlr_service_center_gt_address especifica o Título Global do HLR que é retornado nas respostas UpdateLocation. Isso permite que o VLR/MSC identifique e roteie mensagens de volta para este HLR.

Integração do Centro de Serviço de Alerta​

Após uma atualização de localização bem-sucedida, o HLR pode notificar automaticamente os sistemas SMSc que um assinante agora está acessível, enviando mensagens alertServiceCenter (operação MAP 64). Para informações sobre como o SMSc lida com esses alertas, consulte Tratamento do Centro de Serviço de Alerta no Guia do SMSc.

Configuração​

Configure a lista de Títulos Globais do SMSc para notificar:

config :omniss7,
# Lista de GTS do SMSc para enviar alertServiceCenter após UpdateLocation
hlr_smsc_alert_gts: [
"15559876543",
"15559876544"
],

# Tempo de expiração da localização quando o SMSc recebe alertServiceCenter (padrão: 48 horas)
hlr_alert_location_expiry_seconds: 172800

Diagrama de Fluxo​

Comportamento​

Quando um assinante realiza UpdateLocation:

  1. O HLR envia alertServiceCenter para cada GT do SMSc na lista hlr_smsc_alert_gts
  2. A mensagem inclui o MSISDN do assinante
  3. O HLR usa hlr_service_center_gt_address como o GT da parte chamadora
  4. Endereçamento SCCP: SSN chamador=6 (HLR), SSN chamado=8 (SMSc)

O SMSc recebe o alerta e:

  • Remove o prefixo TON/NPI do MSISDN (por exemplo, "19123123213" → "123123213")
  • Marca o assinante como acessível em seu banco de dados de localização (via POST para /api/locations)
  • Define o campo user_agent para o GT do HLR ao chamar a API (para rastreamento de qual HLR enviou o alerta)
  • Define o tempo de expiração da localização com base em hlr_alert_location_expiry_seconds
  • Rastreia o assinante no rastreador de assinantes do SMSc para monitoramento

Testando​

Use a página Assinantes Ativos na Interface Web para enviar manualmente mensagens alertServiceCenter para teste:

  1. Navegue até a aba "Assinantes Ativos"
  2. Encontre a seção "Testar Centro de Serviço de Alerta"
  3. Insira MSISDN, GT do SMSc e GT do HLR (os padrões são preenchidos a partir da configuração)
    • O GT do SMSc padrão é a primeira entrada em hlr_smsc_alert_gts
    • O GT do HLR padrão é hlr_service_center_gt_address
  4. Clique em "Enviar alertServiceCenter"

Isso é útil para testar o tratamento de alertas do SMSc sem exigir um fluxo completo de UpdateLocation. O formulário usa validação phx-blur para evitar mostrar erros enquanto digita.

Configuração do InsertSubscriberData (ISD)​

Após uma atualização de localização bem-sucedida, o HLR envia dados de provisionamento do assinante para o VLR usando mensagens InsertSubscriberData (ISD). A configuração do ISD permite que você personalize quais dados são enviados e como.

Para referência de parâmetros de configuração, consulte Configuração do ISD na Referência de Configuração.

Sequência ISD​

O HLR pode enviar até 3 mensagens ISD sequenciais:

  1. ISD #1 (Sempre enviado) - Dados básicos do assinante:

    • IMSI
    • MSISDN
    • Categoria do assinante
    • Status do assinante (serviceGranted)
    • Lista de serviços de bearer
    • Lista de teleserviços
    • Modo de acesso à rede
  2. ISD #2 (Opcional) - Dados de Serviços Suplementares (SS):

    • Configurações de encaminhamento de chamadas (incondicional, ocupado, sem resposta, não acessível)
    • Espera de chamadas
    • Colocação de chamadas
    • Serviço de múltiplos participantes
    • Status e recursos do serviço suplementar
  3. ISD #3 (Opcional) - Dados de Bloqueio de Chamadas:

    • Bloqueio de todas as chamadas de saída (BAOC)
    • Bloqueio de chamadas internacionais de saída (BOIC)
    • Dados de restrição de acesso

Opções de Configuração​

# Configuração do InsertSubscriberData
# Modo de Acesso à Rede: :packetAndCircuit, :packetOnly, ou :circuitOnly
isd_network_access_mode: :packetAndCircuit,

# Enviar ISD #2 (dados de Serviços Suplementares)
isd_send_ss_data: true,

# Enviar ISD #3 (dados de Bloqueio de Chamadas)
isd_send_call_barring: true,

Modo de Acesso à Rede​

O parâmetro isd_network_access_mode controla que tipo de acesso à rede o assinante está autorizado:

ValorDescriçãoCaso de Uso
:packetAndCircuitTanto comutado por pacote (GPRS/LTE) quanto comutado por circuito (voz)Padrão - Assinantes de serviço completo
:packetOnlyApenas comutado por pacote (dados/LTE)Cartões SIM apenas para dados, dispositivos IoT
:circuitOnlyApenas comutado por circuito (voz/SMS)Dispositivos legados, planos apenas de voz

Controlando Mensagens ISD​

Você pode controlar quais mensagens ISD são enviadas com base nas necessidades da sua rede:

Enviar todos os ISDs (Padrão - Conjunto completo de recursos):

isd_send_ss_data: true,
isd_send_call_barring: true,

Enviar apenas dados básicos do assinante (Provisionamento mínimo):

isd_send_ss_data: false,
isd_send_call_barring: false,

Enviar dados básicos + serviços suplementares (Sem bloqueio de chamadas):

isd_send_ss_data: true,
isd_send_call_barring: false,

Exemplo de Fluxo ISD​

Quando UpdateLocation é recebido:

VLR → HLR: UpdateLocation (INÍCIO)
HLR → VLR: InsertSubscriberData #1 (CONTINUAR) - Dados básicos
VLR → HLR: ISD #1 ACK (CONTINUAR)
HLR → VLR: InsertSubscriberData #2 (CONTINUAR) - Dados SS [se habilitado]
VLR → HLR: ISD #2 ACK (CONTINUAR)
HLR → VLR: InsertSubscriberData #3 (CONTINUAR) - Bloqueio de chamadas [se habilitado]
VLR → HLR: ISD #3 ACK (CONTINUAR)
HLR → VLR: Resposta UpdateLocation (FIM)

Se isd_send_ss_data ou isd_send_call_barring forem definidos como false, essas mensagens ISD são puladas, e o UpdateLocation FIM é enviado mais cedo.

Melhores Práticas​

  • Configuração Padrão: Use :packetAndCircuit e habilite todos os ISDs para máxima compatibilidade
  • IoT/M2M: Use :packetOnly e desabilite dados SS/bloqueio de chamadas para dispositivos apenas de dados
  • Interoperabilidade: Alguns VLRs mais antigos podem não suportar todos os serviços suplementares - desabilite isd_send_ss_data se encontrar problemas
  • Desempenho: Desabilitar ISDs não utilizados reduz a sobrecarga de mensagens e acelera as atualizações de localização

Integração CAMEL​

Configuração CAMEL para SendRoutingInfo​

Ao responder a solicitações SendRoutingInfo (SRI) de um GMSC (Gateway MSC), o HLR pode instruir o GMSC a invocar serviços CAMEL para roteamento inteligente de chamadas e controle de serviços.

Para referência de parâmetros de configuração, consulte Configuração CAMEL na Referência de Configuração.

O que é CAMEL?​

CAMEL (Aplicações Personalizadas para Lógica Aprimorada de Redes Móveis) é um protocolo que permite serviços de rede inteligentes em redes GSM/UMTS. Ele permite que os operadores de rede implementem serviços de valor agregado, como:

  • Cobrança pré-paga
  • Filtragem e bloqueio de chamadas
  • Redes Privadas Virtuais (VPN)
  • Serviços de tarifa premium
  • Encaminhamento de chamadas com lógica personalizada
  • Serviços baseados em localização

Opções de Configuração​

# Configuração CAMEL (para respostas SendRoutingInfo)
# Chave de Serviço para iniciação de serviço CAMEL
camel_service_key: 11_110,

# Ponto de Detecção de Gatilho CAMEL
# Opções: :termAttemptAuthorized, :tBusy, :tNoAnswer, :tAnswer
camel_trigger_detection_point: :termAttemptAuthorized,

Chave de Serviço​

A camel_service_key identifica qual serviço CAMEL deve ser invocado no gsmSCF (Função de Controle de Serviço). Este é um identificador numérico configurado em sua rede:

Chave de ServiçoCaso de Uso Típico
11_110Controle de chamada pré-paga (padrão)
100Serviço pré-pago de origem
200Encaminhamento de chamadas com lógica personalizada
300Rede Privada Virtual (VPN)
PersonalizadoServiços específicos do operador

Exemplo de Configuração:

# Para controle de chamada pré-paga
camel_service_key: 11_110,

# Para serviço VPN
camel_service_key: 300,

Ponto de Detecção de Gatilho​

O camel_trigger_detection_point especifica quando o serviço CAMEL deve ser acionado durante a configuração da chamada:

Ponto de DetecçãoDescriçãoQuando Acionado
:termAttemptAuthorizedTentativa de chamada autorizada (padrão)Antes que a chamada seja roteada para o assinante
:tBusyOcupado ao terminarQuando o assinante está ocupado
:tNoAnswerSem resposta ao terminarQuando o assinante não atende
:tAnswerResposta ao terminarQuando o assinante atende a chamada

Exemplos de Configuração:

Controle pré-pago padrão (acionar antes do roteamento):

camel_trigger_detection_point: :termAttemptAuthorized,

Tratamento personalizado de ocupado (acionar quando ocupado):

camel_trigger_detection_point: :tBusy,

Cobrança baseada em resposta (acionar na resposta):

camel_trigger_detection_point: :tAnswer,

Resposta SRI com CAMEL​

Quando configurado, as respostas SendRoutingInfo incluem informações de assinatura CAMEL:

GMSC → HLR: SendRoutingInfo (INÍCIO)
HLR → GMSC: Resposta SRI (FIM) com:
- IMSI
- Número VLR
- Estado do assinante
- Informações de roteamento CAMEL:
* Chave de Serviço: 11_110
* Endereço gsmSCF: <endereço configurado>
* Ponto de Detecção de Gatilho: termAttemptAuthorized
* Tratamento de Chamada Padrão: continueCall

GMSC contata gsmSCF no ponto de gatilho para executar o serviço CAMEL

Melhores Práticas​

  • Redes de Produção: Use chaves de serviço padronizadas acordadas com seu provedor gsmSCF
  • Teste: Use :termAttemptAuthorized para testes mais abrangentes
  • Serviços Pré-Pagos: A chave de serviço 11_110 é um padrão comum da indústria para chamadas pré-pagas terminadas
  • Tratamento de Fallback: defaultCallHandling: :continueCall garante que as chamadas prossigam se o gsmSCF não estiver acessível

Tratamento de Assinantes em Roaming​

Detecção de VLR Doméstico vs VLR em Roaming​

Quando o HLR recebe uma solicitação SendRoutingInfo (SRI), ele precisa determinar se o assinante está em um VLR "doméstico" (dentro da sua rede) ou em um VLR em roaming (visitando outra rede). O comportamento difere com base nessa determinação:

Para referência de parâmetros de configuração, consulte Prefixos VLR Domésticos na Referência de Configuração.

  • VLR Doméstico: Retornar resposta SRI padrão com informações de roteamento CAMEL
  • VLR em Roaming: Enviar uma solicitação Provide Roaming Number (PRN) para obter um MSRN, e então retorná-lo na resposta SRI

Configuração​

# Prefixos VLR Domésticos
# Lista de prefixos de endereços VLR que são considerados "rede" doméstica
# Se o endereço VLR do assinante começar com um desses prefixos, use a resposta SRI padrão
# Caso contrário, o assinante está em roaming e precisamos enviar PRN para obter MSRN
home_vlr_prefixes: ["555123"],

Exemplo de Configuração:

# Operador de rede doméstica única
home_vlr_prefixes: ["555123"],

# Múltiplos operadores de rede (por exemplo, diferentes regiões ou subsidiárias)
home_vlr_prefixes: ["555123", "555124", "555125"],

Como Funciona​

1. Fluxo de Assinante Doméstico (Padrão)​

Quando o endereço VLR do assinante começa com um prefixo doméstico configurado:

GMSC → HLR: SendRoutingInfo (MSISDN: "1234567890")
HLR consulta a API de backend para dados do assinante
HLR verifica o endereço VLR: "5551234567"
HLR determina: VLR começa com "555123" → Rede doméstica
HLR → GMSC: Resposta SRI com informações de roteamento CAMEL:
- IMSI
- Número VLR: "5551234567"
- Endereço gsmSCF (MSC): "5551234501"
- Chave de serviço CAMEL: 11_110
- Ponto de detecção de gatilho: termAttemptAuthorized

2. Fluxo de Assinante em Roaming (PRN Requerido)​

Quando o endereço VLR do assinante NÃO corresponde a nenhum prefixo doméstico:

GMSC → HLR: SendRoutingInfo (MSISDN: "1234567890")
HLR consulta a API de backend para dados do assinante
HLR verifica o endereço VLR: "49170123456"
HLR determina: VLR não começa com "555123" → Roaming
HLR → MSC: ProvideRoamingNumber (PRN):
- MSISDN: "1234567890"
- IMSI: "999999876543210"
- Número MSC: "49170123456"
- Endereço GMSC: "5551234501"
MSC → HLR: Resposta PRN com MSRN: "49170999888777"
HLR → GMSC: Resposta SRI com informações de roteamento:
- IMSI
- Número VLR: "49170123456"
- Número em Roaming (MSRN): "49170999888777"

Diferenças na Estrutura de Resposta​

Resposta SRI de Assinante Doméstico​

%{
imsi: "999999876543210",
extendedRoutingInfo: {
:camelRoutingInfo, %{
gmscCamelSubscriptionInfo: %{
"t-CSI": %{
serviceKey: 11_110,
"gsmSCF-Address": "5551234501",
defaultCallHandling: :continueCall,
"t-BcsmTriggerDetectionPoint": :termAttemptAuthorized
}
}
}
},
subscriberInfo: %{
locationInformation: %{"vlr-number": "5551234567"},
subscriberState: {:notProvidedFromVLR, :NULL}
}
}

Resposta SRI de Assinante em Roaming​

%{
imsi: "999999876543210",
extendedRoutingInfo: {
:routingInfo, %{
roamingNumber: "49170999888777" # MSRN do PRN
}
},
subscriberInfo: %{
locationInformation: %{"vlr-number": "49170123456"},
subscriberState: {:notProvidedFromVLR, :NULL}
}
}

Operação Provide Roaming Number (PRN)​

Estrutura da Solicitação PRN​

A solicitação PRN enviada ao MSC/VLR contém:

CampoFonteDescrição
MSISDNSolicitação SRINúmero de telefone do assinante
IMSIAPI HLRIMSI do assinante
Número MSCAPI HLRMSC atendendo o assinante em roaming (serving_msc)
Endereço GMSCSolicitação SRIGMSC que faz a solicitação SRI original
Número de Referência da ChamadaEstáticoIdentificador de referência da chamada
Fases CAMEL SuportadasEstáticoFases CAMEL suportadas pelo GMSC

Tratamento da Resposta PRN​

O HLR espera uma resposta PRN contendo:

  • MSRN (Número de Roaming da Estação Móvel): Um número temporário alocado pela rede visitada para roteamento da chamada

Tratamento de Erros:

  • Se o PRN expirar → Retorna erro 27 (Assinante Ausente) na resposta SRI
  • Se o PRN falhar → Retorna erro 27 (Assinante Ausente) na resposta SRI
  • Se o MSRN não puder ser extraído → Retorna erro 27 (Assinante Ausente) na resposta SRI

Exemplos de Configuração​

Operador de Rede Doméstica Única​

# Todos os endereços VLR que começam com "555123" são considerados domésticos
home_vlr_prefixes: ["555123"],
  • VLR 5551234567 → Doméstico (resposta CAMEL)
  • VLR 5551235001 → Doméstico (resposta CAMEL)
  • VLR 49170123456 → Roaming (PRN + resposta MSRN)

Operador Multi-Região​

# Múltiplas redes domésticas em diferentes regiões
home_vlr_prefixes: ["555123", "555124", "555125"],
  • VLR 5551234567 → Doméstico (região 1)
  • VLR 5552341234 → Doméstico (região 2)
  • VLR 5553411111 → Doméstico (região 3)
  • VLR 44201234567 → Roaming (internacional)

Configuração de Teste​

Para testar a funcionalidade PRN, defina uma lista vazia para tratar todos os VLRs como roaming:

# Todos os VLRs são tratados como roaming (para testar o fluxo PRN)
home_vlr_prefixes: [],

Melhores Práticas​

  • Seleção de Prefixo: Use o prefixo único mais curto que identifique os VLRs da sua rede (por exemplo, código do país + código da rede)
  • Múltiplos Prefixos: Inclua todos os prefixos de VLR na sua rede, incluindo diferentes regiões e subsidiárias
  • Acordos de Roaming: Certifique-se de que o PRN seja devidamente suportado pelas redes parceiras em roaming
  • Teste: Teste minuciosamente os cenários domésticos e de roaming antes da implantação em produção
  • Monitoramento: Monitore as taxas de tempo limite do PRN para identificar problemas de conectividade com parceiros em roaming

Solução de Problemas​

Sintoma: Todos os assinantes tratados como roaming

  • Causa: home_vlr_prefixes não configurado ou prefixos não correspondem aos endereços VLR
  • Solução: Verifique os endereços VLR em seu banco de dados e atualize os prefixos conforme necessário

Sintoma: Solicitações PRN expirando

  • Causa: Problemas de conectividade de rede com o MSC/VLR parceiro em roaming
  • Solução: Verifique o roteamento M3UA/SCCP para endereços MSC remotos

Sintoma: MSRN inválido na resposta SRI

  • Causa: Formato da resposta PRN do parceiro em roaming não corresponde à estrutura esperada
  • Solução: Revise os logs de resposta PRN e ajuste extract_msrn_from_prn/1 se necessário

Operações HLR​

Operações MAP Suportadas​

O OmniSS7 despacha operações MAP de entrada por opcode (independente da fase TCAP). As seguintes operações de entrada são tratadas:

OpcodeOperaçãoPropósito
2updateLocationRegistrar localização VLR (aciona sequência ISD + alertServiceCenter opcional)
23updateGprsLocationRegistrar localização SGSN (comutado por pacote)
3cancelLocationDesregistrar do antigo VLR
7insertSubscriberDataReceber perfil de assinante (por exemplo, ao atuar como lado VLR)
22sendRoutingInfo (SRI)Fornecer MSRN/roteamento CAMEL para chamadas (doméstico vs roaming)
45sendRoutingInfoForSM (SRI-for-SM)Fornecer IMSI + GT do SMSC para roteamento de SMS
44MT-Forward-SMEntrega de SMS terminada para celular
46MO-Forward-SMRecepção de SMS originada pelo celular
47reportSM-DeliveryStatusRelatório de status de entrega de SMS-GMSC
64alertServiceCenterAlerta de assinante acessível para SMSc
66readyForSMMSC/SGSN sinaliza que o assinante está pronto para SMS
56sendAuthenticationInfoGerar vetores de autenticação
57restoreDataRestauração de dados de assinante no VLR
67purgeMSPurgar um registro de assinante no HLR
59processUnstructuredSS-RequestUSSD (tratado via gateway USSD quando habilitado)
71anyTimeInterrogation (ATI)Interrogação de localização/estado do assinante
10registerSSRegistro de serviço suplementar (por exemplo, Encaminhamento de Chamadas Incondicional)

OpCodes não tratados são respondidos com um erro facilityNotSupported (21).

Mapeamento de Campos de Resposta​

Esta seção detalha de onde cada campo nas respostas HLR vem.

Resposta SendRoutingInfo (SRI)​

Propósito: Fornece informações de roteamento para chamadas recebidas a um assinante.

O HLR fornece dois tipos diferentes de resposta com base em se o assinante está em um VLR doméstico ou em roaming:

Resposta de Assinante Doméstico (Roteamento CAMEL)​

Usado quando o endereço VLR do assinante começa com um valor configurado em home_vlr_prefixes.

Estrutura da Resposta:

CampoFonteDescriçãoExemplo
IMSIAPI OmniHSSIMSI do assinante do banco de dados OmniHSS"999999876543210"
Número VLRAPI OmniHSSVLR atual atendendo o assinante (circuit_session.assigned_vlr)"5551234567"
Estado do AssinanteEstáticoSempre notProvidedFromVLR:notProvidedFromVLR
extendedRoutingInfo-Tipo: camelRoutingInfo-
Endereço gsmSCFAPI OmniHSSMSC atendendo o assinante (circuit_session.assigned_msc)"5551234501"
Chave de Serviçoconfig.exsIdentificador de serviço CAMEL (camel_service_key)11_110
Ponto de Detecção de Gatilhoconfig.exsQuando acionar CAMEL (camel_trigger_detection_point):termAttemptAuthorized
Tratamento de Capacidade CAMELEstáticoNível de suporte à fase CAMEL3
Tratamento de Chamada PadrãoEstáticoFallback se gsmSCF inatingível:continueCall
Resposta de Assinante em Roaming (Roteamento MSRN)​

Usado quando o endereço VLR do assinante NÃO corresponde a nenhum valor configurado em home_vlr_prefixes.

Estrutura da Resposta:

CampoFonteDescriçãoExemplo
IMSIAPI OmniHSSIMSI do assinante do banco de dados OmniHSS"999999876543210"
Número VLRAPI OmniHSSVLR atual atendendo o assinante (circuit_session.assigned_vlr)"49170123456"
Estado do AssinanteEstáticoSempre notProvidedFromVLR:notProvidedFromVLR
extendedRoutingInfo-Tipo: routingInfo-
Número em Roaming (MSRN)Resposta PRNMSRN obtido da solicitação ProvideRoamingNumber"49170999888777"

Lógica de Decisão de Roteamento:

1. O OmniSS7 recebe a solicitação SendRoutingInfo
2. O OmniSS7 consulta os dados do assinante da API OmniHSS
3. O OmniSS7 verifica o endereço VLR em relação aos home_vlr_prefixes:

Se o VLR começar com o prefixo doméstico:
→ Retornar informações de roteamento CAMEL (fluxo de assinante doméstico)

Se o VLR NÃO corresponder a nenhum prefixo doméstico:
→ Enviar ProvideRoamingNumber (PRN) para o MSC
→ Extrair MSRN da resposta PRN
→ Retornar informações de roteamento com MSRN (fluxo de assinante em roaming)

Fluxo de Dados:

  • O OmniSS7 consulta o OmniHSS para informações do assinante
  • O OmniHSS retorna IMSI, localização atual VLR/MSC e estado do assinante
  • O OmniSS7 usa esses dados para construir a resposta MAP

Requisitos de Configuração:

# Em config/config.exs
home_vlr_prefixes: ["555123"], # Lista de prefixos VLR domésticos

Respostas de Erro:

  • Se serving_vlr e serving_msc forem null: Retorna erro 27 (Assinante Ausente)
  • Se o assinante não for encontrado: Retorna erro 1 (Assinante Desconhecido)
  • Se a solicitação PRN expirar (caso de roaming): Retorna erro 27 (Assinante Ausente)
  • Se a resposta PRN for inválida (caso de roaming): Retorna erro 27 (Assinante Ausente)

Resposta UpdateLocation com InsertSubscriberData​

Propósito: Registra o assinante no novo VLR e provisiona os dados do assinante.

Resposta UpdateLocation FIM​
CampoFonteDescriçãoExemplo
Número HLRconfig.exsTítulo Global deste HLR (hlr_service_center_gt_address)"5551234568"
Tipo de Mensagem TCAPEstáticoResposta final após todos os ISDsFIM
InsertSubscriberData #1 (Dados Básicos do Assinante)​
CampoFonteDescriçãoExemplo
IMSISolicitaçãoDa solicitação UpdateLocation"999999876543210"
MSISDNAPI OmniHSSNúmero de telefone do assinante do OmniHSS"555123456"
CategoriaEstáticoCategoria do assinante"\n" (0x0A)
Status do AssinanteEstáticoStatus do serviço:serviceGranted
Lista de Serviços de BearerEstáticoServiços de bearer suportados[<<31>>]
Lista de TeleserviçosEstáticoTeleserviços suportados[<<17>>, "!", "\""]
Modo de Acesso à Redeconfig.exsAcesso por pacote/circuito (isd_network_access_mode):packetAndCircuit
InsertSubscriberData #2 (Serviços Suplementares) - Opcional​
CampoFonteDescriçãoControlado Por
SS ProvisionadoEstáticoDados de serviços suplementaresisd_send_ss_data: true
Encaminhamento de ChamadasEstáticoConfigurações de encaminhamento (incondicional, ocupado, sem resposta, não acessível)Config habilitado
Espera de ChamadasEstáticoStatus do serviço de espera de chamadasConfig habilitado
Serviço de Múltiplos ParticipantesEstáticoSuporte a chamadas de conferênciaConfig habilitado

ISD #2 inclui:

  • Encaminhamento de chamadas incondicional (código SS 21)
  • Encaminhamento de chamadas em ocupado (código SS 41)
  • Encaminhamento de chamadas sem resposta (código SS 42)
  • Encaminhamento de chamadas não acessíveis (código SS 62)
  • Espera de chamadas (código SS 43)
  • Serviço de múltiplos participantes (código SS 51)
  • Serviços CLIP/CLIR
InsertSubscriberData #3 (Bloqueio de Chamadas) - Opcional​
CampoFonteDescriçãoControlado Por
Informações de Bloqueio de ChamadasEstáticoConfigurações de bloqueio de chamadasisd_send_call_barring: true
BAOCEstáticoBloqueio de Todas as Chamadas de Saída (código SS 146)Config habilitado
BOICEstáticoBloqueio de Chamadas Internacionais de Saída (código SS 147)Config habilitado
Dados de Restrição de AcessoEstáticoRestrições de acesso à redeConfig habilitado

Controle da Sequência ISD:

  • ISD #1: Sempre enviado - Contém dados essenciais do assinante
  • ISD #2: Enviado apenas se isd_send_ss_data: true em config/config.exs
  • ISD #3: Enviado apenas se isd_send_call_barring: true em config/config.exs

Resposta SendRoutingInfoForSM (SRI-for-SM)​

Propósito: Fornece informações de roteamento MSC/SMSC para entrega de SMS. Quando um SMSc precisa entregar um SMS a um assinante, ele envia uma solicitação SRI-for-SM ao HLR para determinar onde roteá-lo.

O HLR responde em um dos dois modos, decidido pelo GT da parte chamadora SCCP da solicitação:

1. Roteamento doméstico (padrão: cada originador externo). Este modo retorna um IMSI sintético mais o próprio GT do IP-SM-GW como o número do nó da rede. O HLR nunca expõe IMSIs reais e nós atendentes a operadores externos. O MT-ForwardSM retorna ao IP-SM-GW, que então lida com a entrega. Este é o comportamento correto para tráfego de interconexão e roaming.

CampoFonteDescriçãoComo GeradoExemplo
IMSICalculadoIMSI sintético derivado do MSISDNPLMN_PREFIX + zero_padded_MSISDN"001001555123456"
Número do Nó da Redeconfig.exsEndereço GT do SMSC para roteamento de SMSsmsc_service_center_gt_address"5551234567"

2. Roteamento direto na rede (apenas quando a solicitação vem de um de nossos próprios nós SMSc / IP-SM-GW). Quando o GT chamador corresponde à lista configurada de home_smsc_gts, o HLR procura o assinante em seu backend e retorna o IMSI real e o MSC real atendente como o número do nó da rede, para que nosso SMSc possa enviar o MT-ForwardSM diretamente ao MSC. Se nenhum MSC atendente estiver disponível para esse assinante, ele recorre ao roteamento doméstico.

CampoFonteDescriçãoExemplo
IMSIBackend HLRIMSI real do assinante"505570123456789"
Número do Nó da RedeBackend HLRMSC real serving_msc da última atualização de localização"5559876543"

Parâmetros de Configuração (de config/config.exs):

# Endereço do Centro de Serviço (retornado nas respostas SRI-for-SM roteadas para casa)
# Isso informa ao SMSc solicitante onde enviar mensagens MT-ForwardSM
smsc_service_center_gt_address: "5551234567", # Obrigatório

# Roteamento direto na rede: GTs SCCP de nossos próprios nós SMSc / IP-SM-GW.
# Um SRI-for-SM de qualquer um desses obtém o MSC atendente REAL em vez de roteamento doméstico.
# Todos os outros são roteados para casa. Deixe vazio ([]) para roteá-los todos para casa.
home_smsc_gts: ["5551234567"], # Opcional (padrão [])

# Configuração de Mapeamento MSISDN ↔ IMSI
# Prefixo PLMN: MCC (001 = Rede de Teste) + MNC (01 = Operador de Teste)
hlr_imsi_plmn_prefix: "001001", # Único parâmetro de configuração necessário!

Nota: O roteamento direto na rede só funciona se o HLR realmente tiver o serving_msc do assinante. Ou seja, o MSC atendente realizou um MAP updateLocation para este HLR. Se o MSC se registrar por outro mecanismo (por exemplo, GSUP para um HLR separado), o backend não tem a localização e a consulta é roteada para casa.


Mapeamento MSISDN ↔ IMSI​

Parâmetros de Configuração:

Esses parâmetros controlam como o OmniSS7 gera IMSIs sintéticos a partir de MSISDNs para respostas SRI-for-SM:

  • hlr_imsi_plmn_prefix: O prefixo MCC+MNC a ser usado ao construir IMSIs sintéticos (por exemplo, "50557" para MCC=505, MNC=57)
  • hlr_msisdn_country_code: Código do país a ser precedido ao fazer o mapeamento reverso IMSI→MSISDN (por exemplo, "61" para Austrália, "1" para EUA/Canadá)
  • hlr_msisdn_nsn_offset: Posição do caractere onde o Número Nacional do Assinante (NSN) começa dentro do MSISDN (normalmente 0 se o MSISDN não incluir o código do país, ou o comprimento do código do país se incluir)
  • hlr_msisdn_nsn_length: Número de dígitos a serem extraídos do MSISDN como NSN

Para detalhes adicionais de configuração, consulte MSISDN ↔ IMSI Mapping na Referência de Configuração.

Por que o Mapeamento MSISDN para IMSI é Necessário?

O protocolo MAP para SendRoutingInfoForSM (SRI-for-SM) requer que o HLR retorne um IMSI (Identidade Internacional do Assinante Móvel) em sua resposta. No entanto, o SMSc solicitante só conhece o MSISDN do assinante (número de telefone).

Em uma rede tradicional:

  • O SMSc envia SRI-for-SM com o MSISDN de destino (por exemplo, "5551234567")
  • O HLR deve procurar o assinante em seu banco de dados para encontrar seu IMSI
  • O HLR retorna o IMSI na resposta SRI-for-SM
  • O SMSc então usa esse IMSI ao enviar MT-ForwardSM para o MSC/VLR

Abordagem do OmniSS7 - IMSIs Sintéticos:

Em vez de manter um banco de dados completo de assinantes com mapeamentos MSISDN-para-IMSI, o OmniSS7 usa um esquema de codificação simples para calcular IMSIs sintéticos diretamente do MSISDN. Essa abordagem oferece dois benefícios principais:

  1. Privacidade: IMSIs reais de assinantes armazenados no banco de dados HLR nunca são expostos em respostas SRI-for-SM enviadas pela rede SS7
  2. Simplicidade: Não há necessidade de consultar o banco de dados HLR para buscas de IMSI durante operações SRI-for-SM - o IMSI é calculado em tempo real a partir do MSISDN

Como Funciona:

MSISDNs são codificados diretamente na parte do assinante do IMSI (os dígitos após MCC+MNC):

IMSI = PLMN_PREFIX + zero_padded_MSISDN

Onde:

  • PLMN_PREFIX: MCC + MNC (por exemplo, "001001" para Rede de Teste)
  • MSISDN: Todos os dígitos numéricos do número de telefone
  • Zero Padding: Preenchido à esquerda com zeros para preencher o IMSI exatamente em 15 dígitos

Exemplo Passo a Passo:

# Configuração
plmn_prefix = "001001" # MCC 001 + MNC 01

# Entrada: MSISDN da solicitação SRI-for-SM (decodificado TBCD)
msisdn = "555123456" # 9 dígitos

# Passo 1: Calcular espaço disponível para o número do assinante
subscriber_digits = 15 - String.length("001001") # = 9 dígitos

# Passo 2: Preencher MSISDN à esquerda com zeros para preencher a parte do assinante
padded_msisdn = String.pad_leading("555123456", 9, "0") # = "555123456" (nenhum preenchimento necessário)

# Passo 3: Concatenar prefixo PLMN + MSISDN preenchido
imsi = "001001" <> "555123456" # = "001001555123456" (exatamente 15 dígitos)

Exemplos Completos:

MSISDN de EntradaPrefixo PLMNDígitos do Assinante DisponíveisMSISDN PreenchidoIMSI FinalNotas
"555123456""001001" (6)9"555123456""001001555123456"Ajuste exato, sem preenchimento
"99""001001" (6)9"000000099""001001000000099"Preenchido à esquerda com zeros
"999999999""001001" (6)9"999999999""001001999999999"Ajuste exato
"91123456789""001001" (6)9"555123456""001001555123456"Muito longo, mantidos os 9 dígitos mais à direita

Tratamento de Casos Limites:

  • MSISDNs Curtos: Preenchidos à esquerda com zeros (por exemplo, "99" → "000000099")
  • MSISDNs Longos: Mantidos os dígitos mais à direita, os dígitos mais à esquerda são truncados (por exemplo, "91123456789" → "555123456")
  • Comprimento do IMSI: Sempre exatamente 15 dígitos

Tratamento de Mapeamento Reverso (IMSI → MSISDN):

O SMSc pode reverter esse mapeamento para converter IMSIs de volta em MSISDNs:

# Entrada: IMSI da resposta SRI-for-SM
imsi = "001001555123456"

# Passo 1: Remover prefixo PLMN
plmn_prefix = "001001"
subscriber_portion = String.slice(imsi, 6, 9) # = "555123456"

# Passo 2: Remover zeros à esquerda para obter o MSISDN real
msisdn = String.replace_leading(subscriber_portion, "0", "") # = "555123456"

Exemplos de Mapeamento Reverso:

IMSI de EntradaPrefixo PLMNPorção do AssinanteRemover Zeros à EsquerdaMSISDN Final
"001001555123456""001001""555123456""555123456""555123456"
"001001000000099""001001""000000099""99""99"
"001001999999999""001001""999999999""999999999""999999999"

Propriedades deste Mapeamento:

  • ✅ Determinístico: O mesmo MSISDN sempre produz o mesmo IMSI
  • ✅ Reversível: Pode converter de IMSI para MSISDN
  • ✅ Configuração Mínima: Apenas requer hlr_imsi_plmn_prefix
  • ✅ Privacidade: IMSIs reais nunca expostas
  • ✅ Sem Busca no Banco de Dados: Cálculo rápido, nenhuma chamada de API necessária
  • ✅ Sempre 15 Dígitos: IMSI sempre exatamente 15 dígitos

Tratamento de Entrada MSISDN:

Quando o HLR recebe uma solicitação SRI-for-SM, o MSISDN passa por decodificação TBCD:

  1. Decodificação TBCD: Converter TBCD binário em string (pode incluir prefixo TON/NPI como "91")
  2. Extrair Dígitos: Manter apenas dígitos numéricos, remover quaisquer caracteres não numéricos
  3. Normalizar: Se mais longo que o espaço disponível, pegar os dígitos mais à direita; se mais curto, preencher à esquerda com zeros
  4. Codificar: Concatenar prefixo PLMN + MSISDN normalizado

Considerações de Segurança:

Os IMSIs sintéticos retornados nas respostas SRI-for-SM são puramente para fins de roteamento. Eles NÃO são os IMSIs reais armazenados no banco de dados de assinantes do HLR. Isso fornece uma camada adicional de proteção à privacidade, uma vez que IMSIs reais de assinantes são expostas apenas quando absolutamente necessário (por exemplo, durante operações UpdateLocation ou SendAuthenticationInfo que requerem vetores de autenticação reais).

Fluxo de Resposta:

1. SMSc → HLR: Solicitação SRI-for-SM
- MSISDN (TBCD): "91123456789" (inclui TON/NPI)

2. Processamento do HLR:
- Decodificação TBCD: "91123456789"
- Extrair dígitos: "91123456789" (11 dígitos)
- Ajustar para 9 dígitos: "555123456" (9 mais à direita)
- Adicionar PLMN: "001001" + "555123456" = "001001555123456"
- Obter GT do SMSC da configuração: "5551234567"

3. HLR → SMSc: Resposta SRI-for-SM
- IMSI: "001001555123456" (sintético, sempre 15 dígitos)
- Número do Nó da Rede: "5551234567" (onde enviar MT-ForwardSM)

4. SMSc envia MT-ForwardSM para "5551234567" com IMSI "001001555123456"

Configuração:

Os seguintes parâmetros são usados em config/config.exs:

# Prefixo PLMN: MCC (001 = Rede de Teste) + MNC (01 = Operador de Teste)
hlr_imsi_plmn_prefix: "001001",

# Extração de NSN (se MSISDNs incluírem código do país)
hlr_msisdn_country_code: "1", # Usado para mapeamento reverso (IMSI→MSISDN)
hlr_msisdn_nsn_offset: 1, # Ignorar 1 dígito do código do país
hlr_msisdn_nsn_length: 10 # Extrair 10 dígitos NSN

Configuração de Extração NSN:

Se seus MSISDNs incluírem o código do país (por exemplo, "99988000088" em vez de apenas "88000088"), você deve configurar a extração do NSN:

  • hlr_msisdn_nsn_offset: Posição onde o NSN começa (normalmente o comprimento do seu código do país)
  • hlr_msisdn_nsn_length: Número de dígitos no NSN

Exemplos:

ExemploCódigo do PaísExemplo MSISDNnsn_offsetnsn_lengthNSN Extraído
CC de 1 dígito"9""95551234567"110"5551234567"
CC de 2 dígitos"99""99412345678"29"412345678"
CC de 3 dígitos"999""99988000088"38"88000088"

Como Funciona:

  1. MSISDN → IMSI: Extrair NSN do MSISDN, preencher com zeros à esquerda, concatenar com prefixo PLMN

    MSISDN: "99988000088"
    NSN: String.slice("99988000088", 3, 8) = "88000088"
    MSISDN Preenchido: "088000088" (9 dígitos)
    IMSI: "547050" + "088000088" = "547050088000088"
  2. IMSI → MSISDN: Remover prefixo PLMN, remover zeros à esquerda, preceder com código do país

    IMSI: "547050088000088"
    Porção do Assinante: "088000088"
    Remover zeros: "88000088"
    MSISDN: "+999" + "88000088" = "+99988000088"

Requisitos da API: Nenhum - SRI-for-SM usa valores calculados e configuração apenas. Nenhuma chamada de backend API é necessária.​

Resumo da Fonte dos Campos​

Tipo de FonteDescriçãoExemplos
API OmniHSSDados dinâmicos do banco de dados de assinantes OmniHSSIMSI, MSISDN, VLR/MSC atendendo a partir de circuit_session
config.exsParâmetros de configuração do OmniSS7smsc_service_center_gt_address, camel_service_key, isd_network_access_mode
EstáticoValores codificados na respostaStatus do assinante, serviços de bearer, códigos SS
Solicitação