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

CAMEL Request Builder Overview

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/CAP
  • lookup_cap_opcode_name/1 - Consulta 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 (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/2 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 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

  1. Navegue até: https://your-server:8087/camel_request
  2. Selecione o tipo de solicitação no dropdown
  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 OTID ativo da 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 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

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

    • Solicite eventos oAnswer e oDisconnect
    • Permite rastrear a duração real da chamada
    • Habilita a reaplicação da cobrança, se necessário
  3. 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
  4. 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

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:

  1. Modelos/presets de solicitações
  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