Cron Jobs
Automatiza peticiones HTTP con workflows programados, bloques anidados y notificaciones de error.
Crear un Cron Job
- Asistente visual: configuración paso a paso con bloques HTTP, delays, condiciones y grupos.
- Por código: define el workflow completo en JSON schema v1.
- Importar: sube un archivo JSON exportado previamente (un cron job o un bundle de carpeta completa con subcarpetas).
Tipos de bloques
- HTTP Request: petición inline o referencia a un request de colección.
- Delay: espera N segundos entre pasos.
- Condición: evalúa status, body o variables; ramas Then/Else.
- Grupo: agrupa bloques para organizar el flujo.
Variables entre pasos
Usa {{variable}} en URLs y bodies. Extrae valores de respuestas con extract_variables en bloques HTTP.
Notificaciones
En errores se puede notificar por email, webhook y avisos in-app. Al alcanzar el límite de errores consecutivos, el job se pausa automáticamente.
Frecuencia y límites
- Intervalo mínimo: 30 segundos usando
settings.interval_seconds(ej. 30) con schedule* * * * *. - max_runs en
settings: límite de ejecuciones programadas (null= ilimitado). - Las ejecuciones manuales (Run now) no cuentan para
max_runs.
Importar / Exportar
Exporta un workflow individual desde su menú de acciones o una carpeta completa (con subcarpetas) desde el menú de la carpeta. El import acepta workflows individuales, bundles de carpeta e incluso un array JSON con varios workflows. Los archivos usan schema_version: 1.
{
"schema_version": 1,
"name": "Sincronizar catálogo",
"description": "Obtiene el token y sincroniza el catálogo",
"schedule": "*/5 * * * *",
"timezone": "UTC",
"environment_id": null,
"source": "wizard",
"settings": {
"interval_seconds": null,
"error_limit": 5,
"notify_email": true,
"notify_webhook_url": null,
"prevent_overlap": true,
"max_runs": null
},
"blocks": [
{
"type": "http_request",
"name": "Login",
"is_enabled": true,
"max_retries": 0,
"config": {
"mode": "inline",
"method": "POST",
"url": "https://api.ejemplo.com/auth/login",
"headers": [{ "key": "Content-Type", "value": "application/json" }],
"params": [],
"body_type": "raw",
"body": { "raw": "{\"email\":\"sistema@ejemplo.com\",\"password\":\"secreto\"}" },
"auth_type": "none",
"auth_data": [],
"extract_variables": [
{ "key": "access_token", "source": "body", "path": "token" }
]
},
"children": [],
"else_children": []
},
{
"type": "condition",
"name": "¿La respuesta fue 200?",
"is_enabled": true,
"max_retries": 0,
"config": {
"logic": "and",
"rules": [{ "source": "status_code", "operator": "equals", "value": "200" }]
},
"children": [
{
"type": "http_request",
"name": "Sync catálogo",
"is_enabled": true,
"max_retries": 2,
"config": {
"mode": "inline",
"method": "GET",
"url": "https://api.ejemplo.com/catalogos/sync",
"headers": [{ "key": "Authorization", "value": "Bearer {{access_token}}" }],
"params": [],
"body_type": "none",
"body": [],
"auth_type": "none",
"auth_data": []
},
"children": [],
"else_children": []
}
],
"else_children": [
{
"type": "delay",
"name": "Esperar 60s",
"is_enabled": true,
"max_retries": 0,
"config": { "seconds": 60 },
"children": [],
"else_children": []
}
]
}
]
}
Los exploded blocks http_request pueden usar mode: "reference" con collection_id y request_id para ejecutar un request guardado en una colección. Si al importar ya existe una carpeta o workflow con el mismo nombre, GetMan agrega un sufijo "(2)", "(3)", etc.
Bundle de carpeta: al exportar una carpeta se genera un bundle ("type": "cron_folder_bundle") que recrea carpetas, subcarpetas y todos los workflows. Consulta los ejemplos completos de workflow y bundle en la guía de Importar / Exportar.
Deploy en servidor
# Crontab (cada 30 s para intervalos de 30 segundos) * * * * * cd /var/www/getman && php artisan schedule:run >> /dev/null 2>&1 * * * * * sleep 30 && cd /var/www/getman && php artisan schedule:run >> /dev/null 2>&1 # Cola (solo si QUEUE_CONNECTION=database) php artisan queue:work database --sleep=3 --tries=1 # .env recomendado en servidor QUEUE_CONNECTION=sync