Cómo configurar las llamadas de estado de entrega de SMS
Aprende a configurar las devoluciones de estado de entrega de SMS eligiendo el caso de uso adecuado, preparando un endpoint, mapeando eventos y registrando la URL.

Elige el caso de uso de callback correcto
Comienza con una pregunta: ¿qué debería cambiar el callback en tu negocio? Para alertas de pedidos, monitoreo de entrega de OTP o notificaciones a clientes, la respuesta suele ser diferente. A una tienda le podría importar un estado de “entregado” antes de enviar un recibo. A un banco le podría importar “fallido” dentro de 30 segundos, porque un código de inicio de sesión que nunca llega tiene un costo de soporte directo.
Esa elección es importante antes de que toques cualquier configuración. Si estás documentando cómo configurar callbacks de estado de entrega de SMS, elige primero un flujo de trabajo y nombra el resultado en palabras simples: confirmar entrega, detectar fallos o rastrear retrasos. Un callback puede soportar los tres más adelante, pero la primera versión debe responder a una pregunta práctica.
Mantén el alcance estrecho. Un equipo de envío puede necesitar solo actualizaciones de estado para el SMS final en la cadena, no cada recordatorio. Un flujo de restablecimiento de contraseña puede necesitar un callback solo cuando el mensaje es aceptado o rechazado, ya que “esperando” no es un estado útil para un usuario que ya está mirando una pantalla de inicio de sesión.
Confirma el modelo de callback de tu proveedor de SMS
Los proveedores no hablan todos el mismo idioma. Algunos utilizan recibos de entrega, otros utilizan webhooks, y algunos exponen una URL de estado que debes consultar. Lee la documentación del proveedor para conocer los nombres exactos de los eventos y verifica qué estados están disponibles.
Un proveedor puede enviar solo estados finales. Otro puede enviar varias actualizaciones para un mensaje, y eso cambia cómo almacenas los datos más adelante. Si el proveedor soporta tanto callbacks a nivel de mensaje como a nivel de cuenta, elige el que coincida con el flujo de trabajo que elegiste arriba. Ese detalle evita confusiones cuando llega la primera prueba y tu aplicación ve dos eventos para un SMS.
Hay una pequeña trampa aquí. La documentación a menudo muestra un ejemplo de JSON, luego la cuenta real devuelve una forma ligeramente diferente para un nivel de producto diferente. Compara las notas de la API, las etiquetas del panel y cualquier carga útil de muestra antes de conectar el endpoint. Si tu proveedor ofrece un documento separado para recibos de entrega, lee ese también.
Para equipos que ya manejan otros sistemas basados en eventos, el patrón se sentirá familiar. La lógica es similar a eventos de webhook de correo electrónico para correos electrónicos transaccionales: necesitas saber qué eventos existen, cuáles te importan y cuáles nunca deberían activar lógica orientada al cliente.
Prepara tu endpoint público de callback
Tu punto final de callback necesita una URL pública HTTPS. No un puerto local. No una IP privada. El proveedor debe poder acceder a él desde fuera de tu red, y la mayoría de las plataformas de SMS rechazarán HTTP simple en producción. Una estructura común es /webhooks/sms/status, porque se mantiene legible cuando los registros y los paneles se llenan.
Haz que la ruta sea estable. Si la renombras cada semana, la configuración de tu panel se quedará atrás respecto a tu código. Usa una ruta, un método y un controlador para la primera versión. POST es la opción habitual.
Acepta solicitudes entrantes sin bloquearse en trabajos lentos. El punto final debe leer la solicitud, validar lo básico y responder rápidamente. El procesamiento pesado pertenece a una cola de trabajos o tarea en segundo plano. De esa manera, un estallido de callbacks no mantiene la conexión abierta el tiempo suficiente para causar reintentos.
Prueba la ruta con un cuerpo de solicitud simple antes de conectar al proveedor. Una respuesta 200 en un POST ficticio te dice más que una larga sesión de depuración después. Si ya te sientes cómodo con el diseño de callbacks de otros canales, la misma disciplina aparece en las mejores prácticas de notificación push web, especialmente en torno al tiempo de respuesta y la claridad del punto final.
Define la carga útil del evento que tu aplicación necesita
No almacenes cada campo solo porque el proveedor lo envía. Mapea la devolución de llamada en tu modelo interno primero. Como mínimo, la mayoría de los equipos necesitan un ID de mensaje, destinatario, estado, marca de tiempo y campo de código de error. Algunos proveedores también incluyen datos del operador, país o una referencia de puerta de enlace, y esos pueden ayudar durante el trabajo de soporte.
Mantén tu mapeo estricto. Si el proveedor llama a un campo sms_id y tu base de datos usa provider_message_id, escribe la traducción una vez y reutilízala. Eso previene problemas de “funciona en staging” cuando llega una segunda integración. Una carga útil de devolución de llamada debe actualizar un registro de SMS, no crear duplicados misteriosos.
Piensa en el historial de estado, no solo en el último estado. Un solo mensaje puede pasar de aceptado a enviado a entregado, o de en cola a fallido. Si colapsas eso en un solo campo de texto demasiado pronto, pierdes la pista que explica por qué un código llegó tarde. Esa pista importa cuando un cliente dice: “Nunca lo recibí”, y el soporte necesita más que un encogimiento de hombros.
Para los equipos que ya gestionan la identidad del remitente y la confianza del mensaje en el correo electrónico, el mismo tipo de disciplina de campo aparece en DKIM SPF DMARC configuración para transacciones y otro trabajo de autenticación. El modelo de datos es diferente, pero el hábito es el mismo: captura los campos que demuestran lo que sucedió.
Registra la devolución de llamada en tu configuración de SMS
La mayoría de los proveedores te permiten ingresar la URL de devolución de llamada en una pantalla de panel o a través de una configuración de API. Algunos requieren configuración a nivel de cuenta primero, luego sobrescrituras a nivel de mensaje más tarde. Busca etiquetas como devolución de llamada de entrega, devolución de llamada de estado, URL de webhook o URL de recibo. La redacción varía, pero el objetivo no.
Usa los nombres de campo exactos del proveedor cuando el panel los solicite. Una URL para eventos de entrega puede ser diferente de una URL para respuestas entrantes. Si mezclas los dos, tu aplicación puede recibir datos que no puede interpretar. Ese es un error simple, y es lo suficientemente común como para merecer un elemento de lista de verificación.
Los permisos pueden importar aquí. Puede ser necesario una cuenta solo para administradores para cambiar la configuración de devolución de llamada, o una clave de API puede necesitar un alcance de escritura. Si el panel solicita verificación antes de guardar, termina ese paso antes de enviar el código. De lo contrario, la devolución de llamada puede parecer “configurada” mientras que ninguna solicitud llega a tu punto final.
Una vez que se guarda la configuración, envía un mensaje desde la misma cuenta o inquilino que usas en producción. Una devolución de llamada configurada en el espacio de trabajo incorrecto es un fracaso aburrido, lo cual es bueno solo en el sentido de que los fracasos aburridos son más fáciles de arreglar que los silenciosos.
Asegure y autentique las solicitudes entrantes
Nunca confíes en el cuerpo de la solicitud por defecto. Verifica un token secreto compartido, un encabezado de firma, una lista blanca de IP o un sello de tiempo firmado, dependiendo de lo que tu proveedor soporte. Uno de esos métodos puede ser suficiente por sí solo, pero muchos equipos combinan dos verificaciones para un mejor control.
La validación de la firma debe ocurrir antes de cualquier escritura en la base de datos. Si la firma falla, rechaza la solicitud y registra el intento. Si el proveedor incluye un sello de tiempo, compáralo con el reloj de tu servidor para reducir el riesgo de repetición. Un callback enviado ayer no debería ser aceptado hoy solo porque el formato aún parece válido.
La lista blanca de IP suena simple hasta que un proveedor cambia la infraestructura. Úsala solo si el proveedor publica rangos fijos y los mantiene actualizados. Los tokens secretos suelen ser más fáciles de mantener, y la validación de la firma es más fuerte que un token estático por sí solo. Un breve comentario: si tu equipo de seguridad pide los tres, no están siendo dramáticos.
No olvides la protección del transporte. HTTPS es la base. Los certificados deben ser válidos, y se deben evitar redirecciones si el proveedor no las sigue. Este es uno de esos pasos que se siente aburrido hasta que el primer actor malicioso intenta publicar actualizaciones de entrega falsas en tu sistema.
Almacena las actualizaciones de entrega en tu sistema
Almacena cada callback contra el registro original de SMS utilizando el ID de mensaje del proveedor y tu propio ID interno. Ese enlace es la clave para cada informe posterior. Sin él, terminas buscando en los registros por número de teléfono, lo cual se vuelve complicado rápidamente una vez que múltiples campañas utilizan el mismo destinatario.
Escribe los cambios de estado en orden. Si el proveedor envía en cola, luego enviado, luego entregado, mantén esa secuencia. Si un callback más antiguo llega tarde, ignóralo o compáralo con el último estado conocido antes de guardarlo. Una actualización de “enviado” retrasada no debe sobrescribir un estado de “entregado” más reciente.
Utiliza marcas de tiempo tanto para el tiempo del proveedor como para el tiempo de recepción local si puedes. La primera ayuda con el rastreo externo. La segunda ayuda con la respuesta a incidentes cuando tu propio servidor fue lento o estuvo brevemente fuera de servicio. Esa combinación te da suficiente detalle para responder a un ticket de soporte sin adivinar.
Una tabla simple puede ayudar al equipo a acordar el manejo de estados:
| Estado del proveedor | Acción interna | Consecuencia de ejemplo |
|---|---|---|
| en cola | Guardar registro inicial | El mensaje está esperando ser enviado |
| enviado | Marcar transmisión iniciada | El operador aceptó el mensaje |
| entregado | Marcar entrega completa | El usuario probablemente recibió el SMS |
| fallido | Almacenar código de error y razón | Activar soporte o lógica de reintento |
Piensa también en los informes posteriores. Si tu equipo de éxito del cliente quiere ver las tasas de entrega por campaña, almacena un ID de campaña junto al mensaje. Si finanzas quiere reconciliar el volumen de OTP, guarda el nombre de la plantilla. Campos pequeños ahorran largas reuniones.
Configura alertas y manejo de respaldo
Los callbacks fallan de maneras predecibles: el endpoint devuelve 500, la verificación de firma comienza a rechazar todo, o el proveedor deja de enviar solicitudes para una cuenta específica. Coloca una alerta en cada uno de esos casos. Si no llega ningún callback para un mensaje después de un tiempo razonable, eso es una señal que vale la pena escalar o al menos enviar un correo electrónico.
Configura una alerta para “callbacks detenidos”, otra para “validación fallida” y una tercera para “estado de error recibido”. Esos son tres problemas diferentes. Un callback faltante puede significar problemas de red. Un estado fallido puede significar que el operador rechazó el SMS. Un fallo de validación puede significar que tu secreto rotó y el proveedor no fue actualizado.
Tenga un camino de respaldo. Si el proveedor admite sondeos, utilícelo cuando falten o se retrasen las devoluciones de llamada. El sondeo no debería ser su primera opción, pero es mejor que los puntos ciegos. Algunos equipos solo sondean para mensajes de alto valor, como OTPs o confirmaciones de pago, lo que mantiene el tráfico adicional contenido.
Si su equipo ya observa señales de entregabilidad en otros canales, hábitos similares se aplican en las mejores prácticas para manejar rebotes de correo electrónico. El canal es diferente, pero la respuesta operativa es la misma: observe los estados de error, regístrelos de manera clara y decida cuándo reintentar, alertar o detenerse.
Documente la regla de respaldo en un solo lugar y haga que el soporte la lea. Un cliente no debería tener que adivinar si un SMS fallido se reintentará automáticamente. Si la respuesta es “no para OTPs”, dígalo claramente. Si la respuesta es “sondear después de 10 minutos”, escriba el número exacto una vez y úselo en todas partes.
En esta página
← Todos los artículosUn clic. Nos dice qué escribir a continuación.
No hay calificaciones aún — la tuya sería la primera.
Comentarios
Los comentarios se leen antes de aparecer.