Files
GeorgeandClaude Sonnet 5 5e0df73477 Initial commit: sap-webhook-api
API NestJS que recibe el Webhook Messenger de SAP Business One
(CloudEvents), valida HMAC opcional y guarda cada notificacion
local (data/events/) e inserta en Postgres (webhook_events).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-16 07:41:25 -05:00

3.5 KiB

Del alta de una Orden al archivo JSON

Cómo viaja un evento de SAP Business One hasta quedar guardado en disco por sap-webhook-api: los dos servidores involucrados, sus componentes, puertos e IPs de ejemplo, y dónde entra en juego el certificado autofirmado.

Diagrama

flowchart LR
  subgraph SAP["SAP Business One — servidor Windows · 192.168.1.205"]
    direction TB
    SL["Service Layer\nsap10:50000\nLogin · EventSubscriptions\ncert propio autofirmado"]
    SQL["SQL Server (MSSQL)\nDB: SBODemoCL\nTablas: OEVC · OEVN · EVN1\nlogin: sa"]
    WM["Webhook Messenger\npuerto 40008\nWebhookMessenger.jar\nDEFAULT_LANGUAGE=us_english (workaround)"]
    SL <-->|"Login / EventSubscriptions"| SQL
    SQL <-->|"SELECT/UPDATE OEVN, EVN1 (login sa)"| WM
  end

  subgraph MAC["Mac de desarrollo · 192.168.1.166"]
    direction TB
    CFG["Configuración\ncurl / sl.http"]
    API["sap-webhook-api (NestJS)\n192.168.1.166:3000\nPOST /webhooks/sap\ncert CN/SAN=192.168.1.166"]
    FS["data/events/*.json\n1 archivo por notificación"]
    API -->|guarda| FS
  end

  CFG -- "HTTPS :50000\nLogin, EventSubscriptions" --> SL
  WM -- "HTTPS :3000\nCloudEvents batch\nPOST /webhooks/sap" --> API

  classDef warn fill:#faf0dd,stroke:#a8690b,color:#7a4c08;
  class WM warn

Dos servidores en la misma LAN. La Mac llama al Service Layer para configurar la suscripción (flecha superior); el Webhook Messenger — que corre dentro del servidor SAP y lee la cola de eventos en SQL Server autenticado como sa — es quien llama de vuelta a la Mac para entregar cada evento (flecha inferior). El recuadro en ámbar marca el workaround de DATEFORMAT aplicado para que esa segunda flecha funcione.

Componentes e IPs de ejemplo

Componente Host : puerto Protocolo Notas
Service Layer (SAP Business One) sap10 : 50000 HTTPS Certificado propio autofirmado; nuestras llamadas lo ignoran con curl -k.
Webhook Messenger (servicio Windows) 192.168.1.205 : 40008 TCP (health) + JDBC a SQL Server Se conecta a SQL Server como sa; despacha los eventos por HTTPS hacia el WebhookURL suscripto.
SQL Server (MSSQL) — (interno) TDS DB SBODemoCL. Tablas OEVC / OEVN / EVN1.
sap-webhook-api (NestJS) 192.168.1.166 : 3000 HTTPS Certificado autofirmado propio, CN/SAN = 192.168.1.166.
data/events/ (filesystem local) — (disco) — Un archivo .json por notificación recibida.

🔐 Certificado autofirmado

Generado en la Mac para CN/SAN = 192.168.1.166 — la IP donde corre sap-webhook-api, no la del servidor SAP.

Ese nombre tiene que coincidir con el host que se declara como WebhookURL al crear la suscripción (https://192.168.1.166:3000/webhooks/sap). Como la suscripción usa VerifyCertificate: tNO, SAP nunca valida este certificado — si más adelante se activa la verificación, hay que importarlo además en el keystore del propio Webhook Messenger.

🟠 Estado del bug de fechas

El Webhook Messenger construye el SQL contra OEVN con la fecha como texto plano. Con el login sa en idioma Español (DATEFORMAT dmy), cualquier día del mes mayor a 12 rompía la consulta.

Workaround confirmado en este ambiente de desarrollo: cambiar sa a DEFAULT_LANGUAGE = us_english y reiniciar el servicio. Sigue pendiente confirmar si FP2605 HFX1 lo corrige oficialmente.


Detalle completo del diagnóstico, la evidencia y los pasos de instalación en CLAUDE.md y PASOS-REALIZADOS.md de este repositorio.