Cuando llega la señal, la conversación continúa
Un cliente pide un aumento de límite por WhatsApp. Quien puede aprobar no está en ese chat. Con Contexto externo pausas la ejecución y continúas el mismo hilo cuando llega la decisión.
Un cliente pide un aumento de límite por WhatsApp. El Agent reúne los antecedentes, pero quien puede aprobar la solicitud no está en ese chat: puede estar en otro equipo, otro sistema o incluso otro horario.
La conversación llegó a un punto en que todavía no existe una respuesta.
Si obligas al usuario a volver más tarde y preguntar «¿ya me aprobaron?», convertiste la conversación en un ticket. Con Contexto externo puedes hacer otra cosa: pausar la ejecución y continuar el mismo hilo cuando llegue la decisión.

Lo que pasa en el medio puede cambiar. Puede ser una aprobación por correo, un mensaje en Slack, un pago confirmado o el cierre de un ticket. Para el Agent, el mecanismo es el mismo.
La conversación puede quedar en pausa
En la pestaña Contexto del AI Agent está Agregar contexto externo. Ahí una interacción puede detenerse sin cerrar la ejecución.

Jelou conserva el executionId de esa ejecución. Cuando el sistema externo tenga una respuesta, puede usarlo para continuar exactamente ese hilo.
Eso permite separar dos momentos que no necesariamente ocurren juntos:
- el usuario hace una solicitud;
- algo afuera la resuelve.
El usuario no tiene que mantener el chat abierto ni volver a escribir para que el proceso continúe.
Una ejecución pausada puede reanudarse durante 24 horas. Después de ese plazo, el executionId deja de estar disponible para Resume.
Volver requiere una señal
Para continuar la ejecución, el sistema externo hace ese POST.
executionId identifica la conversación que estaba esperando. message le entrega al Agent el resultado que acaba de llegar.
La API key nunca debe viajar en un link, query param o correo. Quien tenga esa clave puede reanudar ejecuciones.
Da igual quién origine la señal. Si puede hacer el POST de Resume con el executionId correcto, puede volver a poner la conversación en marcha.
Un ejemplo: aprobar desde correo
Volvamos al aumento de límite.
El Agent reúne la solicitud, envía un correo al aprobador y pausa la interacción. El correo tiene dos acciones: Aprobar y Rechazar.

En este ejemplo, el clic llega a una Function. La Function guarda la API key de forma segura y hace la llamada a Resume:
await fetch("https://gateway.jelou.ai/workflows/v1/skills/resume", {
method: "POST",
headers: {
"x-api-key": apiKey,
"Content-Type": "application/json",
},
body: JSON.stringify({
executionId,
message: "La solicitud fue aprobada",
pauseInteraction: false,
}),
});La Function no es parte obligatoria del patrón. Está ahí porque un link de correo no debe llevar la API key.
Si la señal viniera de una pasarela de pago, por ejemplo, su webhook podría hacer el mismo POST directamente.
El usuario no tiene que volver
Cuando llega Resume, el Agent recibe el resultado y continúa desde donde quedó.

En el ejemplo fue un correo. Podría haber sido Slack, un CRM, una aprobación interna, un webhook o la confirmación de un pago.
El sistema externo cambia. La conversación no necesita saberlo: espera una señal y, cuando llega, continúa.
El usuario no debería tener que volver para que el proceso continúe.
¿Quieres este ejemplo en tu Brain?
El patrón ya está. Si quieres el mismo loop en tu cuenta, son dos piezas: el workflow y la Function.
El workflow: usa el template
El template ya trae el AI Agent del ejemplo (solicitudes que requieren aprobación), Gmail para mandar el correo con Aprobar y Rechazar, y Contexto externo para pausar. Lo instalas en tu Brain y conectas tu cuenta de Gmail.
La Function: la creas tú
El clic del correo no puede llevar la API key. Por eso el link apunta a una Function tuya: recibe executionId y decision, y hace el POST a Resume. Créala con el inicio rápido de Functions, déjala pública (un link de Gmail no manda token) y guarda la API key en un secret.
import { define, z } from "@jelou/functions";
export default define({
name: "resume-aprobacion",
description: "Recibe Aprobar o Rechazar y llama a Resume",
input: z.object({
executionId: z.string(),
decision: z.enum(["approved", "rejected"]),
}),
config: {
public: true,
methods: ["GET"],
mcp: false,
},
handler: async (input, ctx) => {
const apiKey = ctx.env.get("JELOU_API_KEY");
await fetch("https://gateway.jelou.ai/workflows/v1/skills/resume", {
method: "POST",
headers: {
"x-api-key": apiKey,
"Content-Type": "application/json",
},
body: JSON.stringify({
executionId: input.executionId,
message:
input.decision === "approved"
? "La solicitud fue aprobada"
: "La solicitud fue rechazada",
pauseInteraction: false,
}),
});
return { ok: true };
},
});Despliégala, pon esa URL en los links del correo, y prueba: WhatsApp pide, llega el correo, Aprobar, el mismo hilo continúa.
Soporte
¿Te quedó una duda?
Ábrela en tu cuenta.
Cómo escribirnos