Todos os artigos
FT-WEBHOOK-PUBLIC· 1.0.1Integrações

Webhook Público SAP→Lefia

Como configurar SAP (ou outro sistema externo) para postar documentos no Lefia via webhook autenticado.

Atualizado em 8/22/2026
Quando uma integração tem paradigma Push, o Lefia expõe um endpoint público que aceita POST de sistema externo.

URL e Secret



Em /edi-hub/integracao/[id], o card "Webhook público" mostra:

  • URL pública: https://lefia.ai/api/edi-hub/webhook/<path> (copy button)
  • Secret: mascarado. Para revelar/copiar, clique em Regenerar — o novo secret é exibido uma única vez (após isso só será possível regenerar de novo, invalidando o anterior).


Por segurança, o server nunca retorna o secret atual. Para descobrir o secret você precisa regenerar.

Configurar SAP



Opção A — Output Management (S/4HANA moderno)

Configurar condition record com REST destination apontando pra URL + header customizado:
  • Content-Type: application/json
  • x-webhook-secret: whsec_...


Opção B — ABAP custom (ECC ou S/4)

BAdI em VBAK_VBAP_SAVE (ou similar) que dispara cl_http_client=>create_by_url com POST.

Exemplo ABAP completo é exibido no card colapsável "Exemplos de uso".

Opção C — cURL (teste manual)

curl -X POST "https://lefia.ai/api/edi-hub/webhook/<path>" \\
-H "x-webhook-secret: whsec_..." \\
-H "Content-Type: application/json" \\
-H "idempotency-key: doc-12345" \\
-d '{"docnum":"0005000123","mestyp":"SALES_ORDER","format":"json","data":{...}}'


Body esperado



{
"docnum": "0005000123",
"mestyp": "SALES_ORDER",
"format": "json",
"direction": "inbound",
"data": { "SalesOrder": "0005000123", "SoldToParty": "100001" },
"sourceStatus": "received"
}


Idempotência



  • Header idempotency-key (opcional, recomendado): se reenviar com mesmo valor, retorna a mensagem original sem reprocessar.
  • Se não enviar, Lefia computa fingerprint do payload e dedupliça automaticamente.


Respostas



  • 200: deduplicado (mensagem já recebida)
  • 202 Accepted: processado, retorna messageId + pipeline_status
  • 401: secret inválido ou ausente
  • 404: path não encontrado
  • 423 Locked: integração não está ativa


Health check



GET /api/edi-hub/webhook/<path> retorna 200 + {ok, status, expects} se o path existe. Útil pro time do cliente validar antes de configurar POST com payload real.

Histórico de versões

  • 1.0.1

    Promovido staging → main no merge release 49edb06

    5/13/2026 · updated

  • 1.0.0

    Endpoint público POST /api/edi-hub/webhook/[path] + GET health + regenerate-secret API + UI WebhookCard (URL pública, secret regenerável, cURL/ABAP examples). UNIQUE index em webhook_path. Constant-time compare via crypto.timingSafeEqual. Reusa fingerprint+idempotency+processMessage do receive-message.

    5/13/2026 · new