CAMEL Request Builder - Resumo da Implementação
Visão Geral
Um novo componente LiveView foi criado para construir e enviar solicitações CAMEL/CAP para fins de teste. Isso fornece uma interface interativa para criar InitialDP e outras operações CAMEL.

Novos Componentes
1. CAMEL Request Builder LiveView
Recursos:
- Interface interativa baseada em formulário para construir solicitações CAMEL
- Suporte para múltiplos tipos de solicitação:
- InitialDP - Ponto de Detecção Inicial (notificação de configuração de chamada)
- Connect - Conectar chamada ao destino
- ReleaseCall - Liberar/terminar chamada
- RequestReportBCSMEvent - Solicitar notificações de eventos
- Continue - Continuar o processamento da chamada
- ApplyCharging - Aplicar limites de cobrança/duração às chamadas
Principais Capacidades:
- Dropdown de seleção de tipo de solicitação
- Campos de formulário dinâmicos com base no tipo de solicitação selecionado
- Opções avançadas de SCCP/M3UA (seção colapsável)
- Títulos Globais da Parte Chamadora/Chamado
- Configuração de SSN (Número de Subsistema)
- Configurações de OPC/DPC (Código de Ponto)
- Histórico de solicitações em tempo real (últimas 20 solicitações)
- Rastreamento de sessão via OTID
- Feedback de sucesso/erro
- Rastreamento do tamanho da solicitação
Rota: /camel_request
2. EventLog Aprimorado com Suporte a CAMEL
Novas Funções:
paklog_camel/2- Registro dedicado de mensagens CAMEL/CAPlookup_cap_opcode_name/1- Consulta de código de operação CAPfind_cap_opcode/1- Extrair opcode CAP de JSONextract_cap_tids/1- Extrair OTID/DTID de mensagens CAPformat_cap_to_json/1- Converter PDUs CAP para formato JSON
Códigos de Operação CAP Suportados:
0 => "initialDP"
5 => "connect"
6 => "releaseCall"
7 => "requestReportBCSMEvent"
8 => "eventReportBCSM"
10 => "continue"
13 => "furnishChargingInformation"
35 => "applyCharging"
... (47 operações no total)
Recursos:
- Registro em JSON de todas as solicitações/respostas CAMEL
- Detecção automática de ação TCAP (Iniciar/Continuar/Finalizar/Abortar)
- Extração de endereçamento SCCP
- Tratamento de erros para mensagens malformadas
- Processamento de tarefas em segundo plano (não bloqueante)
- Evento prefixado com "CAP:" para fácil filtragem
3. CapClient Atualizado
Mudanças:
- Adicionados chamados
paklog_camel/2para mensagens de entrada e saída - Registro duplo: Tanto MAP (
paklog) quanto CAP (paklog_camel) para compatibilidade - Mensagens de saída registradas em
sccp_m3ua_maker/2 - Mensagens de entrada registradas em
handle_payload/1
Configuração
As novas páginas LiveView foram adicionadas à configuração de tempo de execução:
# Arquivo: config/runtime.exs
config :control_panel,
use_additional_pages: [
{SS7.Web.EventsLive, "/events", "Eventos SS7"},
{SS7.Web.TestClientLive, "/client", "Cliente SS7"},
{SS7.Web.M3UAStatusLive, "/m3ua", "M3UA"},
{SS7.Web.HlrLinksLive, "/hlr_links", "Links HLR"},
{SS7.Web.CAMELSessionsLive, "/camel_sessions", "Sessões CAMEL"},
{SS7.Web.CAMELRequestLive, "/camel_request", "Construtor de Solicitações CAMEL"}
],
page_order: ["/events", "/client", "/m3ua", "/hlr_links",
"/camel_sessions", "/camel_request",
"/application", "/configuration"]
Uso
Acessando o Construtor de Solicitações
- Navegue até:
https://your-server:8087/camel_request - Selecione o tipo de solicitação no dropdown
- Preencha os parâmetros obrigatórios
- Opcionalmente, expanda "Opções Avançadas de SCCP/M3UA" para ajustes finos
- Clique em "Enviar Solicitação [RequestType]"
Fluxo de Solicitação
InitialDP (Nova Chamada)
- Defina a Chave de Serviço (por exemplo, 100)
- Defina o Número Chamador (A-Party)
- Defina o Número Chamado (B-Party)
- Envie a solicitação → Gera novo OTID
- OTID armazenado na sessão para solicitações de acompanhamento
Solicitações de Acompanhamento (Connect, ReleaseCall, etc.)
- Deve ter OTID ativo da InitialDP
- A solicitação usa automaticamente o OTID armazenado
- Aviso exibido se não houver OTID ativo
Parâmetros da Solicitação
InitialDP:
- Chave de Serviço (inteiro)
- Número Chamador (formato ISDN)
- Número Chamado (formato ISDN)
Connect:
- Número de Destino (para onde rotear a chamada)
ReleaseCall:
- Código de Causa (16 = Normal, 17 = Ocupado, 31 = Não Especificado)
RequestReportBCSMEvent:
- Eventos BCSM (separados por vírgula: oAnswer, oDisconnect, etc.)
Continue:
- Sem parâmetros (usa OTID ativo)
ApplyCharging:
- Duração (segundos, 1-864000) - Duração máxima da chamada antes da ação
- Liberar em Timeout (booleano) - Se deve liberar a chamada quando a duração expira
Opções Avançadas
Endereçamento SCCP:
- GT da Parte Chamadora (Título Global)
- GT da Parte Chamado
- SSN Chamado (padrão 146 = gsmSSF)
- SSN Chamador (padrão 146)
Códigos de Ponto M3UA:
- OPC (Código de Ponto de Origem, padrão 5013)
- DPC (Código de Ponto de Destino, padrão 5011)
Registro em JSON
Todas as mensagens CAMEL agora são registradas em formato JSON no log de eventos com:
- Direção: entrada/saída
- Ação TCAP: Iniciar/Continuar/Finalizar/Abortar
- Operação CAP: e.g., "CAP:initialDP", "CAP:connect"
- Endereçamento SCCP: Informações da Parte Chamadora/Chamado
- TIDs: OTID/DTID para correlação
- Mensagem Completa: PDU CAP codificada em JSON
Exemplo de Entrada de Log
{
"map_event": "CAP:initialDP",
"direction": "outgoing",
"tcap_action": "Begin",
"otid": "A1B2C3D4",
"sccp_called": {
"SSN": 146,
"GlobalTitle": {
"Digits": "55512341234",
"NumberingPlan": "isdn_tele",
"NatureOfAddress_Indicator": "international"
}
},
"event_message": "{ ... full CAP PDU ... }"
}
Histórico de Solicitações
A interface exibe as últimas 20 solicitações com:
- Timestamp
- Tipo de solicitação (com badge colorido)
- OTID (primeiros 8 caracteres hexadecimais)
- Status (enviado/erro)
- Tamanho da mensagem em bytes
Rastreamento de Sessão
Painel de Informações da Sessão Atual:
- Exibe OTID ativo
- Mostra o tamanho da última solicitação em bytes
- Visível apenas quando a sessão está ativa
Fluxo de Trabalho de Teste
-
Iniciar Nova Chamada:
- Enviar InitialDP → Obter OTID
- O sistema cria a sessão
-
Controlar Chamada:
- Enviar RequestReportBCSMEvent → Solicitar notificações
- Enviar ApplyCharging → Definir limite de duração da chamada (por exemplo, 290 segundos)
- Enviar Connect → Roteamento para o destino
- OU Enviar ReleaseCall → Terminar
-
Ver Resultados:
- Verificar histórico de solicitações
- Monitorar página de Sessões CAMEL
- Revisar logs de eventos com prefixo "CAP:"
ApplyCharging - Controle de Duração da Chamada
Visão Geral
A operação ApplyCharging permite definir uma duração máxima de chamada e, opcionalmente, liberar a chamada quando essa duração expira. Isso é tipicamente usado para cenários de cobrança pré-paga ou para impor limites de tempo em chamadas.
Casos de Uso
- Cobrança Pré-Paga: Limitar a duração da chamada com base no saldo do assinante
- Cobrança Baseada em Tempo: Impor intervalos de cobrança periódicos
- Gerenciamento de Recursos: Impedir que chamadas sejam executadas indefinidamente
- Integração OCS: Coordenar com Sistemas de Cobrança Online para controle de crédito em tempo real
Parâmetros
Duração (maxCallPeriodDuration)
- Tipo: Inteiro (1-864000 segundos)
- Descrição: Número máximo de segundos que a chamada pode durar antes que o temporizador expire
- Exemplos:
60= 1 minuto290= 4 minutos e 50 segundos (valor de teste comum)3600= 1 hora86400= 24 horas
Liberar em Timeout (releaseIfDurationExceeded)
- Tipo: Booleano (true/false)
- Padrão: true
- Descrição: O que acontece quando a duração expira:
true: Liberar/desconectar automaticamente a chamadafalse: Enviar notificação, mas manter a chamada ativa (permite que gsmSCF tome uma ação)
Estrutura da Mensagem
A mensagem ApplyCharging é codificada como um Continue TCAP com:
- TCAP: Mensagem Continue (usa transação existente)
- Opcode: 35 (applyCharging)
- Parâmetros: ApplyChargingArg contendo:
aChBillingChargingCharacteristics: Informações de cobrança baseadas em tempotimeDurationCharging: Duração máxima e sinalizador de liberação
partyToCharge: Qual parte é cobrada (padrão: sendingSideID)
Exemplo de Uso
Cenário: Chamada pré-paga com limite de 5 minutos
-
Enviar InitialDP para iniciar o monitoramento da chamada
Chave de Serviço: 100
Chamador: 447700900123
Chamado: 447700900456
→ OTID: A1B2C3D4 -
Enviar ApplyCharging para definir o limite de 5 minutos
Duração: 300 (segundos)
Liberar em Timeout: true
→ Usa OTID: A1B2C3D4 -
Enviar Connect para completar a chamada
Destino: 447700900456
→ Usa OTID: A1B2C3D4 -
Após 5 minutos (300 segundos):
- Chamada liberada automaticamente pela rede
- gsmSCF recebe notificação de desconexão
Melhores Práticas
-
Sempre envie ApplyCharging ANTES de Connect
- Garante que a cobrança esteja ativa quando a chamada se conecta
- Impede segmentos de chamadas não cobrados
-
Use com RequestReportBCSMEvent
- Solicite eventos
oAnswereoDisconnect - Permite rastrear a duração real da chamada
- Habilita a reaplicação da cobrança, se necessário
- Solicite eventos
-
Defina durações razoáveis
- Muito curto: Operações de cobrança frequentes, má experiência do usuário
- Muito longo: Risco de perda de receita em chamadas pré-pagas
- Típico: 60-300 segundos para pré-pago, mais longo para pós-pago
-
Trate o timeout de forma elegante
- Se
release=false, esteja preparado para lidar com notificações de expiração do temporizador - Implemente lógica para estender a duração ou liberar a chamada
- Se
Tratamento de Erros
Problemas comuns:
- Nenhum OTID ativo: Deve enviar InitialDP primeiro
- Duração inválida: Deve ser de 1-864000 segundos
- Suporte da rede: Algumas implementações de SSF podem não suportar ApplyCharging
- Precisão do temporizador: A resolução do temporizador da rede é tipicamente de 1 segundo, mas pode variar
Monitoramento
Rastreie operações ApplyCharging via:
- Histórico de Solicitações: Mostra solicitações ApplyCharging enviadas
- Log de Eventos: Pesquise por "CAP:applyCharging"
- Sessões CAMEL: Monitore sessões ativas com cobrança aplicada
- Rastreamento TCAP: Depure problemas de codificação/decodificação
Detalhes da Implementação
Gerenciamento de Estado
- LiveView atribui estado do formulário de rastreamento
- OTID armazenado no socket atribui
- Histórico de solicitações limitado a 20 entradas
- Atualização automática desativada (envio manual apenas)
Geração de Solicitações
- Usa o módulo existente
CapRequestGenerator - Constrói as estruturas TCAP/CAP adequadas
- Codifica com o codec
:TCAPMessages - Envolve em SCCP via
CapClient.sccp_m3ua_maker/2
Mecanismo de Envio
- Envia via M3UA para
:camelgw_client_asp - Usa contexto de roteamento 1
- Encapsulamento automático SCCP/M3UA
Tratamento de Erros
- Validação de formulário com feedback ao usuário
- Tratamento elegante de OTID ausente
- Erros de análise exibidos na interface
- Falhas de codificação registradas
Melhorias Futuras
Adições potenciais:
- Modelos/presets de solicitações
- Correlação e exibição de respostas
- Visualização do fluxo de chamadas
- Detalhamento de sessões
- Exportar histórico de solicitações
- Teste de carga (solicitações em massa)
- Exportação PCAP de mensagens geradas
- Validação de parâmetros CAP
Notas de Integração
- Compatível com registro MAP existente (
paklog) - Compartilha banco de dados de log de eventos com eventos MAP
- Usa a mesma infraestrutura SCCP/M3UA
- Funciona com CAMELSessionsLive para monitoramento
- Integra-se com roteamento M3UA existente
Arquivos Modificados
config/runtime.exs- ATUALIZADO
Dependências
- CapRequestGenerator existente
- CapClient para envio M3UA
- M3UA.Server para transmissão de pacotes
- EventLog para registro de mensagens
- Framework Phoenix LiveView
- Painel de Controle para infraestrutura da interface