Skip to content

APIs e integración

Este documento es el corazón del trabajo dev. Es un borrador inicial del contrato entre Nilo y nosotros, derivado del PR/FAQ. Debe alinearse formalmente con Nilo (pendiente #2).

APIs que probablemente exponemos a Nilo

Endpoints HTTP (REST/JSON) que el agente conversacional Nilo invoca para resolver las HU. Nombres y paths son propuestas, no contractuales.

#Capacidad de negocioEndpoint propuestoHUNotas
1Identificar cliente por BSUID o teléfonoGET /v1/customers?bsuid={bsuid} o ?phone={e164} (al menos uno)HU-07Devuelve N códigos SAP / sucursales asociadas. BSUID es el identificador estable post-junio 2026 (formato {ISO 3166}.{id}); teléfono se acepta como fallback y para usuarios sin username adoptado. Permite que un mismo BSUID/teléfono gestione múltiples puntos de venta. Ver 04-cumplimiento.md § Privacidad de identificadores.
2Catálogo de productosGET /v1/catalogHU-01Filtros por familia, paginación, ETag para caché del agente.
3Disponibilidad de stockGET /v1/products/{sku}/availability?warehouse={id}HU-01, HU-08Lee de SAP SD vía BTP. Caché corta (segundos) con invalidación por evento.
4Precio por graduación (Tier)GET /v1/products/{sku}/price?customerCode={c}HU-01Precio SIEMPRE desde SAP MDM. Nunca hardcoded. Pilar ALCOA Exacto.
5Validar límite de créditoPOST /v1/credit/validateHU-03Body: {customerCode, amount}{approved, remaining, reason}. Síncrono a SAP.
6Crear orden de ventaPOST /v1/ordersHU-03Endpoint más crítico. Idempotente por header Idempotency-Key. SLA <60 s a SAP (P95).
7Estatus de orden y ETAGET /v1/orders/{id}/statusHU-02Proxy a DispatchTrack; devuelve ETA + último punto GPS del vehículo + URL de mapa.
8Cancelar / modificar orden (probable)PATCH /v1/orders/{id}A definir con negocio: ventanas de tiempo, autorización.
9Recomendaciones por clienteGET /v1/recommendations?customerCode={c}HU-09Algoritmo basado en historial SAP + prioridades de portafolio. Open: ¿lo aloja Nilo o nosotros?
10Base de conocimiento productoGET /v1/knowledge/{sku}HU-10Ficha técnica curada (Tuboplus, bombas). Es la fuente del RAG de Nilo → exige 0% inexactitudes.
11Crear Business Partner (RFC genérico)POST /v1/business-partnersHU-04Para clientes no fiscales: dispara creación automática en SAP. Detalle en 04-cumplimiento.md.
12BNPL / aplicación de créditoPOST /v1/credit/applyRefined Backlog §1Pendiente: ¿qué partner financiero?
13Eventos: notificación de entrega al clientePOST /v1/notifications/delivery (callback)HU-02Si preferimos modelo push: nosotros llamamos al agente Nilo cuando cambia el estatus.

Convenciones generales propuestas

  • Versionado en path: /v1/, /v2/ — facilita evolución sin romper a Nilo.
  • Identificadores: ISO 8601 UTC para timestamps; E.164 para teléfonos; {ISO 3166 alpha-2}.{id} para BSUID de WhatsApp; ISO 4217 para moneda.
  • Errores: estructura RFC 7807 (application/problem+json) — type, title, status, detail, instance.
  • Trazabilidad: cada request lleva X-Request-Id (propaga a SAP) y, donde aplique, X-Customer-Code / X-Gps-Lat/Lng.

APIs que nosotros consumimos

SAP (vía BTP Integration Suite)

CapacidadMecanismoUso
Crear orden de ventaiFlow JSON → IDoc ORDERS05 / BAPI BAPI_SALESORDER_CREATEFROMDAT2HU-03
Leer maestro de productos / preciosiFlow → BAPI MDMCaché del catálogo
Validar créditoBAPI BAPI_CUSTOMER_CHECKCREDITLIMITHU-03
Crear Business PartnerBAPI BAPI_BUPA_CREATE_FROM_DATAHU-04
Post Goods IssueBAPI BAPI_GOODSMVT_CREATE (mov tipo 601)HU-06

Los nombres exactos de BAPI/IDoc son referenciales — los confirmamos al hacer el primer iFlow con el equipo SAP.

DispatchTrack

CapacidadMecanismoUso
Crear envíoPOST /shipments (API REST) o IDoc SHPORD según conectorHU-05
Tracking de vehículoGET /shipments/{id}/trackingHU-02
Recibir PODWebhook entrante en POST /v1/internal/webhooks/dispatchtrack/podHU-06

Nilo (probable, sentido inverso)

Posibles webhooks o llamadas que Nilo nos hace y que Nilo expone para que nosotros publiquemos eventos. Confirmar:

  • Webhook nuestro hacia Nilo: cambio de estatus del pedido → para que el agente avise al cliente.
  • Webhook Nilo hacia nosotros: identificación del cliente al inicio de la conversación (BSUID requerido; teléfono opcional, viene solo cuando el usuario no haya adoptado username o esté dentro de la ventana de 30 días / Contact Book), cierre de carrito, intención de compra.

Requisitos no funcionales (NFRs)

NFRValor objetivoPor qué
Latencia POST /v1/orders<60 s P95 desde request hasta confirmación SAPALCOA Contemporáneo + HU-03
Disponibilidad99.5% mínimo para endpoints críticosEl asesor no debe abandonar la herramienta
IdempotenciaObligatoria en todos los POST que escribenRed flaky y retries del agente
AuthOAuth 2.0 client credentials o mTLS — TBDPendiente con Nilo
Rate limitingPor client_id, configurableProteger SAP de tormentas
Audit logCada llamada de escritura: who, what, when, GPS, request body cifradoALCOA Atribuible
Retención de logs5 añosCumplimiento
ObservabilidadTracing distribuido (OpenTelemetry) que cruce Cloud Functions ↔ Cloud Run ↔ BTPDiagnóstico de SLA <60 s
Offline modeEl cliente Nilo lo maneja del lado WhatsApp; nuestro lado debe tolerar bursts de sincronización cuando un asesor sube señalTexcoco, señal baja

Idempotencia (detalle)

Cada POST /v1/orders debe llevar Idempotency-Key (UUID). Si llega un duplicado:

  1. Si la primera ya completó → devolver el mismo resultado (200/201, no 409).
  2. Si la primera está en curso → encolar / responder 409 con Retry-After.
  3. Si la primera falló → procesar como nueva.

Mecanismo: tabla idempotency_keys con TTL 24 h, posiblemente en Cloud SQL o Firestore.

Manejo de errores conocidos

CasoStatusComportamiento
Límite de crédito excedido422 + alerta al asesor (HU-03)El agente Nilo debe explicar al cliente
Stock agotado409 con alternativas sugeridasEl agente puede ofrecer producto similar
Cliente sin RFC y no fiscal200 — se crea BP automáticamenteTransparente
Timeout en BTP504 + log para War RoomReintento controlado
Precio MDM no disponible503 (degradación)Nunca caer a precio hardcoded

Contratos pendientes

Lo que falta para cerrar el contrato real con Nilo:

  1. OpenAPI 3.x de nuestros endpoints — primer entregable concreto sugerido.
  2. Eventos Nilo → nosotros: schema de los webhooks que recibimos.
  3. Eventos nosotros → Nilo: si existe modelo push.
  4. Acuerdo de SLAs cruzados (qué pide Nilo de nosotros, qué pedimos de Nilo).
  5. Modelo de autenticación (mTLS vs OAuth vs API Key con rotación).

Estos son los primeros temas para llevar a la reunión técnica con Nilo. Lista completa en 06-pendientes.md.