SMS

¿Qué es un SMSC?

Un SMSC es un servicio de red que almacena mensajes de texto y los reenvía para su entrega.

Un texto puede llegar después de que un teléfono se reconecte, aunque el remitente lo haya enviado antes.

¿Qué significa almacenar y reenviar?

El centro de mensajes guarda un texto antes de intentar entregarlo al teléfono.

La aceptación por parte de la red no confirma que el teléfono haya recibido el texto. Un teléfono apagado o fuera de cobertura puede dejar un mensaje en espera. Reconectar el teléfono hace posible otro intento de entrega. El mensaje debe seguir siendo elegible para ese intento.

La especificación 3GPP 23.040 describe el rol del centro en SMS.

¿Cuánto tiempo puede esperar un mensaje?

La red puede realizar más intentos de entrega mientras la ventana de entrega del mensaje permanezca abierta. Esa ventana se denomina período de validez.

El estándar SMS permite a los remitentes indicar un período de validez. Tu proveedor decide si puedes configurarlo a través de su API.

La entrega puede terminar en expiración cuando esa ventana se cierra. Un informe de expiración no implica que la solicitud de envío inicial haya fallado.

En un flujo sensible al tiempo, la aplicación aún necesita aplicar su propio plazo. Si un código de verificación es válido por diez minutos y llega después de cuatro horas, tu servidor debe rechazarlo. Un texto tardío no debe extender la vigencia de la acción que describe.

¿Dónde se ubica el centro en relación con mi aplicación?

Tu aplicación puede comunicarse con un centro de mensajes a través de un proveedor de mensajería, en lugar de gestionar la conexión con el operador por cuenta propia.

Los proveedores usan SMPP para enviar textos a los centros de mensajes, directamente o a través de otros servicios de enrutamiento. La referencia de SMPP describe estas conexiones.

Tu proveedor puede confirmar una solicitud antes de que el siguiente servicio de red la acepte. El centro de mensajes puede entonces aceptar el texto antes de que el teléfono lo reciba. Cada confirmación describe una etapa del recorrido.

Aceptado pero no entregado explica cómo aparecen esas etapas en una aplicación.

¿Qué puedo observar a través de Bird?

Puedes inspeccionar la transferencia al operador y la entrega reportada sin conectarte directamente a un centro de mensajes.

El campo sent_at de la respuesta del mensaje registra cuándo Bird entrega el mensaje al operador. delivered_at registra la entrega confirmada. Ambos campos contienen una marca de tiempo o null. La ausencia de un tiempo de entrega no significa que el teléfono haya rechazado el texto.

El endpoint de envío de Bird rechaza validity_period con HTTP 422 SMSUnsupportedFeature. No puedes configurar la ventana de retención del operador a través de ese campo. La respuesta no devuelve ese campo.

Bird emite sms.expired cuando el operador informa la expiración. Un acuse de recibo en búfer, es decir que el operador retiene el texto, no produce ningún cambio de estado público. Acuses de recibo de entrega explica qué informes de la red llegan a tu aplicación.

¿Qué cambia esto en un flujo de envío?

Tu aplicación necesita tratar la entrega como un evento posterior con un resultado separado del envío.

Mantén un resultado pendiente diferenciado de un fallo. Aplica plazos para códigos de verificación y otras acciones sensibles al tiempo en tu aplicación. Usa un acuse de recibo de entrega como el informe de la red sobre la entrega. Eso no demuestra que alguien haya leído el texto.

En resumen

  1. Aceptación y entrega son etapas separadas.

    Un centro de mensajes puede aceptar un texto antes de que el teléfono del destinatario sea alcanzable.

  2. El almacenamiento da otra oportunidad a la entrega.

    Un texto en espera puede llegar después de que el teléfono se reconecte, siempre que la ventana de entrega siga abierta.

  3. La ventana de entrega es finita.

    La red puede informar la expiración cuando su período de espera termina.

  4. Tu integración no necesita conectarse directamente.

    Un proveedor de mensajería puede gestionar la conexión entre tu aplicación y la red del operador.

Construye sobre la misma red.

Obtén una clave API de prueba de inmediato. El acceso a producción se desbloquea cuando añades un método de pago y verificas un remitente.

Tu próxima idea.
Lista para conectar.