Configurar Webhook
- Introduzca la dirección receptora. Guarde en DGrid una URL HTTPS pública proporcionada por usted o su equipo técnico.
- Active Webhook.
- Obtenga el Signing Secret. Pulse Rotate Secret, copie el secreto de forma segura y añádalo a la configuración del receptor. Manténgalo privado. Cada rotación genera otro secreto; conserve la clave anterior hasta terminar las entregas pendientes.
- Elija los eventos. Active los tipos de notificación deseados.
- Pruebe las notificaciones. Compruebe que el receptor acepta la notificación y verifica su firma.
Eventos disponibles
Los seis eventos siguientes están disponibles en los ajustes de Webhook. Identifíquelos mediante eleventType del nivel superior del JSON. Respete mayúsculas, puntos y guiones bajos.
El saldo recargado y el de suscripción son distintos. La alerta de saldo de suscripción bajo se envía como máximo una vez por suscripción y mes UTC; no hay un evento separado de saldo de suscripción agotado. Auto Deposit fallido se refiere a un intento que realmente falló, no a una advertencia de fondos o autorización anterior a un intento.
Solicitud entrante
DGrid envía un HTTPPOST a la URL guardada con Content-Type: application/json. Todas las notificaciones tienen la misma estructura externa:
Datos de eventos
Los ejemplos siguientes solo sustituyendata en la estructura común. Los ID, fechas y saldos son valores de ejemplo.
Saldo recargado bajo: balance.low
Saldo recargado agotado: balance.depleted
eventType es una cadena y test es un booleano. balance es una cadena decimal con signo en USD y puede ser cero o negativa. Representa el saldo recargado, excluyendo el saldo de suscripción. Conserve la precisión sin convertir a coma flotante ni aplicar el redondeo o truncado usado en el correo.
Auto Deposit completado: auto_recharge.succeeded
Auto Deposit fallido: auto_recharge.failed
attemptId identifica el intento, state es fijo como confirmed o failed, respectivamente, y occurredAt es la hora del evento UTC RFC 3339, posiblemente con fracciones de segundo. Solo contienen esos tres campos: no hay eventType o test interno, importe, hash de transacción, cartera ni motivo del fallo.
Suscripción activa: subscription.activated
sourceId es el UUID de la suscripción.
Saldo de suscripción bajo: subscription.balance_low
sourceId combina el UUID y el mes UTC como <subscription UUID>:YYYY-MM. Los tres campos de suscripción son cadenas y occurredAt es una marca de tiempo UTC RFC 3339. No incluyen nombre del plan, fechas de suscripción, cuota, porcentaje ni cartera. No suponga que contienen los detalles del correo.
Notificaciones de prueba
Las pruebas tienentest: true en el nivel superior. Cada evento usa la misma estructura de prueba de tres campos; data.eventType coincide con el evento seleccionado y el eventType externo. Ejemplo al elegir Auto Deposit completado:
test externo antes de validar el esquema real o procesar datos de negocio. Las pruebas no incluyen campos reales como attemptId o sourceId; un balance vacío no significa cero. No use pruebas para modificar saldos, registrar recargas o activar suscripciones.
Verificar la firma
Cada solicitud incluye cuatro encabezados relacionados:
Los nombres de encabezados no distinguen mayúsculas. No hay un encabezado separado de versión de clave.
El Signing Secret mostrado por Rotate Secret es una clave de 32 bytes codificada en base64url sin relleno. Decodifíquela a bytes antes de calcular el HMAC; no use directamente el texto mostrado como clave.
DGrid-Signature en tiempo constante y exija la versión v1. Se recomienda una ventana de cinco minutos para limitar ataques de repetición; sincronice el reloj del receptor. Tras verificar, analice el JSON y compruebe que DGrid-Event-Id coincide con id.
Responder a las entregas
Guarde de forma duradera la notificación verificada y devuelva cualquier HTTP2xx en menos de cinco segundos. Por ejemplo, persístala en una cola y devuelva:
200 cuyo JSON describa un error se considera aceptado.
Las respuestas no 2xx, fallos de red y tiempos de espera agotados provocan reintentos, hasta cinco intentos en total, incluido el primero. No se siguen redirecciones. Realice el procesamiento lento después de guardar la notificación de forma duradera.
Puede haber duplicados y no se garantiza el orden. Elimine los duplicados mediante el id externo, que se mantiene en los reintentos. Devuelva 2xx a un duplicado ya aceptado sin repetir sus efectos. Las marcas de tiempo, firmas y bytes originales pueden cambiar; no los use, ni createdAt, para deduplicar o establecer el orden de los eventos de negocio.

