O que é o CNP?
O CNP é um protocolo simples baseado em HTTP/JSON que permite:- ✅ Executar lógica customizada nos seus próprios servidores
- ✅ Receber dados do workflow (inputs, config, metadata)
- ✅ Retornar resultados para o workflow
- ✅ Autenticação segura via HMAC SHA256
- ✅ Suporte a heartbeat para verificação de saúde
Por que usar CNP?
Flexibilidade
Flexibilidade
Execute qualquer lógica nos seus servidores, sem limitações do Triglit.
Integração
Integração
Conecte workflows diretamente com sua infraestrutura existente.
Segurança
Segurança
Autenticação via HMAC garante que apenas o Triglit pode chamar seus endpoints.
Como Funciona
Fluxo de Execução
- Workflow executa: Um workflow chega em um custom node
- Triglit prepara requisição: Monta payload e gera assinatura HMAC
- Requisição HTTP: POST para seu endpoint CNP
- Você valida e processa: Valida assinatura e executa lógica
- Resposta: Retorna resultado ou erro
- Workflow continua: Triglit usa o resultado para continuar o workflow
Configuração
1. Configurar Endpoint no Triglit
No painel do Triglit, configure seu endpoint CNP:- Acesse Configurações → CNP
- Configure o Custom Nodes Endpoint:
https://api.seudominio.com/triglit/cnp - O secret será gerado automaticamente (ou você pode usar um existente)
2. Implementar Servidor CNP
Seu servidor deve expor um endpoint POST que aceita requisições CNP:Estrutura da Requisição
Quando o Triglit executa um custom node, ele envia uma requisição POST com:Headers
Body (Payload)
Campos do Payload
nodeType: Tipo do custom node sendo executadorunId: ID da execução (run) atualtenantId: ID do tenantsubTenantId: ID do sub-tenant (opcional)inputs: Dados de entrada do workflow (output do node anterior)config: Configuração do node no workflowmetadata: Metadados da execução (timestamp, versão do node)
Estrutura da Resposta
Sucesso
Erro
Heartbeat
Autenticação HMAC
Como Funciona
- Triglit serializa o payload como JSON string
- Gera assinatura HMAC SHA256 usando o secret do tenant
- Envia no header
X-Triglit-Signatureno formatosha256=<base64> - Você valida recalculando a assinatura e comparando (ou usando o SDK TypeScript)
Algoritmo de Validação
A assinatura é enviada no formatosha256=<base64>:
- Algoritmo: HMAC SHA256
- Encoding: Base64 (com prefixo
sha256=) - Header:
X-Triglit-Signature - Valor: String no formato
sha256=<base64>(ex:sha256=a1b2c3d4e5f6...)
Heartbeat
O Triglit pode enviar requisições de heartbeat para verificar se seu servidor está online:Heartbeats não requerem processamento de lógica. Apenas valide a assinatura e retorne
{ status: "ok" }.Timeout e Retries
Timeout
Cada custom node tem um timeout configurável (padrão: 30 segundos). Se seu servidor não responder dentro do timeout, o Triglit considera como falha.Retries
O Triglit retenta automaticamente em caso de falha:- Máximo de tentativas: Configurável por node (padrão: 3)
- Backoff: Exponencial entre tentativas
- Falhas que disparam retry: Timeout, erro 5xx, erro de rede
Boas Práticas
Validação de Assinatura
Validação de Assinatura
Sempre valide a assinatura antes de processar. Use comparação time-safe.
Idempotência
Idempotência
Torne seus handlers idempotentes usando
runId para evitar processamento duplicado.Resposta Rápida
Resposta Rápida
Retorne rapidamente (dentro do timeout). Processe operações longas de forma assíncrona.
Tratamento de Erros
Tratamento de Erros
Sempre retorne erros estruturados com mensagens claras.
Logging
Logging
Logue todas as requisições usando
runId para rastreabilidade.HTTPS
HTTPS
Use sempre HTTPS em produção para proteger dados em trânsito.
Exemplo Completo
Servidor CNP Completo
Limitações
- Timeout máximo: 5 minutos por requisição (configurável por node)
- Tamanho de payload: 1MB máximo
- Retries: Máximo de 10 tentativas (configurável por node)
Troubleshooting
Erro: Invalid Signature
- Verifique se o secret está correto
- Certifique-se de serializar o payload exatamente como recebido
- Use comparação time-safe
- Verifique se está usando o formato correto:
sha256=<base64>(não hexadecimal) - Recomendado: Use o SDK TypeScript com
validateCNPSignaturepara evitar erros de implementação
Erro: Timeout
- Otimize seu código para responder rapidamente
- Processe operações longas de forma assíncrona
- Aumente o timeout do node se necessário
Erro: Connection Refused
- Verifique se seu servidor está acessível
- Confirme que o endpoint está correto no Triglit
- Verifique firewall e configurações de rede

