PTENES
MÓDULO 3.2

⚙️ Agentes en producción: programados y webhooks

Dos builds reales de principio a fin, con manejo de errores y debug en producción. Construyes un agente de investigación programado (cron → Firecrawl → Google Sheets), resuelves el OAuth refresh token, depuras un fallo que solo aparece en prod, montas un informe por webhook (JSON → .docx → Google Drive), proteges el endpoint con Bearer, conectas el pipeline GitHub → Trigger.dev y dominas el manejo de errores por capas y el ciclo humano de debug.

8
Temas
~65
Minutos
Inter.
Nivel
Prod
Tipo
Progreso del módulo 0% · 0 de 8

Este módulo consiste en dos builds completos que se ejecutan en producción. Uno es programado: el cron se activa, Firecrawl busca, la IA sintetiza y se agrega una fila a Google Sheets. El otro es por evento: un webhook recibe un payload JSON, genera un .docx y guarda en Google Drive. El diagrama compara los dos caminos.

Build 1 · Programado Cron 8h todos los días Tarea Firecrawl + síntesis Google Sheets línea añadida al final Build 2 · Webhook Webhook payload JSON · Bearer Tarea genera .docx Google Drive informe guardado En ambos try/catch · retries logs · alertas · traces

Diagrama ilustrativo — recreación conceptual de los dos builds en producción, no es una captura de pantalla real.

1

📅 Masterclass: agente de investigación programado

Qué es

El primer build es un agente de investigación programado: una tarea de Trigger.dev que se ejecuta sola cada mañana a una hora programada con cron. Investiga un tema fijo con el Firecrawl, sintetiza los hallazgos con la IA y escribe una línea estructurada en el Google Sheets. Todo en un único archivo (p. ej., morning-research.ts), con el tema hard-coded en la parte superior: fácil de cambiar y versionar.

Por qué aprender

El flujo de build

1

Verificar los requisitos previos

Repo conectado, cuenta de Trigger.dev, MCP instalado, proyecto inicializado, env vars en la nube y el Firecrawl MCP con la clave en .env.

2

Prompt en Plan Mode

"Tarea diaria sin supervisión, tema fijo, investigación con Firecrawl, síntesis, escribe una línea en Sheets, sin preguntas durante el proceso, maneja los errores sin bloquearse, registra cada paso."

3

Preparar el Sheet y hacer deploy

Crea la pestaña Sheet1 con encabezado (fecha, tema, resumen, fuentes, estado). Deploy y prueba manual en el dashboard (no se puede esperar al horario programado).

Conceptos clave

🎯 Consejo práctico

Es posible que la IA no haga preguntas para aclarar y tome decisiones razonables por su cuenta (columnas, tema); revísalas y ajústalas después. Mantén el tema hard-coded al principio del archivo: es muy fácil cambiarlo y queda bajo control de versiones.

Sin supervisión

Se ejecuta sin nadie.

Tema fijo

Hard-coded en la parte superior.

Archivo único

Toda la tarea en un .ts.

Prueba manual

Se activa en el dashboard.

2

🔁 Token de actualización OAuth

Qué es

Para que la tarea escriba en Google Sheets de forma autónoma, necesita un refresh token OAuth: una credencial de configuración única que renueva el acceso sin iniciar sesión manualmente. En lugar de una service account, el build usa OAuth con client ID, client secret y el refresh token, todos en el .env y en las env vars de la nube.

Por qué aprender

✓ El camino que funciona

  • ✓Obtener el client ID + secret en Google Cloud Console.
  • ✓Cuando falla el Playground, ejecuta el script de terminal de la IA.
  • ✓Pegar el refresh token en .env e en las variables de entorno de Trigger.dev.

✗ La trampa del Playground

  • ✗OAuth Playground puede mostrar "access blocked / request is invalid".
  • ✗No insistas con eso; usa el fallback de script en el terminal.
  • ✗No olvides el refresh token en el entorno de producción.

Conceptos clave

El fallback es elegante: un script en la terminal (que usa client ID + secret de .env) imprime una URL de autorización; la abres, autorizas y el script devuelve el refresh token para pegarlo en el .env y en las env vars. La configuración se hace una sola vez; después, la tarea renueva el acceso por su cuenta en cada ejecución.

Client ID/secret

Desde Cloud Console.

Refresh token

Renueva el acceso.

Configuración inicial

Hecho una sola vez.

Alternativa CLI

Cuando falla el Playground.

3

🐞 Error que solo aparece en producción

Qué es

Algunos errores solo aparecen con datos reales en producción. En la compilación programada, Firecrawl devolvió success: false y puso los resultados en una propiedad web en vez de data — o shape de la respuesta fue diferente de lo que el código suponía. La corrección: ajustar el parsing, volver a hacer el deploy y activarlo de nuevo.

La forma inesperada (ejemplo ilustrativo)
// o código esperava:
{ "success": true, "data": [ ... ] }

// mas em produção veio:
{ "success": false, "web": [ ... ] }   // ← parsing quebra aqui

Por qué aprender

Es normal que el modelo cometa errores: puede asumir un formato incorrecto para una respuesta de API. Lo importante es cómo reaccionas: abre el paso que falló, copia el mensaje de error completo, pégalo en la IA para diagnosticar el problema, aplica la corrección del parsing, vuelve a desplegar y ejecútalo otra vez. Y aquí el manejo de errores demostró su valor: aunque Firecrawl falló, la tarea no se bloqueó y aun así escribió una fila parcial en Sheets.

🎯 Consejo práctico

Después de hacer deploy, ejecútalo manualmente para probarlo; no esperes al horario programado. Y confirma que la env var exista específicamente en el entorno de producción, no solo en el de desarrollo.

4

📄 Masterclass: informe por webhook

Qué es

El segundo build está orientado a eventos: una tarea activada por webhook. Un formulario web envía un payload JSON (campos como nombre de la empresa, sector, meta, desafío) a la URL del webhook; la tarea genera un informe .docx a partir de estos campos y lo guarda automáticamente en el Google Drive. La IA completa las secciones del informe (resumen ejecutivo, contexto del sector, desafíos) a partir de pocos campos de entrada.

Por qué aprender

✓ El flujo de build

  • ✓Prompt: webhook recibe JSON, genera .docx, guarda en Drive, sin preguntas, gestiona errores, registra en el log.
  • ✓ID de carpeta opcional para organizar la salida en Drive.
  • ✓Probar localmente con un payload de ejemplo antes de activar el formulario.

📊 Conectar un formulario no-code

  • •Un activador de formulario en n8n + un nodo HTTP Request.
  • •POST a la URL del webhook (que incluye el ID de la tarea).
  • •Cuerpo como JSON con nombre payload.

Conceptos clave

La tarea normaliza las etiquetas del formulario para ajustarlas a la estructura de payload esperada, y la ejecución puede ser totalmente exitosa o parcial. El orden de las pruebas siempre es: local primero (servidor de desarrollo + payload de ejemplo), luego con el formulario y solo entonces en producción. Cualquier formulario/sistema que admita webhooks + API sirve; no depende de una herramienta específica.

Payload JSON

Campos del formulario.

.docx

Informe generado.

Google Drive

El ID de carpeta organiza.

Prueba local

Antes del formulario.

5

🔔 Webhook como «timbre digital»

Qué es

Un webhook es un "timbre digital": una URL que escucha los datos que llegan y, al recibirlos, activa la tarea y pasa el payload más adelante. Mientras que el cron se activa por tiempo, el webhook se activa por evento. La URL incluye el ID de la task (p. ej., webhook-report) y se puede compartir e insertar: puede venir de un sitio web, un correo electrónico u otro sistema.

Por qué aprender

⚠️ Sin autenticación, cualquiera puede ejecutar tu tarea

Una URL abierta es una invitación: cualquier persona que la descubra puede activar tu tarea (y gastar tus tokens). La protección es un header Authorization: Bearer <chave> en la solicitud.

  • ✗Deja el webhook sin autenticación.
  • ✗Olvidar el espacio después de Bearer  antes de la clave.
  • ✗Usar la URL de prueba en lugar de la de producción al final.

Conceptos clave

La solicitud HTTP (ejemplo ilustrativo)
POST https://.../webhook-report
Authorization: Bearer <chave-da-API>
Content-Type: application/json

{ "payload": { "empresa": "...", "setor": "..." } }
URL escucha

Activa la tarea.

ID de la tarea

Ve a la URL.

Bearer

Protege el endpoint.

Compartible

Sitio, correo electrónico, sistema.

6

🔗 Pipeline GitHub → Trigger.dev

Qué es

O pipeline GitHub → Trigger.dev cierra el ciclo de iteración: cuando cambias algo en el editor y haces push a GitHub, GitHub hace el deploy automático en Trigger.dev. Los archivos más recientes siempre están disponibles, sin deploy manual. Es el «commit → push → deploy» funcionando solo.

Por qué aprender

Conectar GitHub con Trigger.dev

1

Pedirle a la IA el flujo de auto-push

Pídele a la IA que configure el flujo: iterar en el editor lo envía a GitHub, que hace el deploy en Trigger.dev. Aprueba los comandos bash.

2

Agregar el Repository Secret

En GitHub, en Settings > Secrets and Variables > Actions, crea TRIGGER_ACCESS_TOKEN con el valor de la clave secreta de Trigger.dev.

3

Iterar y confirmar en el dashboard

A partir de ahí, cada push activa GitHub Actions, que hace el deploy. Confirma en el dashboard de Trigger.dev que la versión más reciente esté activa.

Conceptos clave

commit → push

Tú iteras en el editor.

GitHub Actions

Activa el deploy.

Repository Secret

TRIGGER_ACCESS_TOKEN.

Siempre en línea

Última versión desplegada.

🎯 Consejo práctico

Con el pipeline en marcha, el ciclo de debug en producción se vuelve fluido: corriges en el editor, haces push y producción se actualiza sola, sin repetir la implementación manual en cada iteración.

7

🛡️ Manejo de errores por capas

Qué es

Sin un agente que se autocure en producción, el manejo robusto de errores es lo que cierra la brecha agentic. El enfoque se organiza en capas: registro significativo en cada paso (visibilidad), try/catch alrededor de cada llamada externa, reintentos configurables con backoff y alertas de error. Trigger.dev ofrece visibilidad y reintentos, pero solo puede volver a intentar lo que reconoce como error.

Por qué aprender

1

Capa 1 — Logging

Registro claro en cada paso significativo: «Firecrawl devolvió 429 en la fuente 3», no «task failed». Los registros vagos son inútiles.

2

Capa 2 — try/catch

Envuelve cada llamada a una API externa en try/catch, registra el error con contexto, continúa cuando sea posible y lanza una excepción solo ante fallas críticas.

3

Retries + alertas

Configura retries (por ejemplo, hasta 3 con backoff exponencial a partir de 30s) y alertas (Project Settings > Alerts) por correo electrónico/Slack/webhook.

Conceptos clave

✓ Buenas prácticas

  • ✓Registrar contexto específico (código de estado, cuál fuente).
  • ✓Configurar alertas para enterarte de la falla antes que el usuario.
  • ✓Envolver las llamadas externas en el nivel adecuado.

✗ Errores que debes evitar

  • ✗Registros genéricos del tipo «task failed».
  • ✗Creer que los retries corrigen errores de lógica (solo sirven para fallos transitorios).
  • ✗Hacer deploy sin configurar ninguna alerta de fallos.
8

🔄 El ciclo humano de depuración

Qué es

En producción, la IA todavía depura, pero ya no automáticamente. El bucle humano de depuración es el ciclo en el que tú haces de puente: abrir el trace rojo en el dashboard, copiar el error, pegarlo en la IA ("aquí está el trace que falló, ¿qué está mal y cómo lo arreglo?"), dejar que lo diagnostique, aplicar la corrección y volver a hacer el deploy. El trace + la IA permiten un diagnóstico rápido; un humano solo tiene que llevarle el error.

Por qué aprender

🔁 El ciclo de cuatro pasos

  • 1.Abrir el trace rojo (la ejecución que falló) en el dashboard.
  • 2.Copiar el mensaje de error completo del paso que falló.
  • 3.Pegar en la IA y deja que identifique la causa y la solución.
  • 4.Volver a desplegar y volver a ejecutarlo hasta que pase.

Conceptos clave

El cambio de mentalidad consiste en dejar de ser el disparador y configurar disparadores que se ejecuten mientras te alejas. El prompting y la lectura de traces se vuelven más fáciles con la práctica: el segundo build siempre es más rápido que el primero. Y asegúrate de que toda tarea desplegada tenga alertas de fallos, para que te enteres del problema antes que el usuario.

Autocuración (opcional): una tarea en producción falla de forma intermitente porque la API externa a veces responde con timeout. ¿Qué recurso es el más indicado?

📌 Resumen del módulo

✓
Agente programado — cron → Firecrawl → síntesis → fila en Google Sheets, sin supervisión.
✓
OAuth refresh token + depuración en producción — configuración única (alternativa vía terminal); formato de respuesta inesperado.
✓
Informe por webhook — payload JSON → .docx → Google Drive; timbre digital + Bearer.
✓
Pipeline GitHub → Trigger.dev — push activa el deploy automático; la última versión siempre está publicada.
✓
Manejo de errores + ciclo de depuración — log, try/catch, retries, alertas; trace → IA → corrige → redeploy.

Próxima Ruta:

Ruta 4 — Creación de frontends y apps: darle apariencia de producto a la automatización.