Plataforma

Disparadores

Un disparador (trigger) es lo que arranca un flujo. Cada flujo declara un único tipo de disparador — la puerta por la que algo del mundo real le pide al flujo que corra. Daguito tiene diez tipos, cada uno con su contrato de datos.

¿Qué es un disparador?

Un disparador es la fuente de un evento entrante. No hace trabajo: solo recibe la señal (un mensaje, un webhook, una hora del reloj) y entrega al motor una entrada normalizada para que el flujo empiece a ejecutarse.

Los tipos viven como un array de constantes tipado (CANONICAL_TRIGGER_TYPES), nunca como literales sueltos. Así un flujo solo puede declarar un disparador válido.

// Canonical trigger types — apps/api/src/flows/architecture.ts
const CANONICAL_TRIGGER_TYPES = [
  'message',         // inbound message from a channel
  'media',           // image / audio / document / video file
  'stream',          // real-time voice turn
  'webhook',         // external HTTP POST
  'schedule',        // cron / scheduled
  'manual',          // manual run from the dashboard or API
  'flow_completed',  // another flow finished
  'record',          // data record change (reserved)
  'timeout',         // a wait expired
  'event_delayed',   // delayed business event (abandoned cart, reminder)
] as const

Los diez tipos

Agrupados por cómo se activan:

Desde una conversación

Desde un sistema externo

Del tiempo y del propio motor

Reservado

record está definido en el modelo (un cambio en un registro de datos: alta o modificación) pero aún no tiene adaptador. Es un tipo reservado para una versión futura; hoy no se puede declarar en producción.

Contrato de datos

Cada disparador entrega un objeto tipado al motor. Esto es lo que recibe tu flujo según el disparador que declare:

message        → { text, sender, channel, session_key, metadata }
media          → { file_url, mime_type, size, sender, channel, session_key }
stream         → { stream_id, codec, sample_rate, session_key }
webhook        → { method, headers, body, source }
schedule       → { cron, last_run, scheduled_at }
manual         → { triggered_by, params }
flow_completed → { source_flow_id, execution_id, status, output }
record         → { table, action, record, old_record }   // reserved
timeout        → { node_id, wait_key, resume_at, reason }
event_delayed  → { watch_event, delay_minutes, cancel_events, payload_filter? }

Canales y disparadores

Un canal no es lo mismo que un disparador. El canal es la fuente (WhatsApp, Instagram, el widget, un webhook); el disparador es el tipo de evento que arranca el flujo. Varios canales pueden producir el mismo disparador: un mensaje del widget y uno de WhatsApp llegan ambos como message.

Cada canal se conecta a su disparador mediante un adaptador, que normaliza la carga específica de la plataforma en un InboundMessage antes de pasarla al pipeline de ingesta unificado. Así el motor nunca tiene que saber de dónde vino el evento.

¿Qué sigue?