Notificaciones al destinatario
Correos y mensajes de WhatsApp automáticos para tu comprador en cada hito del envío, con reglas de consentimiento y control por evento y canal.
SendIt puede avisarle a tu comprador, la persona que recibe el paquete, cuando su pedido avanza. Los avisos salen por correo y por WhatsApp, en español, y tú no construyes nada. Tú controlas qué eventos notifican y por qué canal.
Qué se notifica
| Evento | Cuándo se dispara | Correo | |
|---|---|---|---|
order_confirmed |
La orden pasa a CONFIRMED |
Sí | Sí |
label_purchased |
Se compra la guía de un envío | Sí | Sí |
shipment_delivered |
El rastreo llega a DELIVERED |
Sí | Sí |
claim_filed |
Se presenta una reclamación de seguro | Sí | Sí |
La entrega ocurre en segundo plano. Nunca retrasa la compra de la guía ni la respuesta del API.
Reglas de consentimiento
- WhatsApp requiere opt-in explícito. La LFPDPPP exige consentimiento antes de cualquier mensaje. WhatsApp se envía solo cuando la orden vinculada al envío tiene
customerOptInToWhatsapp: true. Un envío sin orden vinculada jamás recibe WhatsApp. - El correo es transaccional. Son mensajes de servicio sobre el propio envío del destinatario, así que no requieren opt-in individual. El control es el interruptor por organización que se describe abajo. El correo se toma del
customerEmailde la orden, o del correo de contacto de la dirección destino. - El modo de prueba nunca notifica. Toda operación con
livemode: falsese registra comoSKIPPEDy no envía nada real.
Los mensajes de WhatsApp usan plantillas preaprobadas por Meta, en español (es-MX). Por ejemplo, la de label_purchased incluye el número de rastreo, la paquetería y la fecha estimada de entrega.
Controla qué se envía
Los interruptores son por organización, por evento y por canal. Un interruptor ausente significa habilitado (la función viene encendida): solo creas filas para apagar cosas.
Consulta la matriz completa
curl https://api.sendit.mx/v1/notification-settings \
-H "X-API-Key: sk_live_..."
{
"success": true,
"data": [
{ "eventType": "order_confirmed", "channel": "EMAIL", "isEnabled": true, "subjectOverride": null },
{ "eventType": "order_confirmed", "channel": "WHATSAPP", "isEnabled": true },
{ "eventType": "label_purchased", "channel": "EMAIL", "isEnabled": true, "subjectOverride": "Tu guía {{trackingNumber}} está lista" },
{ "eventType": "shipment_delivered", "channel": "WHATSAPP", "isEnabled": false }
]
}
4 eventos × 2 canales = 8 filas con su valor efectivo. Las filas de correo traen además subjectOverride, que es null cuando usas el asunto que trae SendIt. Las de WhatsApp no lo traen. Cualquier miembro autenticado puede leer la configuración; el alcance notification_settings:read solo aplica a las llaves de API.
Apaga o enciende interruptores
curl -X PUT https://api.sendit.mx/v1/notification-settings \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"settings": [
{ "eventType": "shipment_delivered", "channel": "WHATSAPP", "isEnabled": false }
]
}'
Requiere rol OPERATOR o superior y el alcance notification_settings:write. Es una actualización parcial: solo tocas las filas que mandas.
Parámetros del cuerpo
settingsobjeto[]
Interruptores a actualizar. Cada elemento trae eventType (order_confirmed | label_purchased | shipment_delivered | claim_filed), channel (EMAIL | WHATSAPP) e isEnabled (boolean). En filas EMAIL acepta además subjectOverride.
objeto[]Apagar un canal detiene esa notificación en toda la organización. Apagar WhatsApp no tiene efecto sobre mensajes que ya se suprimían por falta de opt-in.
Personaliza el asunto del correo
En una fila EMAIL, subjectOverride reemplaza el asunto que trae SendIt. Omítelo para dejar el asunto como está, mándalo con un texto de hasta 150 caracteres para reemplazarlo, o mándalo en null para volver al asunto original.
curl -X PUT https://api.sendit.mx/v1/notification-settings \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"settings": [
{
"eventType": "label_purchased",
"channel": "EMAIL",
"isEnabled": true,
"subjectOverride": "Tu guía {{trackingNumber}} está lista"
}
]
}'
Cada evento acepta solo sus propias variables:
| Evento | Variables permitidas en el asunto |
|---|---|
order_confirmed |
customerName, orderNumber, totalPrice |
label_purchased |
customerName, carrier, trackingNumber, estimatedDelivery |
shipment_delivered |
customerName, trackingNumber, deliveredAt |
claim_filed |
customerName, claimNumber, shipmentId |
| Código | Cuándo | Cómo resolverlo |
|---|---|---|
400 INVALID_INPUT |
Mandaste subjectOverride en una fila WHATSAPP |
El copy de WhatsApp lo aprueba Meta y no es editable — quita el campo |
400 INVALID_INPUT |
El asunto usa una variable que ese evento no publica | Usa solo las variables de la tabla de arriba |
400 INVALID_INPUT |
El asunto trae un salto de línea o pasa de 150 caracteres | Manda una sola línea de máximo 150 caracteres |
Pon tu marca en los correos
Los correos al destinatario pueden llevar tu logo, tu color y tu pie de página. Con publicTrackingPage activo, esa misma marca aparece en la página de rastreo público.
| Método | Ruta | Acceso |
|---|---|---|
GET |
/v1/notification-settings/branding |
Cualquier miembro, o llave con notification_settings:read |
PUT |
/v1/notification-settings/branding |
Rol ADMIN o superior + notification_settings:write |
Parámetros del cuerpo
logoUrl?string
URL https del logo, máximo 500 caracteres. Aparece en el encabezado del correo.
stringaccentColor?string
Color de acento en hexadecimal de seis dígitos (por ejemplo #4361EE).
stringreplyTo?string
Correo al que responde tu comprador, máximo 320 caracteres.
stringfooterText?string
Texto plano del pie de página, máximo 500 caracteres. En la página pública llega como footer.
stringpublicTrackingPage?boolean
true = muestra tu marca en la página de rastreo público. Solo aplica ahí.
booleanfalsereplyTo aplica solo al correo y nunca sale en la respuesta pública. El logoUrl y el accentColor aplican a los dos.
curl -X PUT https://api.sendit.mx/v1/notification-settings/branding \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"logoUrl": "https://cdn.tutienda.mx/logo.png",
"accentColor": "#4361EE",
"replyTo": "hola@tutienda.mx",
"footerText": "Gracias por comprar en Tu Tienda.",
"publicTrackingPage": true
}'
{
"success": true,
"data": {
"logoUrl": "https://cdn.tutienda.mx/logo.png",
"accentColor": "#4361EE",
"replyTo": "hola@tutienda.mx",
"footerText": "Gracias por comprar en Tu Tienda.",
"publicTrackingPage": true
}
}
Todos los campos son opcionales, y GET omite los que nunca configuraste. Una organización nueva devuelve { "success": true, "data": {} }.
Las plantillas de WhatsApp no cambian nunca.
| Código | Cuándo | Cómo resolverlo |
|---|---|---|
400 INVALID_INPUT |
logoUrl no es https o pasa de 500 caracteres |
Publica el logo en una URL https propia |
400 INVALID_INPUT |
accentColor no es un hexadecimal de seis dígitos |
Usa el formato #RRGGBB |
400 INVALID_INPUT |
replyTo no es un correo válido, o footerText pasa de 500 caracteres |
Corrige el valor y reenvía |
403 INSUFFICIENT_SCOPE |
La llave no tiene notification_settings:write |
Emite una llave con ese alcance |
Consulta las plantillas
GET /v1/notification-templates regresa el catálogo de plantillas, una por evento y canal (4 × 2 = 8), para que tu dashboard muestre una galería de vista previa. Es de solo lectura y usa el alcance notification_settings:read. Las plantillas no son editables: el texto está aprobado por Meta en WhatsApp, o es propio del código en correo.
curl https://api.sendit.mx/v1/notification-templates \
-H "X-API-Key: sk_live_..."
{
"success": true,
"data": [
{
"eventType": "label_purchased",
"channel": "EMAIL",
"variables": ["customerName", "carrier", "trackingNumber", "estimatedDelivery"],
"subject": "Tu envío está en camino — FEDMX123456789",
"exampleBody": "Hola María,\n\nGeneramos la guía de tu envío con FedEx.\n…"
},
{
"eventType": "label_purchased",
"channel": "WHATSAPP",
"variables": ["customerName", "carrier", "trackingNumber", "estimatedDelivery"],
"templateName": "label_purchased",
"exampleBody": "Hola María, …",
"configured": true
}
]
}
Las entradas de correo se renderizan con tu marca y tu asunto activos: subject refleja tu subjectOverride si lo definiste, y exampleHtml trae la vista previa con tu logo, color y pie.
Las plantillas de WhatsApp están en español (es-MX), preaprobadas por Meta y se muestran sin marca. configured indica si la plantilla está disponible. El canal de correo funciona de manera independiente.
Semántica de entrega
- Sin duplicados. El reprocesamiento de un mismo evento no envía un segundo mensaje por el mismo canal.
- Los canales son independientes. Una falla en un canal nunca bloquea al otro ni a tus webhooks.