Documentación

Flujos visuales y JSON

Diseña automatizaciones con reglas, acciones y tareas de IA.

En Flujos del panel puedes diseñar visualmente un disparador y sus pasos, conectar ramas y consultar su JSON. El modo básico utiliza reglas y acciones; los modos IA e híbrido requieren al menos una tarea de IA. Guarda el borrador y publica una versión para que el disparador la utilice.

Estructura

{
  "trigger": { "type": "keyword", "config": { "keywords": ["factura rechazada"], "extract": { "invoice_id": "(FE-?\\d+)" } } },
  "steps": [
    { "id": "s1", "type": "tool_call", "tool": "lookup_invoice", "input_map": { "invoice_id": "{{context.invoice_id}}" } },
    { "id": "s2", "type": "branch", "condition": "{{s1.output.status}} == 'rejected'", "then": "s3", "else": "s4" },
    { "id": "s3", "type": "send_message", "template": "Tu factura fue rechazada por: {{s1.output.reason}}" },
    { "id": "s4", "type": "escalate_to_human", "queue": "default" }
  ]
}

Disparadores

Tipo Cuándo corre Contexto disponible
conversation_started Al abrir una conversación en el widget. context.page_context
keyword Cuando el mensaje del usuario contiene alguna de las keywords (sin llamar al modelo). extract aplica expresiones regulares al mensaje y guarda los grupos en context. context.message, valores extraídos
ticket_status_changed Al cambiar el estado de un ticket. context.ticket
webhook Al recibir un POST en la URL del flujo con su token. El cuerpo del POST como context
whatsapp_selection Al recibir el ID configurado de un botón Meta/Twilio o una fila de lista Meta. context.inbound.selection
whatsapp_location Al recibir una ubicación autenticada por WhatsApp. context.inbound.location

Tipos de paso

Tipo Campos Efecto
tool_call tool, input_map Llama una acción configurada y guarda su salida en <id>.output.
branch condition, then, else Salta al paso indicado según la condición.
send_message template Envía un mensaje al usuario en la conversación.
escalate_to_human queue Pasa la conversación a la bandeja.
update_ticket status, priority, assigned_user_id Actualiza el ticket vinculado.
wait minutes Pausa el flujo y lo reanuda después.

Tras un send_message el motor continúa con el siguiente paso de la lista; un camino que deba terminar ahí debe cerrar con el último paso o con una rama.

Interpolación

{{...}} accede a context, contact, conversation y a las salidas de pasos previos ({{s1.output.reason}}). Las condiciones admiten ==, !=, >, >=, <, <=, contains, exists, y se combinan con and / or. No se ejecuta código: es un parser propio de comparaciones.

Modo de prueba

Desde el panel puedes ejecutar el flujo con un contexto de ejemplo en dry run: las acciones que lo soportan reciben la cabecera X-Dry-Run: 1 y las demás se simulan. Cada ejecución, real o de prueba, deja un registro paso a paso en el historial del flujo.

Límites

Los flujos activos cuentan contra el límite del plan (Pro: 10; Corporate: ilimitados). Un flujo se detiene tras 50 pasos para evitar bucles.