Triggers Programados
Configura automatizaciones que se ejecutan segun un horario predefinido.
Como Funcionan
Flujo: Scheduler Timer -> Verificar Agentes Activos -> Evaluar Condiciones
Luego:
- Si pasa condiciones -> Encolar Ejecucion
- Si no pasa -> Esperar siguiente ciclo
Los triggers programados:
- Se verifican segun su intervalo
- Buscan registros que cumplan condiciones
- Ejecutan acciones para cada match
- Mantienen historial de ejecuciones
Tipos de Schedule
SCHEDULED
Trigger generico programado
Configuracion:
- interval: Intervalo en minutos
- time: Hora especifica (HH:MM)
- days: Dias de la semana
- timezone: Zona horaria
- filters: Condiciones adicionales
Ejemplo:
{
"eventType": "SCHEDULED",
"configuration": {
"interval": 60, // Cada hora
"time": "09:00", // A las 9am
"days": ["mon", "tue", "wed", "thu", "fri"],
"timezone": "America/Mexico_City"
}
}
DAILY_DIGEST
Resumen diario automatico
Configuracion:
- time: Hora de envio
- recipients: Lista de destinatarios
- includeMetrics: Metricas a incluir
- format: Formato (email, slack, etc.)
Uso tipico:
- Resumen de actividad del dia
- Candidatos nuevos
- Pendientes por revisar
- Alertas vencidas
REMINDER_DUE
Recordatorio de vencimientos
Configuracion:
- entityType: Tipo de entidad a verificar
- daysBefore: Dias antes del vencimiento
- notifyTo: A quien notificar
- action: Que hacer
Entidades soportadas:
- document_request -> Solicitudes de documentos
- signature_request -> Firmas pendientes
- test_assignment -> Tests por vencer
- event -> Eventos proximos
- onboarding_item -> Items de onboarding
INACTIVITY_CHECK
Verificacion de inactividad
Configuracion:
- entityType: Tipo de entidad
- inactiveDays: Dias sin actividad
- action: Accion a tomar
- excludeTags: Tags a excluir
Usos tipicos:
- Candidatos sin movimiento X dias
- Procesos estancados
- Vacantes sin aplicaciones
- Usuarios inactivos
Configurar Schedule
Interfaz de Configuracion
Configurar Trigger Programado
| Campo | Opciones |
|---|---|
| Tipo | SCHEDULED |
| Frecuencia | Cada X minutos / Hora especifica / Intervalo + hora |
| Dias | Lun, Mar, Mie, Jue, Vie, Sab, Dom |
| Zona horaria | America/Mexico_City |
Ejemplos de Configuracion
Cada manana a las 8am (L-V):
{
"time": "08:00",
"days": ["mon", "tue", "wed", "thu", "fri"],
"timezone": "America/Mexico_City"
}
Cada 2 horas durante horario laboral:
{
"interval": 120,
"startTime": "09:00",
"endTime": "18:00",
"days": ["mon", "tue", "wed", "thu", "fri"]
}
Cada lunes a las 9am:
{
"time": "09:00",
"days": ["mon"]
}
Ultimo dia del mes a las 6pm:
{
"dayOfMonth": "last",
"time": "18:00"
}
Patrones Comunes
Recordatorio de Documentos Pendientes
Workflow: Recordatorio Documentos
Trigger:
- Tipo: REMINDER_DUE
- Entidad: document_request
- Dias antes: 2
- Frecuencia: Diario a las 9am
Acciones:
- Buscar solicitudes por vencer
- Filtrar: status = pending
- Por cada una:
- Enviar email recordatorio
- Notificar al solicitante
- Registrar envios
Configuracion:
{
"entityType": "document_request",
"daysBefore": 2,
"filters": {
"status": "pending"
},
"notifyPostulant": true,
"notifyOwner": true
}
Alerta de Tests por Vencer
Workflow: Alerta Tests
Trigger:
- Tipo: REMINDER_DUE
- Entidad: user_test
- Dias antes: 1
- Frecuencia: Diario a las 8am
Acciones:
- Buscar tests por vencer manana
- Filtrar: status = pending
- Por cada uno:
- Enviar email urgente al candidato
- SMS si tiene telefono
- Notificar a RH
Configuracion:
{
"entityType": "user_test",
"daysBefore": 1,
"status": ["pending", "in_progress"],
"channels": ["email", "sms"]
}
Resumen Semanal de Reclutamiento
Workflow: Reporte Semanal
Trigger:
- Tipo: SCHEDULED
- Dia: Viernes
- Hora: 17:00
- Frecuencia: Semanal
Acciones:
- Calcular metricas de la semana:
- Nuevas aplicaciones
- Entrevistas realizadas
- Ofertas enviadas
- Contrataciones
- Generar reporte
- Enviar a gerentes
- Guardar historico
Configuracion:
{
"time": "17:00",
"days": ["fri"],
"metrics": ["applications", "interviews", "offers", "hires"],
"recipients": ["hiring-managers@empresa.com"],
"format": "email"
}
Limpieza de Candidatos Inactivos
Workflow: Archivar Inactivos
Trigger:
- Tipo: INACTIVITY_CHECK
- Entidad: user_profile
- Dias inactivo: 90
- Frecuencia: Mensual
Acciones:
- Buscar perfiles sin actividad 90+ dias
- Excluir tags: "vip", "pipeline-activo"
- Por cada uno:
- Enviar email de despedida
- Cambiar status a archived
- Registrar motivo
- Generar reporte de archivados
Configuracion:
{
"entityType": "user_profile",
"inactiveDays": 90,
"excludeTags": ["vip", "pipeline-activo"],
"action": "archive",
"notifyPostulant": true
}
Sincronizacion de Calendarios
Workflow: Sync Calendarios
Trigger:
- Tipo: SCHEDULED
- Intervalo: 15 minutos
- Siempre activo
Acciones:
- Obtener eventos nuevos de Google
- Obtener eventos nuevos de Microsoft
- Sincronizar con calendario interno
- Actualizar slots disponibles
- Notificar conflictos
Configuracion:
{
"interval": 15,
"sources": ["google", "microsoft"],
"syncDirection": "bidirectional",
"alertOnConflict": true
}
Gestion de Ejecuciones
Historial de Ejecuciones
| Fecha | Trigger | Resultado | Registros |
|---|---|---|---|
| 2024-01-19 09:00 | Recordatorio Docs | OK | 5 enviados |
| 2024-01-19 08:00 | Alerta Tests | OK | 2 alertados |
| 2024-01-18 17:00 | Reporte Semanal | OK | 1 enviado |
| 2024-01-18 09:00 | Recordatorio Docs | Parcial | 3/4 enviados |
Acciones: [Ver Detalles] [Volver a Ejecutar]
Ver Detalles de Ejecucion
Ejecucion #12345
| Campo | Valor |
|---|---|
| Fecha | 2024-01-19 09:00:15 |
| Trigger | Recordatorio Documentos |
| Status | Completado |
| Duracion | 2.3 segundos |
| Registros procesados | 5 |
Resultados por registro:
- Juan Perez -> Email enviado
- Maria Garcia -> Email enviado
- Pedro Lopez -> Email enviado
- Ana Torres -> Email enviado
- Carlos Ruiz -> Email enviado
Logs:
- [09:00:15] Iniciando busqueda...
- [09:00:15] Encontrados 5 pendientes
- [09:00:16] Enviando emails...
- [09:00:17] Completado exitosamente
Reejecutar Manualmente
Opciones de reejecucion:
- Ejecutar Ahora - Ejecuta el trigger inmediatamente
- Ejecutar con Filtros - Especifica subset de registros
- Modo Debug - Ejecuta sin enviar realmente, solo muestra que haria
- Forzar Todos - Ignora el check de "ya procesado"
Condiciones y Filtros
Filtros en Triggers Programados
Los triggers programados pueden filtrar:
Por Estado:
- status = pending
- status in [pending, in_progress]
- status != completed
Por Fecha:
- dueDate < now()
- dueDate between (now(), now() + 2 days)
- createdAt > (now() - 7 days)
Por Propietario:
- ownerId = current_user
- assignedTo = team_id
- department = "ventas"
Por Tags:
- tags includes "urgente"
- tags excludes "archivado"
- tags any ["vip", "prioridad"]
Combinados:
- status = pending AND dueDate < now() + 2 days
Ejemplo de Filtro Complejo
{
"entityType": "document_request",
"filters": {
"AND": [
{ "status": "pending" },
{ "dueDate": { "lt": "{{now + 2 days}}" } },
{ "OR": [
{ "type": "ine" },
{ "type": "comprobante_domicilio" }
]},
{ "NOT": { "tags": ["excluir"] } }
]
}
}
Zonas Horarias
Configurar Zona Horaria
Zonas horarias soportadas:
Mexico:
- America/Mexico_City (UTC-6)
- America/Cancun (UTC-5)
- America/Tijuana (UTC-8)
- America/Chihuahua (UTC-7)
Otras:
- America/New_York (UTC-5)
- America/Los_Angeles (UTC-8)
- Europe/Madrid (UTC+1)
- UTC (UTC+0)
Horario de Verano
El sistema maneja automaticamente:
- Cambios de horario de verano
- Ajustes de DST
- Fechas de transicion
- Sin configuracion adicional
Recomendacion: Usar zona horaria explicita, no offset numerico
Evitar Ejecuciones Duplicadas
Control de Duplicados
El sistema previene duplicados mediante:
- Lock de Ejecucion - Solo una instancia ejecuta a la vez
- ID de Ejecucion - Cada ejecucion tiene ID unico
- Marca de Procesado - Registros procesados se marcan
- Ventana de Tiempo - No reejecutar dentro de X minutos
Configurar Comportamiento
{
"deduplication": {
"enabled": true,
"windowMinutes": 60, // No repetir en 60 min
"trackBy": "entity_id", // Por cual campo
"allowManualRerun": true // Permitir manual
}
}
Monitoreo y Alertas
Alertas de Fallos
Configurar alertas cuando:
- Ejecucion falla
- Toma mas de X segundos
- Procesa menos de lo esperado
- No encuentra registros
- Error de conexion
Notificar via:
- Email a administrador
- Slack/Teams
- Webhook
- Dashboard
Dashboard de Salud
Estado de Triggers Programados
| Metrica | Valor |
|---|---|
| Activos | 12 |
| Pausados | 3 |
| Error | 0 |
Ultima hora:
- Ejecutados: 8
- Exitosos: 8
- Fallidos: 0
- Registros procesados: 47
Proximas ejecuciones:
- 10:00 - Recordatorio Docs
- 12:00 - Sync Calendarios
- 17:00 - Reporte Diario
Buenas Practicas
Diseno de Schedules
DO:
- Espaciar ejecuciones pesadas
- Ejecutar fuera de picos de uso
- Usar filtros especificos
- Monitorear duracion
- Documentar proposito
DON'T:
- Ejecutar cada minuto sin necesidad
- Procesar miles de registros sin limite
- Ignorar errores
- Overlapping de ejecuciones
- Depender de orden de ejecucion
Performance
Recomendaciones:
- Limitar registros por ejecucion (batch)
- Usar indices en filtros
- Evitar queries N+1
- Cache de datos repetitivos
- Timeout en acciones externas
Proximos Pasos
- Acciones de Mensajeria - Enviar notificaciones
- Ejecucion y Monitoreo - Ver logs
- Ejemplos Practicos - Casos reales