Pular para o conteúdo principal

Guia de Configuração do HLR

← Voltar para a Documentação Principal

Este guia fornece a 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 do OmniHSS

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

  • OmniSS7 (Frontend HLR): Gerencia 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 OmniHSS?

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

  • Suporte a Múltiplos IMSIs: 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 (comutação de circuito) e PS (comutação de pacote)
  • Provisionamento Avançado: Perfis de serviço personalizáveis, serviços suplementares e dados de assinatura CAMEL
  • Design API-First: API HTTP RESTful 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 por meio de 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 a Múltiplos IMSIs

O OmniHSS suporta nativamente configurações de 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-Profile: Vários 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: Vários 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 de IMSI para assinante e garante a autenticação e provisionamento adequados para cada IMSI.

Assinantes Ativos

Índice

  1. Integração do OmniHSS
  2. Suporte a Múltiplos IMSIs
  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 por meio 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 do HLR sejam habilitados e os recursos do SMSc sejam desabilitados, e adicione a configuração específica do HLR:

  1. Abra config/config.exs
  2. Defina as flags de modo em config :omniss7:
    • map_client_enabled: true — necessário para enviar/receber operações MAP
    • hlr_mode_enabled: true — habilita o tratamento específico do HLR
    • smsc_mode_enabled: false — desabilita 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 mudanças tenham efeito

Nota: config/runtime.exs é um stub mínimo usado apenas para testes automatizados — 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 de 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 do HLR
map_client_enabled: true,
hlr_mode_enabled: true,
smsc_mode_enabled: false,

# Configuração da API Backend do OmniHSS
hlr_api_base_url: "https://10.180.2.140:8443",

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

# Configuração de Mapeamento MSISDN ↔ IMSI
# Veja: seção 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 é [] (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 OmniHSS"https://10.179.3.219: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 de 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_offsetInteiro0Offset no MSISDN para extração de NSN (veja MSISDN ↔ IMSI Mapping)0
hlr_msisdn_nsn_lengthInteiro9Comprimento do Número de Assinante Nacional 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 é obrigató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
  • Timeout de Solicitação da API: Todas as solicitações da API do OmniHSS têm um timeout fixo de 5 segundos
  • Timeout de Solicitação MAP: Todas as solicitações MAP (SRI, UpdateLocation, SendAuthInfo, etc.) têm um timeout fixo de 10 segundos
  • Timeout de ISD: Cada mensagem InsertSubscriberData (ISD) em uma sequência UpdateLocation tem um timeout 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 mudanças 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 à interface Swagger

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 para o 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 localização da sessão de circuito quando assinantes realizam UpdateLocation
  • Verificar status de assinante e 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 para o 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 preenchido)

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 de 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 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 de 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 rastrear 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 Subscriber Tracker do SMSc para monitoramento

Testes

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

  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)
    • GT do SMSc padrão é a primeira entrada em hlr_smsc_alert_gts
    • 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 de 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 de 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 portadora
    • 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 chamada
    • Manter chamada
    • Serviço de múltiplos participantes
    • Status e recursos de serviços suplementares
  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 comutação de pacote (GPRS/LTE) quanto comutação de circuito (voz)Padrão - Assinantes com serviço completo
:packetOnlyApenas comutação de pacote (dados/LTE)Cartões SIM apenas para dados, dispositivos IoT
:circuitOnlyApenas comutação de circuito (voz/SMS)Dispositivos legados, planos apenas de voz

Controlando Mensagens ISD

Você pode controlar quais mensagens ISD são enviadas com base em suas necessidades de 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 básico + 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 estiverem definidos como false, essas mensagens ISD são puladas, e o FIM do UpdateLocation é 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
  • Triagem 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 da chamada ser 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 para 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

O GMSC contata o 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
  • Tratamento de Fallback: defaultCallHandling: :continueCall garante que as chamadas prossigam se o gsmSCF estiver inacessí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 doméstica (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 Necessário)

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 Roteamento 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 começando 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 adequadamente suportado pelas redes parceiras de 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 de 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 de 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 de 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 pelo 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 (comutação de pacote)
3cancelLocationDesregistrar do antigo VLR
7insertSubscriberDataReceber perfil de assinante (por exemplo, ao agir 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 terminados para o móvel
46MO-Forward-SMRecepção de SMS originados pelo móvel
47reportSM-DeliveryStatusRelatório de status de entrega de SMS-GMSC
64alertServiceCenterAlerta de acessibilidade do assinante para o SMSc
66readyForSMMSC/SGSN sinaliza que o assinante está pronto para SMS
56sendAuthenticationInfoGerar vetores de autenticação
57restoreDataRestauração de dados de assinante no VLR
67purgeMSPurge um registro de assinante no HLR
59processUnstructuredSS-RequestUSSD (tratado via gateway USSD quando habilitado)
71anyTimeInterrogation (ATI)Interrogatório 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 para 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 inacessí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 na 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 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 em um 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 PortadoraEstáticoServiços de portadora suportados[<&lt;31>>]
Lista de TeleserviçosEstáticoTeleserviços suportados[<&lt;17>>, "!", "\""]
Modo de Acesso à Redeconfig.exsAcesso de 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
Esperando 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.

Estrutura da Resposta:

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"

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

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

# 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!

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 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 de Assinante Nacional (NSN) começa dentro do MSISDN (normalmente 0 se o MSISDN não incluir o código do país, ou 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 mais detalhes de configuração, consulte Mapeamento MSISDN ↔ IMSI na Referência de Configuração.

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

O protocolo MAP para SendRoutingInfoForSM (SRI-for-SM) exige que o HLR retorne um IMSI (Identidade Internacional de 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 a partir 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 nas 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 com 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 com zeros à esquerda 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, mantém os 9 dígitos mais à direita

Tratamento de Casos Limites:

  • MSISDNs Curtos: Preenchidos à esquerda com zeros (por exemplo, "99""000000099")
  • MSISDNs Longos: Os dígitos mais à direita são mantidos, 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
  • Preservação de Privacidade: IMSIs reais nunca expostas
  • Sem Busca no Banco de Dados: Cálculo rápido, sem chamadas de API necessárias
  • Sempre 15 Dígitos: IMSI sempre exatamente com 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 HLR. Isso fornece uma camada adicional de proteção à privacidade, já 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 os 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 de NSN:

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

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

Exemplos:

ExemploCódigo do PaísMSISDN Exemplonsn_offsetnsn_lengthNSN Extraído
Código do país de 1 dígito"9""95551234567"110"5551234567"
Código do país de 2 dígitos"99""99412345678"29"412345678"
Código do país 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"
    NSN preenchido: "088000088" (9 dígitos)
    IMSI: "547050" + "088000088" = "547050088000088"
  2. IMSI → MSISDN: Remover prefixo PLMN, remover zeros à esquerda, preceder 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 API de backend é 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 geradora de respostaStatus do assinante, serviços de portadora, códigos SS
SolicitaçãoCampos extraídos da solicitação MAP de entradaIMSI da UpdateLocation, MSISDN da SRI
CalculadoValores derivados usando lógicaIMSI sintético em SRI-for-SM (hlr_imsi_prefix + NSN)

Dependências de Configuração

Obrigatório em config/config.exs:

  • hlr_service_center_gt_address - Usado nas respostas UpdateLocation
  • smsc_service_center_gt_address - Usado nas respostas SRI-for-SM (onde as mensagens MT-ForwardSM devem ser roteadas)

Opcional em config/config.exs (com padrões):

  • camel_service_key - Padrão: 11_110
  • camel_trigger_detection_point - Padrão: :termAttemptAuthorized
  • isd_network_access_mode - Padrão: :packetAndCircuit
  • isd_send_ss_data - Padrão: true
  • isd_send_call_barring - Padrão: true
  • hlr_imsi_plmn_prefix - Padrão: "001001" (prefixo PLMN para mapeamento MSISDN↔IMSI)

Obrigatório do OmniHSS:

O OmniHSS deve fornecer endpoints da API REST para:

  • Consulta de assinante por IMSI e MSISDN
  • Atualizações de localização da sessão de circuito (atribuição VLR/MSC)
  • Geração de vetores de autenticação
  • Consultas de status de assinante e perfil de serviço

Documentação Relacionada

Documentação do OmniSS7:

Documentação do OmniHSS: Para gerenciamento de assinantes, provisionamento, configuração de autenticação e operações administrativas, consulte a documentação do produto OmniHSS. O OmniHSS contém toda a lógica do banco de dados de assinantes, algoritmos de autenticação, regras de provisionamento de serviços e capacidades de gerenciamento Multi-IMSI.