Skip to main content
Este documento describe como se puede agregar acciones al Agente de IA, como por ejemplo:
  • Asignar un agente humano al contacto.
  • Desasignar un agente del contacto.
  • Asignar o remover una etapa al contacto.
  • Asignar o remover una etiqueta al contacto.
  • Asignar o remover una segmentacion al contacto.
  • Marcar como resuelto.
  • Apagar el agente de IA para la sesion.
  • Gestionar eventos (crear, actualizar, listar, confirmar, cancelar, eliminar).
  • Asignar una secuencia al contacto.
Campos de la Accion
CampoTipoDescripcion
intentstringIdentificador unico de la intencion de la accion. Se usa para detectar que esta solicitando el usuario (por ejemplo, "asignar_soporte").
referencestringDescripcion detallada del contenido de la intencion. Se utiliza para poder darle informacion al agente y sepa la intencion del usuario, como por ejemplo: “Quiero hablar con un agente humano”.
tagsstring[]Son referencias para poder entender mas la informacion dentro de la accion. Complementa la reference con contexto adicional.
enabledbooleanIndica si la accion esta activada (true) o no (false).
requiredFieldsarrayCampos que el agente debe recopilar del usuario antes de ejecutar la accion. Funciona igual que en los servicios.
responseMessagestringMensaje que el agente debe de responder al usuario. Soporta variables con formato {{variable}}, {variable} o @variable.
responseJsonbooleanIndica si el agente debe de responder con un JSON estructurado (true) o un mensaje de texto plano (false). Solo aplica en el orquestador clasico.
responseExactbooleanIndica si el responseMessage debe enviarse exactamente al usuario sin reformulacion del LLM (true). Solo aplica en modo Tool Calling. Por defecto false.
actionarrayListado de acciones que se ejecutaran. Cada accion tiene un type y un value.
El agente de IA ejecutara las acciones en orden, esto quiere decir que si puso dos asignaciones, el agente de IA asignara la primera asignacion y luego la segunda asignacion. Por lo que prevalecera la ultima accion ejecutada.

Tipos de Accion

Cada accion dentro del arreglo action tiene un type que define que operacion se ejecutara y un value que define el parametro de la operacion.

Acciones de Asignacion

TipoDescripcionValor (value)
action.asignAsigna un agente humano al contacto.Email del agente a asignar.
action.unassignDesasigna al agente humano del contacto.No requiere valor.

Acciones de Etapas

TipoDescripcionValor (value)
action.stageAsigna una etapa al contacto.Nombre de la etapa (debe existir en el workspace).
action.stage.removeRemueve la etapa actual del contacto.No requiere valor.

Acciones de Segmentacion

TipoDescripcionValor (value)
action.segmentationAsigna una segmentacion al contacto.Nombre de la segmentacion (debe existir en el workspace).
action.segmentation.removeRemueve la segmentacion actual del contacto.No requiere valor.

Acciones de Etiquetas

TipoDescripcionValor (value)
action.tagAgrega una etiqueta al contacto.Nombre de la etiqueta (debe existir en el workspace).
action.tag.removeRemueve una etiqueta especifica del contacto.Nombre de la etiqueta a remover.

Acciones de Estado

TipoDescripcionValor (value)
action.solvedMarca la conversacion como resuelta o pendiente."true" para resolver, "false" para reabrir.
action.agentshutdownDesactiva o activa el agente de IA para la sesion actual."true" para desactivar, "false" para activar.

Acciones de Eventos (Calendario)

TipoDescripcionValor (value)
action.event.addCrea un nuevo evento/cita en el calendario.Nombre descriptivo del tipo de evento.
action.event.updateActualiza un evento existente.-
action.event.listLista los eventos del contacto.-
action.event.confirmConfirma un evento pendiente.-
action.event.cancelCancela un evento existente.-
action.event.deleteElimina un evento del calendario.-

Acciones de Secuencias

TipoDescripcionValor (value)
action.secuenceAsigna una secuencia automatizada al contacto.ID de la secuencia a iniciar.

Referencia Detallada de Cada Accion

action.asign - Asignar Agente Humano

Asigna un agente humano al contacto. El contacto aparecera en la bandeja del agente asignado.
{
  "type": "action.asign",
  "value": "agente@empresa.com"
}
Que sucede al ejecutarse:
  • Busca al usuario por email dentro del workspace.
  • Asigna el contacto a ese agente.
  • Envia un email de notificacion al agente asignado.
  • Crea una entrada en la bandeja de entrada (inbox) del agente.
  • Registra la asignacion en el historial del contacto.
  • Emite evento en tiempo real (SignalR) para actualizar la interfaz.
El value debe ser el email exacto del agente registrado en el workspace. Si el email no coincide con ningun miembro del equipo, la accion no se ejecutara.

action.unassign - Desasignar Agente

Remueve al agente humano asignado del contacto.
{
  "type": "action.unassign",
  "value": ""
}
Que sucede al ejecutarse:
  • Limpia el agente asignado, nombre del agente y fecha de asignacion.
  • Registra la desasignacion en el historial del contacto.

action.stage - Asignar Etapa

Asigna una etapa (fase) al contacto. Las etapas deben estar previamente configuradas en el workspace.
{
  "type": "action.stage",
  "value": "prospecto"
}
Que sucede al ejecutarse:
  • Busca la etapa por nombre en la configuracion del workspace (masterOfStages).
  • Asigna el ID de la etapa al contacto.
  • Registra el cambio de etapa en el historial.
El value debe coincidir exactamente con el nombre de una etapa configurada en el workspace. Si no existe, la accion no se ejecutara.

action.stage.remove - Remover Etapa

Remueve la etapa actualmente asignada al contacto.
{
  "type": "action.stage.remove",
  "value": ""
}

action.segmentation - Asignar Segmentacion

Asigna una segmentacion al contacto. Las segmentaciones deben estar previamente configuradas en el workspace.
{
  "type": "action.segmentation",
  "value": "cliente_premium"
}
Que sucede al ejecutarse:
  • Busca la segmentacion por nombre en la configuracion del workspace (masterOfSegmentation).
  • Asigna el ID de la segmentacion al contacto.
  • Registra el cambio en el historial.

action.segmentation.remove - Remover Segmentacion

Remueve la segmentacion actualmente asignada al contacto.
{
  "type": "action.segmentation.remove",
  "value": ""
}

action.tag - Agregar Etiqueta

Agrega una etiqueta al contacto. Un contacto puede tener multiples etiquetas simultaneamente.
{
  "type": "action.tag",
  "value": "interesado"
}
Que sucede al ejecutarse:
  • Busca la etiqueta por nombre en la configuracion del workspace (masterOfTags).
  • Agrega la etiqueta a la lista del contacto (evita duplicados).
  • Registra el cambio en el historial.
A diferencia de action.stage y action.segmentation que reemplazan el valor actual, action.tag agrega la etiqueta a las existentes. Un contacto puede tener multiples etiquetas al mismo tiempo.

action.tag.remove - Remover Etiqueta

Remueve una etiqueta especifica del contacto.
{
  "type": "action.tag.remove",
  "value": "interesado"
}

action.solved - Marcar como Resuelto

Marca la conversacion del contacto como resuelta o la reabre.
{
  "type": "action.solved",
  "value": "true"
}
Que sucede al ejecutarse:
  • Si value es "true":
    • Marca la conversacion como resuelta (isSolved = true).
    • Registra la fecha de resolucion.
    • Si el workspace tiene la opcion “Limpiar datos al resolver” activada (fCleanContactDataOnSolve), se limpian automaticamente: segmentacion, etapa y etiquetas del contacto.
  • Si value es "false":
    • Reabre la conversacion (isSolved = false).
Si el workspace tiene activada la opcion de limpiar datos al resolver, al marcar como resuelto se eliminaran la segmentacion, etapa y etiquetas del contacto automaticamente. Ten esto en cuenta al disenar tu flujo de acciones.

action.agentshutdown - Desactivar Agente IA

Desactiva o reactiva el agente de IA para la sesion actual del contacto. Esto es util cuando se transfiere la conversacion a un agente humano y se necesita que el bot deje de responder.
{
  "type": "action.agentshutdown",
  "value": "true"
}
ValorComportamiento
"true"Desactiva el agente de IA. No respondera hasta que se reactive manualmente.
"false"Reactiva el agente de IA para el contacto.
Si se desactiva el agente con "true", no volvera a contestar hasta que se reactive de forma manual desde la interfaz o con otra accion que envie "false". Usalo con precaucion.

action.secuence - Asignar Secuencia

Asigna una secuencia automatizada al contacto. Las secuencias permiten ejecutar una serie de pasos programados (mensajes, esperas, acciones) de forma automatica.
{
  "type": "action.secuence",
  "value": "seq_abc123"
}
Que sucede al ejecutarse:
  • Busca la secuencia por ID.
  • Obtiene el primer paso de la secuencia.
  • Asigna la secuencia al contacto con estado activo.
  • El orquestador de secuencias continuara ejecutando los pasos automaticamente.
El value debe ser el ID de la secuencia, no su nombre. Puedes obtener el ID de la secuencia desde la seccion de Secuencias en el panel de Plazbot.

Acciones de Eventos (Calendario)

Las acciones de tipo action.event.* permiten gestionar citas, reuniones y eventos directamente desde el agente de IA. Si el workspace tiene integrado Google Calendar, los eventos se sincronizan automaticamente.
Cuando configuras al menos una accion de tipo action.event.add, el sistema inyecta automaticamente una herramienta de consulta de disponibilidad (check_availability) para que el agente pueda verificar horarios libres antes de agendar.

action.event.add - Crear Evento

Crea un nuevo evento o cita en el calendario del contacto. Parametros recopilados del usuario (via requiredFields):
ParametroAliases aceptadosDescripcion
Titulotitulo, title, nombre_eventoTitulo del evento.
Descripciondescripcion, description, detalleDescripcion o motivo del evento.
Fecha iniciofecha, date, appointment_datetime, startDate, fecha_inicioFecha y hora de inicio.
Fecha finfecha_fin, endDate, end_dateFecha y hora de fin (opcional).
ColorcolorColor del evento (por defecto: #0284c7).
DuraciondurationMinutesDuracion en minutos (por defecto: 30). Se puede definir tambien en el campo durationMinutes de la accion.
{
  "intent": "agendar_cita",
  "reference": "El usuario quiere agendar una cita o reunion",
  "enabled": true,
  "requiredFields": [
    {
      "name": "fecha",
      "description": "Fecha y hora deseada para la cita",
      "type": "datetime"
    },
    {
      "name": "titulo",
      "description": "Motivo o titulo de la cita",
      "type": "string"
    }
  ],
  "responseMessage": "Tu cita '{{titulo}}' ha sido agendada para el {{fecha}}.",
  "responseExact": true,
  "action": [
    {
      "type": "action.event.add",
      "value": "cita",
      "durationMinutes": 30
    }
  ]
}
Que sucede al ejecutarse:
  • Valida que no existan conflictos de horario con otros eventos.
  • Crea el evento local con los datos recopilados.
  • Si el workspace tiene Google Calendar integrado, sincroniza el evento automaticamente.
  • Retorna informacion del evento creado al agente.
El sistema valida automaticamente conflictos de horario. Si ya existe un evento en el horario solicitado, la creacion fallara y el agente informara al usuario sobre el conflicto.

action.event.update - Actualizar Evento

Actualiza un evento existente del contacto. Parametros recopilados del usuario:
ParametroAliases aceptadosDescripcion
ID del eventoevent_id, eventId, id_eventoID del evento a actualizar.
Titulotitulo, title, nombre_eventoNuevo titulo (opcional).
Fecha iniciofecha, date, startDate, fecha_inicioNueva fecha de inicio (opcional).
Fecha finfecha_fin, endDate, end_dateNueva fecha de fin (opcional).
Que sucede al ejecutarse:
  • Busca el evento por ID.
  • Actualiza los campos proporcionados (valida conflictos si cambia la fecha).
  • Sincroniza los cambios con Google Calendar si aplica.

action.event.list - Listar Eventos

Lista todos los eventos del contacto asociados al agente actual.
{
  "type": "action.event.list",
  "value": ""
}
Que sucede al ejecutarse:
  • Filtra eventos por agente (cada agente solo ve sus propios eventos).
  • Retorna la lista formateada con: titulo, fecha, estado y detalles.
  • El agente puede presentar la informacion al usuario de forma conversacional.

action.event.confirm - Confirmar Evento

Confirma un evento que esta pendiente.
{
  "type": "action.event.confirm",
  "value": ""
}
Parametros recopilados del usuario:
ParametroAliases aceptadosDescripcion
ID del eventoevent_id, eventIdID del evento a confirmar. Si no se especifica, confirma el ultimo evento creado.
Que sucede al ejecutarse:
  • Busca el evento por ID (o usa el ultimo si no se especifica).
  • Cambia el estado del evento a "confirmed".
  • Registra la fecha de confirmacion.

action.event.cancel - Cancelar Evento

Cancela un evento existente sin eliminarlo.
{
  "type": "action.event.cancel",
  "value": ""
}
Que sucede al ejecutarse:
  • Cambia el estado del evento a "cancelled".
  • Registra la fecha de cancelacion.
  • Sincroniza el cambio con Google Calendar si aplica.

action.event.delete - Eliminar Evento

Elimina un evento del calendario de forma permanente.
{
  "type": "action.event.delete",
  "value": ""
}
Parametros recopilados del usuario:
ParametroAliases aceptadosDescripcion
ID del eventoevent_id, eventIdID del evento a eliminar. Si se envia "last", elimina el ultimo evento.
Que sucede al ejecutarse:
  • Busca el evento por ID.
  • Si el evento esta sincronizado con Google Calendar, lo elimina tambien de Google.
  • Remueve el evento del array de eventos del contacto de forma permanente.

Herramienta de Disponibilidad (Auto-inyectada)

Cuando el agente tiene configurada al menos una accion action.event.add, el sistema inyecta automaticamente la herramienta check_availability. El agente de IA la utiliza antes de crear un evento para verificar horarios disponibles. Parametros que recibe la herramienta:
ParametroTipoDescripcion
datestringFecha a consultar en formato YYYY-MM-DD.
duration_minutesnumberDuracion de la cita en minutos (por defecto usa el durationMinutes de action.event.add).
Respuesta de la herramienta:
{
  "available": true,
  "message": "Horarios disponibles para el 2026-02-16",
  "date": "2026-02-16",
  "businessHours": "09:00 - 18:00 | 19:00 - 21:00",
  "timezone": "America/Lima (UTC-5:00)",
  "slots": ["09:00", "09:30", "10:00", "10:30", "11:00"],
  "totalSlots": 16
}
La herramienta utiliza la configuracion de horario comercial (businessHoursConfig) del workspace para calcular los slots disponibles. Asegurate de tener configurados los horarios de atencion correctamente.

Campos Requeridos en Acciones

Las acciones soportan requiredFields, que funcionan de la misma forma que en los servicios. Esto es util cuando la accion necesita datos del usuario antes de ejecutarse (por ejemplo, una fecha para agendar un evento).
{
  "intent": "agendar_cita",
  "reference": "El usuario quiere agendar una cita o reunion",
  "enabled": true,
  "requiredFields": [
    {
      "name": "fecha",
      "description": "Fecha deseada para la cita",
      "promptHint": "Cual es la fecha que prefieres para la cita?",
      "type": "datetime"
    },
    {
      "name": "motivo",
      "description": "Motivo de la cita",
      "type": "string"
    }
  ],
  "responseMessage": "Tu cita ha sido agendada para el {{fecha}}.",
  "responseExact": true,
  "action": [
    {
      "type": "action.event.add",
      "value": "cita"
    }
  ]
}
Tipos de campos soportados:
TipoDescripcion
stringTexto libre.
numberValor numerico.
booleanVerdadero o falso.
datetimeFecha y hora.
arrayLista de valores.
arrayobjectLista de objetos.
Las variables recopiladas en requiredFields se pueden usar en el responseMessage con los formatos {{variable}}, {variable} o @variable.

Tipos de Respuesta

Las acciones del agente tienen configuraciones que determinan como responde despues de ejecutar las acciones:

responseExact (Tool Calling)

Cuando el agente esta en modo Tool Calling (useToolCalling: true), el resultado de una accion normalmente pasa al LLM, que reformula el mensaje antes de enviarlo al usuario. Con responseExact: true, el responseMessage se envia directamente al usuario sin pasar por el LLM.
ValorComportamiento
trueEjecuta las acciones + envia el responseMessage exacto al usuario (con variables sustituidas).
falseEjecuta las acciones + el LLM genera una respuesta basada en el resultado (comportamiento por defecto).
Ejemplo con responseExact = true:
Usuario: "Quiero hablar con soporte"
Bot: [Ejecuta acciones: action.asign → soporte@empresa.com]
Bot: "He transferido tu conversacion al equipo de soporte. Te atenderan en breve."
(exactamente el responseMessage configurado)
Ejemplo con responseExact = false:
Usuario: "Quiero hablar con soporte"
Bot: [Ejecuta acciones: action.asign → soporte@empresa.com]
Bot: "Entendido, he asignado tu caso a nuestro equipo de soporte tecnico. Ellos se pondran en contacto contigo muy pronto para ayudarte."
(el LLM reformula el mensaje)

responseJson (Orquestador Clasico)

Controla el formato de la respuesta cuando se consume via API/SDK. Solo aplica en el orquestador clasico (sin Tool Calling).
ValorFormato de Respuesta
falseTexto plano.
trueJSON estructurado.
Ejemplo con responseJson = false:
{
  "success": true,
  "answer": "Gracias por tu consulta, un ejecutivo te contactara pronto."
}
Ejemplo con responseJson = true:
{
  "success": true,
  "answer": {
    "message": "Gracias por tu consulta, un ejecutivo te contactara pronto.",
    "actionsExecuted": [
      {
        "type": "action.tag",
        "value": "comercial"
      },
      {
        "type": "action.stage",
        "value": "prospecto"
      }
    ]
  }
}
En modo Tool Calling, la respuesta siempre incluye actionsExecuted en el resultado del tool, independientemente del valor de responseJson.

Casos de Uso Comunes

1. Transferir a Agente Humano

Asigna un agente humano, desactiva el bot y responde con mensaje fijo.
{
  "intent": "contactar_soporte",
  "reference": "El usuario quiere contactar con soporte tecnico o hablar con un humano",
  "tags": ["soporte", "ayuda", "humano"],
  "enabled": true,
  "responseMessage": "He transferido tu conversacion al equipo de soporte. Te atenderan en breve.",
  "responseExact": true,
  "action": [
    {
      "type": "action.asign",
      "value": "soporte@empresa.com"
    },
    {
      "type": "action.agentshutdown",
      "value": "true"
    }
  ]
}

2. Clasificar Lead Automaticamente

Etiqueta y segmenta al contacto segun la intencion detectada. El LLM genera la respuesta.
{
  "intent": "solicitar_informacion",
  "reference": "El usuario solicita informacion sobre productos o servicios",
  "tags": ["informacion", "productos"],
  "enabled": true,
  "responseMessage": "",
  "responseExact": false,
  "action": [
    {
      "type": "action.tag",
      "value": "lead_caliente"
    },
    {
      "type": "action.segmentation",
      "value": "interesado"
    },
    {
      "type": "action.stage",
      "value": "prospecto"
    }
  ]
}

3. Agendar Cita con Campos Requeridos

El agente recopila los datos necesarios, crea el evento y responde con mensaje exacto.
{
  "intent": "agendar_reunion",
  "reference": "El usuario quiere agendar una reunion o cita",
  "tags": ["cita", "calendario", "reunion"],
  "enabled": true,
  "requiredFields": [
    {
      "name": "fecha",
      "description": "Fecha y hora de la reunion",
      "promptHint": "Para cuando te gustaria agendar la reunion?",
      "type": "datetime"
    },
    {
      "name": "nombre_cliente",
      "description": "Nombre del cliente",
      "type": "string"
    }
  ],
  "responseMessage": "Listo {{nombre_cliente}}, tu reunion ha sido agendada para el {{fecha}}.",
  "responseExact": true,
  "action": [
    {
      "type": "action.event.add",
      "value": "reunion",
      "durationMinutes": 30
    },
    {
      "type": "action.tag",
      "value": "reunion_agendada"
    }
  ]
}

4. Resolver Conversacion y Etiquetar

Marca la conversacion como resuelta y agrega una etiqueta de cierre.
{
  "intent": "finalizar_conversacion",
  "reference": "El usuario indica que ya no necesita mas ayuda o quiere cerrar la conversacion",
  "tags": ["cerrar", "finalizar", "gracias"],
  "enabled": true,
  "responseMessage": "Gracias por contactarnos. Hemos marcado tu conversacion como resuelta.",
  "responseExact": true,
  "action": [
    {
      "type": "action.tag",
      "value": "atendido"
    },
    {
      "type": "action.solved",
      "value": "true"
    }
  ]
}

5. Accion para API/Webhook (JSON)

Respuesta JSON estructurada para integraciones externas via API/SDK.
{
  "intent": "registrar_lead",
  "reference": "Registro automatico de lead en sistema externo",
  "tags": ["lead", "crm"],
  "enabled": true,
  "responseMessage": "Registro completado exitosamente",
  "responseExact": false,
  "responseJson": true,
  "action": [
    {
      "type": "action.tag",
      "value": "lead_registrado"
    }
  ]
}

Flujo de Ejecucion

El siguiente diagrama muestra como se procesan las acciones dentro del flujo del agente:
1

Deteccion de Intencion

El usuario envia un mensaje. El LLM analiza el reference y tags de cada accion para determinar si alguna coincide con la intencion del usuario.
2

Recopilacion de Campos

Si la accion tiene requiredFields, el agente recopila los datos necesarios del usuario de forma conversacional antes de ejecutar.
3

Ejecucion de Acciones

El sistema ejecuta cada accion del arreglo action en orden secuencial. Cada accion actualiza el contacto, emite eventos en tiempo real y registra el cambio en el historial.
4

Respuesta al Usuario

Segun la configuracion: si responseExact es true, envia el responseMessage textual. Si es false, el LLM genera una respuesta natural basada en el resultado de las acciones.
El ciclo de ejecucion soporta hasta 8 iteraciones de tool calling. Si el agente necesita ejecutar multiples herramientas (por ejemplo, verificar disponibilidad y luego crear un evento), lo hara dentro de este ciclo de forma automatica.