Pool de números + routing
Warmup automático, sticky routing, quarantine.
Cuando vas a enviar miles de mensajes al día, un solo número no escala — WhatsApp lo flaggea. La solución es un pool de números calentados orgánicamente y un algoritmo de sticky routing que mantiene a cada cliente siempre hablando con el mismo número.
Tiers de calentamiento
Un número nuevo arranca en Tier 0 con un cap diario muy bajo. A medida que demuestra buena salud (delivery rate, sin spam complaints), Replai lo promueve automáticamente.
| Tier | Cap/día | Días en tier | Health mínima |
|---|---|---|---|
| T0 — Nuevo | 10 | 0 | — |
| T1 — Calentando | 50 | 3 | 85% |
| T2 — Tibio | 250 | 7 | 85% |
| T3 — Caliente | 1.000 | 14 | 90% |
| T4 — Maduro | 5.000 | 30 | 92% |
Si excedes el cap del tier, el send devuelve 429 RATE_LIMITED con header Retry-After apuntando al próximo UTC midnight.
Warmup bot
Para acelerar el calentamiento, Replai puede correr conversaciones cruzadas entre los números del mismo pool — el bot interno simula clientes ocasionales. Esto sube delivery rate sin necesidad de tráfico real (modo OFF por default; lo enciendes en el pool).
Pools
Un NumberPool agrupa N sesiones bajo el mismo tenant. Cada pool tiene:
- Lista de miembros (sesiones con sus tiers).
- Política de routing (sticky por default).
- Historial de miembros que se han ido (logged_out, sustained quarantine).
Sticky routing
Para un leadId dado (el msisdn del cliente, o un id externo que pases), Replai usa rendezvous hashing para elegir un número del pool. Cada combinación (lead, número) produce un score; el número con score más alto gana. Resultado:
- El mismo cliente siempre habla con el mismo número (hasta que ese número muera).
- Si un número entra a quarantine, los leads ruteados a él re-eligen — pero solo después de la ventana sticky de 24h, para no dropear conversaciones activas.
- Si añades un número nuevo al pool, solo afecta a leads nuevos — los viejos se quedan donde estaban.
Health scoring
Cada 5 minutos Replai computa el health score de cada sesión:
health = delivery_rate × (1 - complaint_rate)
— donde delivery_rate = DELIVERED / (DELIVERED + FAILED) en 7 días
— complaint_rate viene de spam complaints reportadas (cuando WhatsApp las expone)Acciones según el score:
| Score | Acción |
|---|---|
| ≥ 0.90 | OK — sigue elegible para promoción al siguiente tier. |
| 0.70 – 0.89 | Warn — promoción pausada; suba la calidad de tu copy. |
| < 0.70 | Quarantine automático. El pool route excluye este número. |
Quarantine + recuperación
Quarantine es no-destructivo: el número sigue conectado, recibe mensajes, pero no se rutean nuevos sends a él. Tras 7 días con score saludable, Replai lo saca automáticamente. Quarantine sostenido (> 14 días) escala al equipo de soporte.
Campaigns
Los campaigns son el caso de uso típico de pool: defines una audiencia (CSV o segment), unas variantes A/B de plantilla, un schedule. Replai materializa los recipients con sticky routing + variante elegida, y el CampaignRunner los va lanzando respetando los tier caps. Ver API Reference → POST /v1/campaigns.