Interface Sh (Recuperação de Dados do Assinante)
📖 Voltar à Documentação Principal
A interface Sh fornece acesso aos dados do perfil do assinante do HSS/Repository via Diameter.
Documentação Relacionada
Documentação Principal
- 📋 README Principal - Visão geral e início rápido
- 🔧 Guia de Configuração - Configuração de pares Diameter
- 🔧 Guia de Operações - Teste da interface Sh no Painel de Controle
Integração de Processamento de Chamadas
- 🔀 Configuração do Dialplan - Usando dados Sh em variáveis de dialplan
- ⚙️ Serviços Suplementares - MMTel-Config para encaminhamento de chamadas
- 📡 SS7 MAP - Dados HLR vs prioridade dos dados Sh
Interfaces Relacionadas
- 💳 Cobrança Online - Interface Ro (também usa Diameter)
- 🔢 Tradução de Números - Normalização de números antes da consulta Sh
Monitoramento
- 📊 Referência de Métricas - Métricas e monitoramento da interface Sh
Interface Sh (Recuperação de Dados do Assinante)
A interface Sh é usada para recuperar dados do perfil do assinante do HSS/Repository antes do processamento de chamadas. Esses dados incluem identidades de assinantes, serviços e configuração MMTel.
O que é a Interface Sh?
A interface Sh é uma interface Diameter padronizada pela 3GPP entre o TAS e o HSS/Repository (Repo). Ela fornece acesso em tempo real a:
- Identidades de assinantes IMS (IMPI/IMPU)
- Configurações de encaminhamento de chamadas (MMTel-Config)
- Autorização de serviços do assinante
- Atribuição de S-CSCF
Quando Ocorrências de Consulta Sh Acontecem
Consultas Sh Acontecem Em:
- Chamadas MT: Consulta parte chamada (assinante de destino)
- Chamadas MO: Consulta parte chamadora (assinante de origem)
- Chamadas de Emergência: Consulta parte chamadora (para localização/identidade)
Em todos os casos, o TAS emite exatamente uma UDR por perna de chamada. Tanto MO quanto MT usam a mesma forma de UDR multi-Data-Reference — apenas os rótulos das métricas diferem.
Multi-Data-Reference UDR (Notif-Eff)
De acordo com 3GPP TS 29.328 §6.1.1.1, quando tanto o AS quanto o HSS suportam o
Notif-Eff recurso (negociado via o AVP Supported-Features), uma única
UDR pode carregar múltiplos AVPs Data-Reference e o HSS responde com uma UDA
cujo User-Data-Sh é um único documento <Sh-Data> concatenando as
subárvores por referência como irmãs. O TAS depende disso — cada consulta Sh
busca o conjunto completo de referências que o sistema sabe como consumir em uma
viagem de ida e volta.
Referências de Dados solicitadas (TS 29.328 Tabela 7.6.1)
| Ref | Elemento | Usado pelo TAS para preencher |
|---|---|---|
| 0 | RepositoryData (com Service-Indication = "MMTEL-Services") | call_forward_all_destination, call_forward_not_reachable_destination, no_reply_timer |
| 10 | IMSPublicIdentity | ims_public_identity, msisdn |
| 11 | IMSUserState | ims_user_state (valor enum bruto da TS 29.328 §7.6.3) |
| 12 | SCSCFName | scscf_address, scscf_domain |
| 13 | InitialFilterCriteria | (corpo retornado ao TAS, mas não atualmente exposto como uma variável de dialplan) |
| 14 | LocationInformation | location_rat_type, location_mme_name, location_vplmn_id, location_age_seconds |
| 15 | UserState | user_state (valor enum bruto da TS 29.328 §7.6.7) |
| 17 | MSISDN | (verificado contra IMPU) |
| 32 | IMSI | imsi |
| 33 | IMSPrivateUserIdentity | ims_private_identity, ims_domain (analisado a partir do sufixo) |
Todos os campos de string única são expostos ao dialplan como variáveis de string bruta — o TAS não interpreta seus valores. Veja a tabela Variáveis de Dialplan Definidas a partir de Dados Sh abaixo para a lista completa.
Exemplo de corpo UDA (sanitizado)
Uma resposta mesclada bem-sucedida no rastreamento ao vivo se parece com isso — as subárvores por referência
aparecem sob um único wrapper <Sh-Data> na ordem em que as referências foram
solicitadas:
[debug] Dados do chamador buscados para +614xxxxxxxx
(Data-Ref [0, 10, 11, 12, 13, 14, 15, 17, 32, 33],
SI="MMTEL-Services"): 4453 bytes
<?xml version="1.0" encoding="UTF-8"?>
<Sh-Data>
<RepositoryData></RepositoryData>
<PublicIdentifiers>
<IMSPublicIdentity>sip:+614xxxxxxxx@ims.mnc001.mcc999.3gppnetwork.org</IMSPublicIdentity>
<IMSPublicIdentity>tel:+614xxxxxxxx</IMSPublicIdentity>
</PublicIdentifiers>
<ShIMSData>
<IMSUserState>1</IMSUserState>
</ShIMSData>
<ShIMSData>
<SCSCFName>sip:scscf01.ims.mnc001.mcc999.3gppnetwork.org:5060</SCSCFName>
</ShIMSData>
<IMSSubscription>
<PrivateID>9999990000xxxxx@ims.mnc001.mcc999.3gppnetwork.org</PrivateID>
<ServiceProfile>
... Entradas de InitialFilterCriteria ...
</ServiceProfile>
</IMSSubscription>
<ShIMSData>
<LocationInformation>
<RAT-Type>eutran</RAT-Type>
<MMEName>mme01.epc.mnc001.mcc999.3gppnetwork.org</MMEName>
<VPLMNId>999001</VPLMNId>
<AgeOfLocationInformation>NNNN</AgeOfLocationInformation>
</LocationInformation>
</ShIMSData>
<IMSPrivateUserIdentity>9999990000xxxxx@ims.mnc001.mcc999.3gppnetwork.org</IMSPrivateUserIdentity>
</Sh-Data>
Como os parsers consomem o corpo mesclado
O TAS não percorre a árvore XML. Cada parser por referência é independente
e baseado em tags: ele busca o corpo mesclado por um nome de elemento específico
(ex.: <SCSCFName>, <IMSPublicIdentity>, <CallForwardUnconditional>,
<CallForwardNoReplyTimer>, o bloco cp:rule not-reachable) e extrai
apenas o valor que lhe interessa. Subárvores que o parser não
reconhece são ignoradas silenciosamente.
O resultado de cada parser é um mapa de dados do assinante parcial; os parciais são mesclados em ordem sobre um mapa de padrões. Isso torna a consulta robusta para implementações heterogêneas do HSS e respostas parciais — veja a seção degradação graciosa abaixo.
Dados Recuperados da Interface Sh
O TAS emite uma única UDR multi-Data-Reference por perna de chamada (veja
Multi-Data-Reference UDR (Notif-Eff)
acima para a forma de solicitação e a resposta mesclada). Os campos que o
TAS extrai do corpo mesclado <Sh-Data> se dividem em três grupos:
1. Identidades IMS:
- IMPI (Identidade Privada): analisada a partir do elemento
<IMSPrivateUserIdentity>. Formato:{IMSI}@{domínio-IMS}. O TAS divide em@para recuperar o IMSI e o domínio IMS de forma independente. - IMPU (Identidade Pública): analisada a partir do elemento
<IMSPublicIdentity>. Formato:sip:+{MSISDN}@{domínio-IMS}. O MSISDN é despojado do+inicial e exposto como a variável de dialplanmsisdn.
2. Atribuição de S-CSCF:
- Nome do servidor S-CSCF e domínio onde o assinante está atualmente registrado,
analisado a partir do elemento
<SCSCFName>(Data-Reference 12). Usado pelo MT dialplan para direcionar o INVITE diretamente para o S-CSCF registrado em vez de se espalhar pelo domínio IMS. - Nota: o nome do elemento XML canônico na TS 29.328 Anexo D é
SCSCFName(sem hífen). A forma com hífen "S-CSCF" aparece apenas na prosa da especificação.
3. Serviços MMTel (Configuração de Telefonia Multimídia):
- Retornados dentro de
<RepositoryData>com chaveService-Indication = "MMTEL-Services". - Regras de encaminhamento de chamadas específicas do assinante:
- Encaminhamento de Chamadas Todas (CFA): Encaminhamento incondicional para outro número
- Encaminhamento de Chamadas Ocupado (CFB): Encaminhar quando o assinante está ocupado
- Encaminhamento de Chamadas Sem Resposta (CFNRy): Encaminhar após o tempo limite (valor do temporizador
extraído de
<CallForwardNoReplyTimer>) - Encaminhamento de Chamadas Não Acessíveis (CFNRc): Encaminhar quando o assinante está
offline/não registrado (extraído do bloco
not-reachable<cp:rule>dentro do documento do repositório MMTel-Services)
O que é MMTel-Config?
MMTel-Config é a configuração do serviço de Telefonia Multimídia do assinante
armazenada como dados transparentes (repositório) no HSS, com chave
Service-Indication = "MMTEL-Services". É buscado como parte da mesma
UDR multi-Data-Reference que a consulta de identidade (Data-Reference 0 mais o
AVP de indicação de serviço). O documento segue o esquema OMA / 3GPP simservs XCAP
e normalmente contém um bloco complete-communication-diversion com uma ou mais entradas cp:rule
(busy, noanswer, unregistered, notreachable), um valor opcional <NoReplyTimer>, e outros sub-serviços MMTel
como Proibição de Comunicação e Apresentação de Identidade.
Serviços MMTel Comuns que o TAS reconhece:
- CDIV (Desvio de Comunicação): Regras de encaminhamento de chamadas — o único
bloco atualmente analisado de ponta a ponta em variáveis de dialplan. A
regra
notreachablepreenchecall_forward_not_reachable_destinatione<NoReplyTimer>preencheno_reply_timer. - OIP (Apresentação de Identidade de Origem): Regras de apresentação de ID do chamador (retornadas no corpo, mas não atualmente consumidas).
- TIP (Apresentação de Identidade de Destino): Regras de número da parte chamada (retornadas no corpo, mas não atualmente consumidas).
Variáveis de Dialplan Definidas a partir de Dados Sh
Após uma consulta Sh bem-sucedida, essas variáveis são preenchidas:
| Variável | Fonte | Valor de Exemplo | Descrição |
|---|---|---|---|
ims_private_identity | IMPI | 9999990000xxxxx@ims.mnc001.mcc999.3gppnetwork.org | Identidade de usuário privada para autenticação |
ims_public_identity | IMPU | sip:+614xxxxxxxx@ims.mnc001.mcc999.3gppnetwork.org | Identidade de usuário pública para roteamento |
msisdn | IMPU (analisado) | 614xxxxxxxx | Número do assinante (+ removido) |
imsi | IMPI (analisado) | 9999990000xxxxx | IMSI da identidade privada |
ims_domain | IMPI/IMPU | ims.mnc001.mcc999.3gppnetwork.org | Domínio IMS |
scscf_address | SCSCFName | sip:scscf01.ims.mnc001.mcc999.3gppnetwork.org:5060 ou "none" | Endereço do servidor S-CSCF (registrado) |
scscf_domain | SCSCFName (analisado) | scscf01.ims.mnc001.mcc999.3gppnetwork.org ou "none" | Host S-CSCF (registrado) |
call_forward_all_destination | MMTel CDIV | numérico ou "none" | Número de destino CFA |
call_forward_not_reachable_destination | MMTel CDIV | numérico ou padrão de configuração | Destino CFNRc (caixa de correio) |
no_reply_timer | MMTel CDIV | segundos, ou padrão de configuração | Tempo limite antes da ativação do CFNRy |
ims_user_state | IMSUserState (Data-Ref 11) | "0"/"1"/"2"/"3" ou "none" | Enumeração do estado de registro IMS. 1 = REGISTRADO, 0 = NÃO_REGISTRADO, 2 = AUTENTICAÇÃO_PENDENTE, 3 = REGISTRADO_SERVIÇOS_NÃO_REGISTRADOS (TS 29.328 §7.6.3). String bruta, o TAS não interpreta. |
user_state | UserState (Data-Ref 15) | string bruta ou "none" | Estado do usuário CS/PS (TS 29.328 §7.6.7). String bruta, o TAS não interpreta. |
location_rat_type | LocationInformation/RAT-Type | "eutran", "utran", "geran", "wlan", ... ou "none" | Tecnologia de acesso rádio do último registro conhecido. |
location_mme_name | LocationInformation/MMEName | FQDN do MME ou "none" | Host MME atendendo o assinante. |
location_vplmn_id | LocationInformation/VPLMNId | string de dígitos MCCMNC ou "none" | Identificador PLMN visitado (útil para detecção de roaming no dialplan). |
location_age_seconds | LocationInformation/AgeOfLocationInformation | string numérica ou "none" | Segundos desde que as informações de localização foram relatadas pela última vez ao HSS. |
Prioridade: Dados Sh vs Padrões de Configuração
O TAS usa esta ordem de prioridade para dados de encaminhamento de chamadas:
- MMTel-Config do Sh — maior prioridade, configurações específicas do assinante.
- Dados HLR do SS7 MAP — substitui o Sh para chamadas MT se roaming ou encaminhamento de chamadas estiver ativo na rede visitada. Veja SS7 MAP.
- Padrões de Configuração — menor prioridade, usados quando nem o Sh nem
o HLR fornecem um valor (ou quando a subárvore correspondente estava ausente
da resposta Sh — veja a degradação graciosa abaixo). Os padrões
são configurados em
runtime.exssobconfig :tas—call_forward_not_reachable_destinationedefault_no_reply_timer.
O que Acontece Quando a Consulta Sh Falha
Cenários de falha de solicitação inteira:
-
Assinante Não Provisionado no HSS:
- O HSS retorna
Experimental-Result-Code 5001(DIAMETER_ERROR_USER_UNKNOWN) - O TAS trata a perna da chamada como não resolvível
- Variável
hangup_casedefinida como"UNALLOCATED_NUMBER" - Chamada rejeitada com a resposta SIP apropriada
- O HSS retorna
-
HSS Inacessível / Tempo Limite:
- A solicitação Sh expira (padrão: 5000ms, veja
request_timeoutdo Diameter emruntime.exs) - Erro registrado e métrica registrada
- A perna da chamada falha da mesma forma que o caso (1)
- A solicitação Sh expira (padrão: 5000ms, veja
-
HSS não suporta UDRs multi-Data-Reference:
- O HSS retorna um erro ou descarta a solicitação silenciosamente (dependente do HSS)
- Do lado do TAS, isso se parece com o caso (1) ou (2) — a consulta falha completamente e a perna da chamada é rejeitada
- O HSS deve implementar o recurso Notif-Eff para que o TAS funcione. Veja TS 29.328 §6.1.1.1 para a definição do recurso.
Degradação graciosa por subárvore
Quando a UDR em si é bem-sucedida (Result-Code: 2001), mas subárvores individuais do
corpo mesclado <Sh-Data> estão ausentes, o TAS não falha a chamada.
Cada parser por referência é independente e recorre a um padrão definido
quando sua tag está ausente. Os operadores só precisam se preocupar com falhas de solicitação inteira (acima); a degradação de dados parciais é automática e observável nos
logs de depuração.
| Subárvore ausente | Resultado |
|---|---|
<SCSCFName> (Data-Ref 12) | scscf_address e scscf_domain definidos como "none" |
<IMSPrivateUserIdentity> (Data-Ref 33) | ims_private_identity, imsi, ims_domain definidos como "none" |
<CallForwardUnconditional> dentro de RepositoryData do MMTel | call_forward_all_destination definido como "none" |
bloco not-reachable/<cp:rule> dentro de RepositoryData do MMTel | call_forward_not_reachable_destination recorre a Tas.Config.call_forward_not_reachable_destination() |
<CallForwardNoReplyTimer> dentro de RepositoryData do MMTel | no_reply_timer recorre a Tas.Config.default_no_reply_timer() |
<RepositoryData></RepositoryData> vazio | Todos os campos derivados de MMTel recorrem a padrões de configuração |
<IMSUserState>, <LocationInformation>, <InitialFilterCriteria> vazios/ausentes | Atualmente sem efeito colateral no dialplan (analisado, mas ainda não conectado) |
A única exigência rígida é que a resposta contenha um
elemento <IMSPublicIdentity>. Se essa tag estiver ausente, a consulta retorna
{:error, :sh_parse_failed} e a perna da chamada é tratada como não resolvível
(comportamento a jusante igual ao caso 1 acima). Todos os outros campos são
"pergunte livremente, leve o que puder obter".
Isso torna o TAS resiliente a implantações heterogêneas do HSS: um HSS que implementa Notif-Eff, mas apenas preenche IMSPublicIdentity, MSISDN e SCSCFName (por exemplo), ainda produzirá uma chamada funcional; o dialplan apenas recorre a padrões de configuração para as variáveis derivadas de MMTel.
Monitoramento da Interface Sh
Métricas Chave:
# Taxa de sucesso da consulta Sh
rate(subscriber_data_lookups_total{result="success"}[5m]) /
rate(subscriber_data_lookups_total[5m]) * 100
# Latência da consulta Sh (P95)
histogram_quantile(0.95,
rate(subscriber_data_duration_milliseconds_bucket[5m]))
# Taxa de erro da consulta Sh
rate(subscriber_data_lookups_total{result="error"}[5m])
Limiares de Alerta:
- Latência P95 > 100ms: Respostas lentas do HSS
- Taxa de erro > 5%: Problemas de conectividade com o HSS
- Taxa de erro > 20%: Falha crítica do HSS
Solução de Problemas:
- Verifique o status do par Diameter na interface Web (
/diameter) - Teste a consulta Sh na interface Web (
/sh_test) com assinante conhecido - Revise os logs em busca de erros "Dados do Assinante"
- Verifique se o HSS/Repository é acessível a partir do TAS
- Verifique a métrica
subscriber_data_lookups_totalem busca de padrões
Testando a Interface Sh
Use a ferramenta de Teste Sh da interface Web (/sh_test):
- Navegue até
/sh_testno Painel de Controle - Insira o MSISDN do assinante (ex.:
+614xxxxxxxx) - Clique em "Consultar Sh"
- Revise os dados retornados:
- Identidades IMPI/IMPU
- Atribuição de S-CSCF
- Serviços MMTel
- Configuração de encaminhamento de chamadas
Cenários de Teste Comuns:
- Verifique se assinantes recém-provisionados estão no HSS
- Verifique as configurações de encaminhamento de chamadas para um assinante específico
- Valide a atribuição de S-CSCF após o registro IMS
- Teste a conectividade e os tempos de resposta do HSS