Pular para o conteúdo principal

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 de usuário interativa para criar InitialDP e outras operações CAMEL.

CAMEL Request Builder Overview

Novos Componentes

1. CAMEL Request Builder LiveView

Recursos:

  • Interface de usuário 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:

  • Menu suspenso para seleção do 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 do 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/CAP
  • lookup_cap_opcode_name/1 - Pesquisa de código de operação CAP
  • find_cap_opcode/1 - Extrair opcode CAP de JSON
  • extract_cap_tids/1 - Extrair OTID/DTID de mensagens CAP
  • format_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 (Begin/Continue/End/Abort)
  • 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:

  • Chamadas paklog_camel/2 adicionadas para 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 em tempo de execução:

# Arquivo: config/runtime.exs

config :control_panel,
use_additional_pages: [
{SS7.Web.EventsLive, "/events", "SS7 Events"},
{SS7.Web.TestClientLive, "/client", "SS7 Client"},
{SS7.Web.M3UAStatusLive, "/m3ua", "M3UA"},
{SS7.Web.HlrLinksLive, "/hlr_links", "HLR Links"},
{SS7.Web.CAMELSessionsLive, "/camel_sessions", "CAMEL Sessions"},
{SS7.Web.CAMELRequestLive, "/camel_request", "CAMEL Request Builder"}
],
page_order: ["/events", "/client", "/m3ua", "/hlr_links",
"/camel_sessions", "/camel_request",
"/application", "/configuration"]

Uso

Acessando o Construtor de Solicitações

  1. Navegue até: https://your-server:8087/camel_request
  2. Selecione o tipo de solicita��ão no menu suspenso
  3. Preencha os parâmetros obrigatórios
  4. Opcionalmente, expanda "Opções Avançadas de SCCP/M3UA" para ajustes finos
  5. Clique em "Enviar Solicitação [RequestType]"

Fluxo de Solicitação

InitialDP (Nova Chamada)

  1. Defina a Chave de Serviço (por exemplo, 100)
  2. Defina o Número Chamador (A-Party)
  3. Defina o Número Chamado (B-Party)
  4. Envie a solicitação → Gera novo OTID
  5. OTID armazenado na sessão para solicitações de acompanhamento

Solicitações de Acompanhamento (Connect, ReleaseCall, etc.)

  1. Deve ter um OTID ativo do InitialDP
  2. A solicitação usa automaticamente o OTID armazenado
  3. 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 direcionar 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 expirar

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: Begin/Continue/End/Abort
  • 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 codificado 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

  1. Iniciar Nova Chamada:

    • Enviar InitialDP → Obter OTID
    • O sistema cria a sessão
  2. 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
  3. Ver Resultados:

    • Verificar histórico de solicitações
    • Monitorar a 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 da chamada e, opcionalmente, liberar a chamada quando essa duração expirar. 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 minuto
    • 290 = 4 minutos e 50 segundos (valor de teste comum)
    • 3600 = 1 hora
    • 86400 = 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 chamada
    • false: Enviar notificação, mas manter a chamada ativa (permite que gsmSCF tome uma ação)

Estrutura da Mensagem

A mensagem ApplyCharging é codificada como um TCAP Continue com:

  • TCAP: Mensagem Continue (usa a transação existente)
  • Opcode: 35 (applyCharging)
  • Parâmetros: ApplyChargingArg contendo:
    • aChBillingChargingCharacteristics: Informações de cobrança baseadas em tempo
      • timeDurationCharging: 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

  1. Enviar InitialDP para iniciar o monitoramento da chamada

    Chave de Serviço: 100
    Chamador: 447700900123
    Chamado: 447700900456
    → OTID: A1B2C3D4
  2. Enviar ApplyCharging para definir o limite de 5 minutos

    Duração: 300 (segundos)
    Liberar em Timeout: true
    → Usa OTID: A1B2C3D4
  3. Enviar Connect para completar a chamada

    Destino: 447700900456
    → Usa OTID: A1B2C3D4
  4. Após 5 minutos (300 segundos):

    • Chamada liberada automaticamente pela rede
    • gsmSCF recebe notificação de desconexão

Melhores Práticas

  1. 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
  2. Use com RequestReportBCSMEvent

    • Solicitar eventos oAnswer e oDisconnect
    • Permite rastrear a duração real da chamada
    • Permite reaplicação da cobrança, se necessário
  3. Defina durações razoáveis

    • Muito curtas: Operações de cobrança frequentes, má experiência do usuário
    • Muito longas: Risco de perda de receita em chamadas pré-pagas
    • Típico: 60-300 segundos para pré-pago, mais longo para pós-pago
  4. Lide com 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

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: Pesquisar por "CAP:applyCharging"
  • Sessões CAMEL: Monitorar sessões ativas com cobrança aplicada
  • Trace TCAP: Depurar problemas de codificação/decodificação

Detalhes da Implementação

Gerenciamento de Estado

  • LiveView atribui o 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 (somente envio manual)

Geração de Solicitações

  • Usa o módulo existente CapRequestGenerator
  • Constrói estruturas TCAP/CAP apropriadas
  • 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:

  1. Modelos/presets de solicitação
  2. Correlação e exibição de respostas
  3. Visualização do fluxo de chamadas
  4. Detalhamento de sessões
  5. Exportar histórico de solicitações
  6. Teste de carga (solicitações em massa)
  7. Exportação PCAP de mensagens geradas
  8. 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