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.

Índice
- Integração do OmniHSS
- Suporte a Múltiplos IMSIs
- O que é o Modo HLR?
- Habilitando o Modo HLR
- Banco de Dados de Assinantes
- Vetores de Autenticação
- Atualizações de Localização
- Integração CAMEL
- Tratamento de Assinantes em Roaming
- 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:
- Abra
config/config.exs - Defina as flags de modo em
config :omniss7:map_client_enabled: true— necessário para enviar/receber operações MAPhlr_mode_enabled: true— habilita o tratamento específico do HLRsmsc_mode_enabled: false— desabilita recursos do SMSc
- Adicione os parâmetros de configuração do HLR (endpoint da API, endereços GT, configurações ISD/CAMEL, conexão M3UA) mostrados abaixo
- Personalize os parâmetros para sua implantação
- 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 emconfig/config.exs(com substituições específicas de ambiente em arquivos comoconfig/test.exs). Implantações de produção fornecem seu próprioconfig/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
}

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âmetro | Tipo | Padrão | Descrição | Exemplo |
|---|---|---|---|---|
hlr_api_base_url | String | Obrigatório | Endpoint da API do OmniHSS | "https://10.179.3.219:8443" |
hlr_service_center_gt_address | String | Obrigatório | Endereço GT do HLR usado nas respostas UpdateLocation | "5551234568" |
smsc_service_center_gt_address | String | Obrigatório | Endereço GT do SMSC retornado nas respostas SRI-for-SM | "5551234567" |
hlr_smsc_alert_gts | Lista | [] | Lista de GTS do SMSc para enviar alertServiceCenter após UpdateLocation | ["15559876543", "15559876544"] |
hlr_alert_location_expiry_seconds | Inteiro | 172800 | Tempo de expiração de localização (segundos) quando o SMSc recebe alertServiceCenter | 86400 |
hlr_imsi_plmn_prefix | String | "50557" | Prefixo PLMN (MCC+MNC) para mapeamento MSISDN→IMSI (veja MSISDN ↔ IMSI Mapping) | "001001" |
hlr_msisdn_country_code | String | "61" | Prefixo do código do país para mapeamento reverso IMSI→MSISDN (veja MSISDN ↔ IMSI Mapping) | "1" |
hlr_msisdn_nsn_offset | Inteiro | 0 | Offset no MSISDN para extração de NSN (veja MSISDN ↔ IMSI Mapping) | 0 |
hlr_msisdn_nsn_length | Inteiro | 9 | Comprimento do Número de Assinante Nacional a ser extraído (veja MSISDN ↔ IMSI Mapping) | 10 |
isd_network_access_mode | Átomo | :packetAndCircuit | Modo de acesso à rede para InsertSubscriberData | :packetOnly |
isd_send_ss_data | Booleano | true | Enviar ISD #2 com dados de Serviços Suplementares | false |
isd_send_call_barring | Booleano | true | Enviar ISD #3 com dados de Bloqueio de Chamadas | false |
camel_service_key | Inteiro | 11_110 | Chave de serviço CAMEL para respostas SendRoutingInfo | 100 |
camel_trigger_detection_point | Átomo | :termAttemptAuthorized | Ponto de detecção de gatilho CAMEL | :tBusy |
home_vlr_prefixes | Lista | [] | Lista de prefixos de endereços VLR considerados "rede" doméstica (vazio = todos os VLRs tratados como roaming) | ["555123"] |
local_ip | Tupla | Obrigatório | Endereço IP do seu sistema HLR | {10, 179, 4, 12} |
local_port | Inteiro | 2905 | Porta SCTP local | 2905 |
remote_ip | Tupla | Obrigatório | Endereço IP do STP para conectividade SS7 | {10, 179, 4, 10} |
remote_port | Inteiro | 2905 | Porta SCTP remota | 2905 |
routing_context | Inteiro | 1 | ID do contexto de roteamento M3UA | 1 |
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_urlconfigurado - 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:
- O OmniSS7 extrai o IMSI da solicitação MAP
- O OmniSS7 chama a API do OmniHSS para gerar vetores de autenticação
- O OmniHSS recupera as credenciais Ki e OPc do assinante
- O OmniHSS gera o número solicitado de vetores (RAND, XRES, CK, IK, AUTN)
- 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:
- Extrair informações de localização da solicitação UpdateLocation (IMSI, novo GT VLR, novo GT MSC)
- Consultar o OmniHSS para verificar se o assinante existe e está habilitado
- Atualizar a sessão de circuito no OmniHSS com a nova localização VLR/MSC
- Enviar mensagens InsertSubscriberData (ISD) para provisionar o assinante no novo VLR
- Retornar a resposta UpdateLocation para o VLR (inclui GT HLR do
hlr_service_center_gt_address) - Enviar alertServiceCenter para os GTs do SMSc configurados (se
hlr_smsc_alert_gtsestiver 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:
- O HLR envia alertServiceCenter para cada GT do SMSc na lista
hlr_smsc_alert_gts - A mensagem inclui o MSISDN do assinante
- O HLR usa
hlr_service_center_gt_addresscomo o GT da parte chamadora - 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_agentpara 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:
- Navegue até a aba "Assinantes Ativos"
- Encontre a seção "Testar Centro de Serviço de Alerta"
- 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
- GT do SMSc padrão é a primeira entrada em
- 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:
-
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
-
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
-
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:
| Valor | Descrição | Caso de Uso |
|---|---|---|
:packetAndCircuit | Tanto comutação de pacote (GPRS/LTE) quanto comutação de circuito (voz) | Padrão - Assinantes com serviço completo |
:packetOnly | Apenas comutação de pacote (dados/LTE) | Cartões SIM apenas para dados, dispositivos IoT |
:circuitOnly | Apenas 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
:packetAndCircuite habilite todos os ISDs para máxima compatibilidade - IoT/M2M: Use
:packetOnlye 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_datase 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ço | Caso de Uso Típico |
|---|---|
11_110 | Controle de chamada pré-paga (padrão) |
100 | Serviço pré-pago de origem |
200 | Encaminhamento de chamadas com lógica personalizada |
300 | Rede Privada Virtual (VPN) |
| Personalizado | Serviç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ção | Descrição | Quando Acionado |
|---|---|---|
:termAttemptAuthorized | Tentativa de chamada autorizada (padrão) | Antes da chamada ser roteada para o assinante |
:tBusy | Ocupado ao terminar | Quando o assinante está ocupado |
:tNoAnswer | Sem resposta ao terminar | Quando o assinante não atende |
:tAnswer | Resposta ao terminar | Quando 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
:termAttemptAuthorizedpara 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: :continueCallgarante 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:
| Campo | Fonte | Descrição |
|---|---|---|
| MSISDN | Solicitação SRI | Número de telefone do assinante |
| IMSI | API HLR | IMSI do assinante |
| Número MSC | API HLR | MSC atendendo o assinante em roaming (serving_msc) |
| Endereço GMSC | Solicitação SRI | GMSC que faz a solicitação SRI original |
| Número de Referência da Chamada | Estático | Identificador de referência da chamada |
| Fases CAMEL Suportadas | Estático | Fases 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_prefixesnã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/1se 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:
| Opcode | Operação | Propósito |
|---|---|---|
| 2 | updateLocation | Registrar localização VLR (aciona sequência ISD + alertServiceCenter opcional) |
| 23 | updateGprsLocation | Registrar localização SGSN (comutação de pacote) |
| 3 | cancelLocation | Desregistrar do antigo VLR |
| 7 | insertSubscriberData | Receber perfil de assinante (por exemplo, ao agir como lado VLR) |
| 22 | sendRoutingInfo (SRI) | Fornecer MSRN/roteamento CAMEL para chamadas (doméstico vs roaming) |
| 45 | sendRoutingInfoForSM (SRI-for-SM) | Fornecer IMSI + GT do SMSC para roteamento de SMS |
| 44 | MT-Forward-SM | Entrega de SMS terminados para o móvel |
| 46 | MO-Forward-SM | Recepção de SMS originados pelo móvel |
| 47 | reportSM-DeliveryStatus | Relatório de status de entrega de SMS-GMSC |
| 64 | alertServiceCenter | Alerta de acessibilidade do assinante para o SMSc |
| 66 | readyForSM | MSC/SGSN sinaliza que o assinante está pronto para SMS |
| 56 | sendAuthenticationInfo | Gerar vetores de autenticação |
| 57 | restoreData | Restauração de dados de assinante no VLR |
| 67 | purgeMS | Purge um registro de assinante no HLR |
| 59 | processUnstructuredSS-Request | USSD (tratado via gateway USSD quando habilitado) |
| 71 | anyTimeInterrogation (ATI) | Interrogatório de localização/estado do assinante |
| 10 | registerSS | Registro 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:
| Campo | Fonte | Descrição | Exemplo |
|---|---|---|---|
| IMSI | API OmniHSS | IMSI do assinante do banco de dados OmniHSS | "999999876543210" |
| Número VLR | API OmniHSS | VLR atual atendendo o assinante (circuit_session.assigned_vlr) | "5551234567" |
| Estado do Assinante | Estático | Sempre notProvidedFromVLR | :notProvidedFromVLR |
| extendedRoutingInfo | - | Tipo: camelRoutingInfo | - |
| Endereço gsmSCF | API OmniHSS | MSC atendendo o assinante (circuit_session.assigned_msc) | "5551234501" |
| Chave de Serviço | config.exs | Identificador de serviço CAMEL (camel_service_key) | 11_110 |
| Ponto de Detecção de Gatilho | config.exs | Quando acionar CAMEL (camel_trigger_detection_point) | :termAttemptAuthorized |
| Tratamento de Capacidade CAMEL | Estático | Nível de suporte à fase CAMEL | 3 |
| Tratamento de Chamada Padrão | Estático | Fallback 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:
| Campo | Fonte | Descrição | Exemplo |
|---|---|---|---|
| IMSI | API OmniHSS | IMSI do assinante do banco de dados OmniHSS | "999999876543210" |
| Número VLR | API OmniHSS | VLR atual atendendo o assinante (circuit_session.assigned_vlr) | "49170123456" |
| Estado do Assinante | Estático | Sempre notProvidedFromVLR | :notProvidedFromVLR |
| extendedRoutingInfo | - | Tipo: routingInfo | - |
| Número em Roaming (MSRN) | Resposta PRN | MSRN 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_vlreserving_mscforemnull: 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
| Campo | Fonte | Descrição | Exemplo |
|---|---|---|---|
| Número HLR | config.exs | Título Global deste HLR (hlr_service_center_gt_address) | "5551234568" |
| Tipo de Mensagem TCAP | Estático | Resposta final após todos os ISDs | FIM |
InsertSubscriberData #1 (Dados Básicos do Assinante)
| Campo | Fonte | Descrição | Exemplo |
|---|---|---|---|
| IMSI | Solicitação | Da solicitação UpdateLocation | "999999876543210" |
| MSISDN | API OmniHSS | Número de telefone do assinante do OmniHSS | "555123456" |
| Categoria | Estático | Categoria do assinante | "\n" (0x0A) |
| Status do Assinante | Estático | Status do serviço | :serviceGranted |
| Lista de Serviços de Portadora | Estático | Serviços de portadora suportados | [<<31>>] |
| Lista de Teleserviços | Estático | Teleserviços suportados | [<<17>>, "!", "\""] |
| Modo de Acesso à Rede | config.exs | Acesso de pacote/circuito (isd_network_access_mode) | :packetAndCircuit |
InsertSubscriberData #2 (Serviços Suplementares) - Opcional
| Campo | Fonte | Descrição | Controlado Por |
|---|---|---|---|
| SS Provisionado | Estático | Dados de serviços suplementares | isd_send_ss_data: true |
| Encaminhamento de Chamadas | Estático | Configurações de encaminhamento (incondicional, ocupado, sem resposta, não acessível) | Config habilitado |
| Esperando Chamadas | Estático | Status do serviço de espera de chamadas | Config habilitado |
| Serviço de Múltiplos Participantes | Estático | Suporte a chamadas de conferência | Config 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
| Campo | Fonte | Descrição | Controlado Por |
|---|---|---|---|
| Informações de Bloqueio de Chamadas | Estático | Configurações de bloqueio de chamadas | isd_send_call_barring: true |
| BAOC | Estático | Bloqueio de Todas as Chamadas de Saída (código SS 146) | Config habilitado |
| BOIC | Estático | Bloqueio de Chamadas Internacionais de Saída (código SS 147) | Config habilitado |
| Dados de Restrição de Acesso | Estático | Restrições de acesso à rede | Config 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: trueem config/config.exs - ISD #3: Enviado apenas se
isd_send_call_barring: trueem 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:
| Campo | Fonte | Descrição | Como Gerado | Exemplo |
|---|---|---|---|---|
| IMSI | Calculado | IMSI sintético derivado do MSISDN | PLMN_PREFIX + zero_padded_MSISDN | "001001555123456" |
| Número do Nó da Rede | config.exs | Endereço GT do SMSC para roteamento de SMS | smsc_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:
- Privacidade: IMSIs reais de assinantes armazenados no banco de dados HLR nunca são expostos nas respostas SRI-for-SM enviadas pela rede SS7
- 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 Entrada | Prefixo PLMN | Dígitos do Assinante Disponíveis | MSISDN Preenchido | IMSI Final | Notas |
|---|---|---|---|---|---|
"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 Entrada | Prefixo PLMN | Porção do Assinante | Remover Zeros à Esquerda | MSISDN 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:
- Decodificação TBCD: Converter TBCD binário em string (pode incluir prefixo TON/NPI como "91")
- Extrair Dígitos: Manter apenas dígitos numéricos, remover quaisquer caracteres não numéricos
- Normalizar: Se mais longo que o espaço disponível, pegar os dígitos mais à direita; se mais curto, preencher à esquerda com zeros
- 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:
| Exemplo | Código do País | MSISDN Exemplo | nsn_offset | nsn_length | NSN Extraído |
|---|---|---|---|---|---|
| Código do país de 1 dígito | "9" | "95551234567" | 1 | 10 | "5551234567" |
| Código do país de 2 dígitos | "99" | "99412345678" | 2 | 9 | "412345678" |
| Código do país de 3 dígitos | "999" | "99988000088" | 3 | 8 | "88000088" |
Como Funciona:
-
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" -
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 Fonte | Descrição | Exemplos |
|---|---|---|
| API OmniHSS | Dados dinâmicos do banco de dados de assinantes OmniHSS | IMSI, MSISDN, VLR/MSC atendendo a partir de circuit_session |
| config.exs | Parâmetros de configuração do OmniSS7 | smsc_service_center_gt_address, camel_service_key, isd_network_access_mode |
| Estático | Valores codificados na geradora de resposta | Status do assinante, serviços de portadora, códigos SS |
| Solicitação | Campos extraídos da solicitação MAP de entrada | IMSI da UpdateLocation, MSISDN da SRI |
| Calculado | Valores derivados usando lógica | IMSI 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 UpdateLocationsmsc_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_110camel_trigger_detection_point- Padrão::termAttemptAuthorizedisd_network_access_mode- Padrão::packetAndCircuitisd_send_ss_data- Padrão:trueisd_send_call_barring- Padrão:truehlr_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:
- ← Voltar para a Documentação Principal
- Guia de Recursos Comuns
- Guia do Cliente MAP
- Referência Técnica
- Referência de Configuração
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.