Saltar al contenido principal
LU
Volver al portafolio

Caso de estudio

Escalar una plataforma de mensajería omnicanal a más de 100M de mensajes al mes

SMS/MMS/RCS para 19 cadenas retail — rápida, conforme y observable

Cliente
Publicis Sapient / Albertsons Companies
Rol
Líder Técnica
Período
Ene 2022 – Actualidad

Albertsons Companies opera 19 cadenas retail de supermercados y farmacias, y todas llegan a sus clientes por mensaje de texto con marketing: promociones, ofertas y mensajes de campaña. Mi equipo es dueño de la plataforma unificada de mensajería de marketing detrás de eso — más de 100 millones de mensajes al mes.

Impacto de un vistazo

Envíos salientes (<80 → 500 TPS)
Procesamiento entrante (500 → 5.000 TPS)
10×
Mensajes al mes
100M+
Alcance a clientes con RCS
+30%

El reto

Cuando llegué como líder técnica, la plataforma movía menos de 80 mensajes por segundo en cada dirección — tanto los envíos salientes al operador a través de Sinch como el flujo entrante que volvía desde Sinch (confirmaciones de entrega y respuestas de clientes). Eso no alcanzaba ni de cerca para campañas pico en 19 cadenas, y con los datos de entrega llegando muy por detrás de los envíos, el seguimiento de campañas era cualquier cosa menos en tiempo real.

Además del techo de throughput, el cumplimiento de TCPA (la ley de EE. UU. que regula el consentimiento y los horarios permitidos en mensajería) no lo garantizaba el sistema mismo, dejando a una empresa Fortune 500 expuesta a demandas colectivas por millones. Y los clientes migraban hacia canales más ricos que la plataforma no hablaba en absoluto, como RCS. Cada mejora tenía que aterrizar en una plataforma viva, con tolerancia cero a caídas en la entrega.

Qué hice

Lo ataqué en tres entregas a producción. Primero, el camino de salida: refactoricé el pipeline de envío SMS/MMS hacia Sinch — Spring WebFlux y Kafka — corrigiendo los problemas de rendimiento que lo limitaban, y llevé el throughput sostenido de salida de menos de 80 a 500 transacciones por segundo: una mejora de 6×, liberada a producción por sí sola.

Segundo, alcance y cumplimiento juntos: diseñé el canal RCS de punta a punta — integración con Sinch, Google RCS Business Agents y una capa de despacho con patrón Command que enruta cada mensaje al mejor canal disponible. Los chequeos TCPA de campaña quedaron diseñados dentro del propio camino de envío, validando en cada mensaje que el destinatario hizo opt-in y que el envío cae dentro de las ventanas de horario permitidas. Las violaciones pasaron de riesgo operativo a estructuralmente imposibles, y la mensajería enriquecida subió el alcance a clientes en un 30%.

Tercero, el flujo entrante de vuelta desde Sinch — confirmaciones de entrega y respuestas de clientes. La plataforma podía recibir 1.200 mensajes por segundo en el tópico de Kafka, pero los servicios detrás procesaban solo unos 500. Rediseñé la ingesta y el procesamiento con Java 21 Virtual Threads para que la plataforma ahora reciba más de 5.000 mensajes por segundo en el tópico y los procese casi a la misma velocidad — una mejora de 10× en procesamiento que convirtió el seguimiento de campañas en una vista casi en tiempo real.

En todo el proceso instrumentamos la plataforma con un stack de observabilidad Grafana + Loki, de modo que la salud de las entregas es visible en tiempo real en las 19 cadenas.

Resultados

  • Envíos salientes escalados de menos de 80 a 500 TPS sostenidos para SMS/MMS (6×) — liberado a producción primero
  • Flujo entrante rediseñado: más de 5.000 TPS recibidos en el tópico y procesados casi a la misma velocidad, desde 1.200 recibidos / 500 procesados — el seguimiento de campañas pasó a ser casi en tiempo real
  • Chequeos TCPA al enviar: estado de opt-in y ventanas de horario permitidas validados en cada mensaje — millones en exposición a demandas colectivas eliminados
  • +30% de alcance a clientes con el nuevo canal RCS de punta a punta
  • Más de 100M de mensajes al mes en 19 cadenas retail, observables en tiempo real con Grafana + Loki

Stack tecnológico

  • Java 21
  • Spring WebFlux
  • Kafka
  • MongoDB
  • Sinch
  • RCS
  • Grafana
  • Loki
  • TCPA
  • GCP