Los triggers son comandos estructurados que una integración puede devolver a Ticketz por mensaje o respuesta de webhook para ejecutar acciones sobre el ticket actual.
Formato del mensaje
Los mensajes usan la siguiente estructura:
{
"type": "text",
"content": "texto del mensaje",
"mediaUrl": "https://example.com/archivo"
}
typepuede sertext,image,video,audio,gifodocument.contentse usa en mensajes de texto.mediaUrlse usa para medios no textuales.
Formas de enviar comandos
1. Burbuja de texto en Typebot
Las integraciones Typebot pueden enviar un comando por vez en una burbuja de texto que comienza con # y sigue con un payload JSON.
#{
"queueId": 99
}
2. Respuesta de webhook
Las integraciones webhook pueden responder con:
- un comando individual
- un mensaje con trigger opcional
- un array de mensajes, cada uno con trigger opcional
Ejemplo:
[
{
"type": "text",
"content": "Un mensaje"
},
{
"type": "text",
"content": "Otro mensaje",
"trigger": { "action": "wait", "seconds": 2 }
},
{
"type": "text",
"content": "Un mensaje con trigger",
"trigger": { "closeTicket": true }
}
]
3. Solicitud HTTP directa al backend
Typebot, Webhook o cualquier sistema externo puede llamar al backend directamente si dispone del token de autorización.
- Endpoint:
${BACKEND_URL}/integrations/webhook - Método:
POST - Cabecera:
Authorization: Bearer ${token}
El payload puede seguir cualquier formato aceptado en la respuesta de webhook.
Comandos disponibles
Enviar un mensaje
message puede ser un objeto de mensaje o un array de objetos.
{
"message": {
"type": "text",
"content": "contenido del mensaje"
}
}
Enviar un mensaje con menú de opciones
{
"message": {
"type": "text",
"content": "Un mensaje"
},
"action": "menu",
"menuOptions": [{ "text": "Opción 1" }, { "text": "Opción 2" }]
}
Enviar un mensaje con botón de URL
Actualmente depende de canales que soporten este formato, como Notificamehub WhatsApp Oficial.
{
"message": {
"type": "text",
"content": "Haz clic en el botón de abajo para saber más"
},
"action": "menu",
"menuOptions": [
{
"text": "Ticketz PRO",
"url": "https://pro.ticke.tz"
}
]
}
Transferir a otra cola
{
"queueId": 99
}
Si la nueva cola no es atendida por chatbot, Ticketz también elimina ese atributo.
Transferir a otra cola y usuario
{
"queueId": 99,
"userId": 42
}
El ticket se acepta automáticamente y aparece en el área activa del nuevo usuario.
Terminar la sesión de integración
{
"action": "endSession"
}
Detener el chatbot
Es equivalente a endSession y existe por compatibilidad con automatizaciones anteriores.
{
"stopbot": true
}
Cerrar el ticket actual
{
"closeTicket": true
}
Añadir una nota interna al ticket
{
"action": "note",
"message": {
"content": "Texto de la nota"
}
}
Actualizar varias propiedades del ticket
{
"action": "updateTicket",
"ticketData": {
"status": "pending",
"userId": 42,
"queueId": 99,
"justClose": false,
"annotation": "Escalado por automatización"
}
}
Campos válidos en ticketData:
status:pending,openocloseduserId: transfiere a otro usuarioqueueId: transfiere a otra colajustClose: cierra sin otras reglas de transiciónannotation: añade una nota al transferir
Esperar algunos segundos
Solo tiene efecto dentro de un array de comandos.
{
"action": "wait",
"seconds": 2
}
Ping
Hace que Ticketz responda automáticamente con pong, lo que ayuda a preservar el orden de procesamiento en Typebot.
{
"action": "ping"
}
Añadir una etiqueta al ticket
Si advanceOnly es verdadero, una etiqueta de embudo no reemplaza otra etiqueta del mismo embudo que ya esté más avanzada.
{
"action": "addTag",
"tagId": 99,
"advanceOnly": true
}
Quitar una etiqueta del ticket
{
"action": "removeTag",
"tagId": 99
}
Limpiar todas las etiquetas del ticket
{
"action": "clearTags"
}
Añadir una etiqueta al contacto
{
"action": "addContactTag",
"tagId": 99,
"advanceOnly": true
}
Quitar una etiqueta del contacto
{
"action": "removeContactTag",
"tagId": 99
}
Limpiar todas las etiquetas del contacto
{
"action": "clearContactTags"
}
Para ver payloads listos para usar, revisa Archivos de ejemplo.