Pasos de la secuencia
Pasos SEND_EMAIL y WAIT, retardos, reglas de activacion y edicion en DRAFT.
Una secuencia se construye con pasos ordenados. Solo hay dos tipos de paso, y solo puedes editarlos mientras la secuencia esta en DRAFT.
Tipos de paso
stepType | Que hace | Campos que usa |
|---|---|---|
SEND_EMAIL | Envia un email | templateVersionId (version PUBLISHED), subject opcional |
WAIT | Espera antes del siguiente paso | delayMinutes (>= 1) |
Los pasos se ordenan por position (entero >= 0).
Anadir un paso
POST /sequences/{id}/steps
Authorization: Bearer <apiKey o accessToken>
X-Tenant-Id: {tenantId}
Content-Type: application/json
{
"stepType": "SEND_EMAIL",
"position": 0,
"templateVersionId": "ver_123"
}
| Campo | Requerido | Notas |
|---|---|---|
stepType | Si | SEND_EMAIL o WAIT |
position | No | Orden del paso (entero >= 0) |
delayMinutes | Solo en WAIT | Minutos de espera (>= 1) |
templateVersionId | Solo en SEND_EMAIL | Version de plantilla en estado PUBLISHED |
subject | No | Sobrescribe el asunto (hasta 998 caracteres) |
Un paso WAIT de 1440 minutos espera un dia antes del siguiente envio:
{
"stepType": "WAIT",
"position": 1,
"delayMinutes": 1440
}
Endpoints de pasos
| Metodo | Ruta | Scope | Descripcion |
|---|---|---|---|
POST | /sequences/:id/steps | sequences:write | Anadir paso (solo DRAFT) |
PATCH | /sequences/:id/steps/:stepId | sequences:write | Editar paso (solo DRAFT) |
DELETE | /sequences/:id/steps/:stepId | sequences:write | Borrar paso (solo DRAFT) |
Reglas de activacion
Al llamar a POST /sequences/:id/activate se valida la cadena de pasos. Debe cumplir:
- Al menos un paso.
- Al menos un paso
SEND_EMAIL(una secuencia solo de esperas no envia nada). - Nunca dos
WAITconsecutivos — junta las esperas en un solo paso.
Si la cadena no es valida, la activacion falla y la secuencia sigue en DRAFT.
Como se ejecutan los retardos
El motor agrupa las esperas: cuando termina un envio, busca el siguiente SEND_EMAIL, suma los delayMinutes de los WAIT intermedios y programa un job diferido en BullMQ (delayMs = delayMinutes * 60000). Cada job es idempotente, con reintentos y backoff exponencial, asi que un reintento nunca duplica el envio. El email sale por el pipeline normal — con supresiones y cuota aplicadas, y routing de idioma por contacto.