Webhooks¶
Los Webhooks permiten que el Orquestador de BotCity envíe eventos operativos en tiempo real a cualquier endpoint HTTP que configures, ya sea Slack, Microsoft Teams, Datadog, Power BI, Google Chat o cualquier otra herramienta. De esta forma, recibes las notificaciones en el momento en que ocurren, sin necesidad de consultar periódicamente la API del Orquestador ni mantener una automatización auxiliar solo para eso.
¿Quién tiene acceso?
Los Webhooks están disponibles solo en planes de pago. Solo los usuarios con el rol de Administrador pueden crear, editar, eliminar, activar o desactivar webhooks.
Crear un webhook¶
- Accede a Integration Hub > Webhooks en el menú lateral.
- Haz clic en
Novo Webhook +. - Indica:
- Nombre: un nombre descriptivo para identificar el webhook.
- URL del endpoint: la URL HTTP que recibirá los eventos.
- Selecciona los eventos: al menos uno de los eventos admitidos, de cualquier categoría.
- Haz clic en
Guardaren la esquina superior derecha. -
La plataforma genera una clave de firma HMAC y muestra un botón para copiarla.
Guarda la clave
La clave de firma solo se muestra en texto claro en ese momento. Cópiala y guárdala en un lugar seguro, no se mostrará de nuevo.
-
Se creará una tarjeta en la página de webhooks, que puedes activar y desactivar cuando lo necesites.
- Mientras esté activo, cada vez que ocurra uno de los eventos seleccionados, la plataforma envía un
POSTa la URL indicada.
Organización de notificaciones
Puedes combinar eventos de distintas categorías en un único webhook o crear webhooks separados por categoría, o por destino.
Por ejemplo:
- Fallas:
Tarea con falla,Runner sin conexióneItem con error de negocio - Seguimiento:
Tarea inició ejecución,Runner en líneaeItem finalizado con éxito
Eventos admitidos¶
Cada webhook escucha los eventos que selecciones entre las cuatro categorías siguientes.
Tarea¶
| Evento | Cuándo se dispara |
|---|---|
| Tarea inició ejecución | Cuando el Runner comienza a ejecutar una tarea. |
| Tarea finalizada con éxito | Cuando una tarea se completa con éxito. |
| Tarea con falla | Cuando una tarea falla durante la ejecución. |
| Tarea parcialmente finalizada | Cuando una tarea finaliza con parte de los items procesados y parte sin procesar. |
| Tarea en timeout | Cuando una tarea supera el tiempo de ejecución configurado. |
| Tarea cancelada | Cuando una tarea se cancela antes de iniciar la ejecución. |
Runner¶
| Evento | Cuándo se dispara |
|---|---|
| Runner quedó sin conexión | Cuando un Runner pierde la conexión con el Orquestador. |
| Runner volvió a conectarse | Cuando un Runner establece la conexión con el Orquestador. |
Alerta¶
| Evento | Cuándo se dispara |
|---|---|
| Alerta de error emitida | Cuando se emite una alerta de tipo error durante la ejecución de una automatización. |
| Alerta de aviso emitida | Cuando se emite una alerta de tipo aviso durante la ejecución de una automatización. |
Datapool¶
| Evento | Cuándo se dispara |
|---|---|
Item finalizado con error tipo SISTEMA |
Cuando un item del Datapool finaliza con un error de sistema. |
Item finalizado con error tipo NEGOCIO |
Cuando un item del Datapool finaliza con un error de regla de negocio. |
| Item en timeout | Cuando un item del Datapool supera el tiempo de procesamiento configurado. |
| Item finalizado con éxito | Cuando un item del Datapool finaliza con éxito. |
| Datapool con volumen alto de errores | Cuando el 50% del total de items procesados resulta en error de Datapool. |
Configurar el destino de los eventos¶
Todo webhook envía el payload del evento del Orquestador de BotCity a la URL HTTP que configures.
Herramientas específicas
En esta versión no existe una integración nativa que traduzca ese payload al formato de mensaje de una herramienta específica como Slack, Microsoft Teams o Google Chat.
Para recibir los eventos, debes mantener un endpoint HTTP propio, responsable de procesar el payload del Orquestador de BotCity y, si corresponde, reenviar la información a la herramienta de destino (Slack, Microsoft Teams, Datadog, Power BI, Google Chat, entre otras) en el formato que ella espera.
Tu endpoint necesita:
- Estar accesible públicamente vía HTTPS, en la URL indicada al crear el webhook.
- Aceptar solicitudes
POSTcon cuerpo enJSON. - Validar la firma HMAC enviada en cada solicitud, según se describe en Autenticación.
- Responder dentro del límite de 1 segundo, conforme a la política de reintentos y timeout.
Las siguientes secciones detallan el contrato entre el Orquestador y tu endpoint: cómo validar la autenticidad de las solicitudes, cuál es la estructura del payload enviado para cada tipo de evento y cómo el Orquestador maneja las fallas y los reenvíos.
Autenticación¶
Todo envío está firmado con HMAC-SHA256 y se envía en el header X-BotCity-Signature-256. Usa la clave de firma generada al crear el webhook para validar esa firma en tu endpoint antes de procesar el payload.
Valida siempre la firma
Si tu endpoint no valida la firma, cualquier persona que descubra la URL podrá enviarle solicitudes forjadas. La validación es responsabilidad de la aplicación que recibe el webhook.
Ejemplo de validación¶
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
public boolean validarFirma(byte[] payload, String firmaRecibida, String claveSecreta) throws Exception {
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(claveSecreta.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
StringBuilder hex = new StringBuilder();
for (byte b : mac.doFinal(payload)) {
hex.append(String.format("%02x", b));
}
return MessageDigest.isEqual(
hex.toString().getBytes(StandardCharsets.UTF_8),
firmaRecibida.getBytes(StandardCharsets.UTF_8)
);
}
Valida siempre sobre el cuerpo bruto
Calcula la firma sobre el cuerpo de la solicitud bruto (antes de cualquier parseo de JSON). Parsear primero y volver a serializar puede generar una cadena distinta de la que firmó la BotPlataforma.
Estructura del payload¶
Todo evento llega con la misma estructura: id, type, date y body. El contenido de body cambia según el tipo de evento.
Ejemplo de payload¶
Evita procesar eventos duplicados
Cada evento tiene un id único. Úsalo para verificar duplicados de tu lado, el modelo de entrega es at-least-once, es decir, el mismo evento puede, en casos raros, llegar más de una vez.
Política de reintentos y timeout¶
El envío es asíncrono: una falla en tu endpoint nunca afecta la ejecución de la automatización.
- Timeout: tu endpoint tiene 1 segundo para responder.
- Reintentos: hasta 3 intentos, con backoff exponencial entre ellos.
- Error 4xx: este tipo de error se trata como una falla definitiva, sin intentar reenviar.
- Ejemplo: falla de autenticación o payload inválido de tu lado.
- Status Code: el Orquestador valida únicamente el status code de la respuesta, el cuerpo de la respuesta no se lee.
- Éxito =
2xx
- Éxito =
Responde rápido, procesa después
Tu endpoint debe limitarse a recibir y encolar el evento. Cualquier procesamiento más pesado debe ocurrir fuera del camino síncrono del webhook, para no superar el timeout de 1 segundo.
Detalles del webhook¶
Después de crear tus Webhooks, tienes la opción de:
- Activar / desactivar: alterna el estado del webhook directamente desde la tarjeta, sin necesidad de eliminarlo y volver a crearlo.
- Visualizar: haz clic en el nombre del Webhook para abrir la página de detalles.
- Menú de opciones:
Edit: cambia el nombre, la URL del endpoint o los eventos seleccionados.Delete: elimina el webhook de forma definitiva. Esta acción no se puede deshacer.
Visualizar¶
Al acceder a la página de tu Webhook, encontrarás la información organizada en bloques.
Información general¶
- Nombre: el nombre definido para el webhook.
- URL: el endpoint que recibe los eventos.
- Clave secreta: permite generar una nueva clave de firma HMAC, invalidando la anterior.
- Eventos: los eventos seleccionados para ese webhook, agrupados por categoría.
Resumen de entregas¶
En este bloque encontrarás una tabla con todos los intentos de envío:
- Status: si la entrega se completó con éxito o falló.
- Evento: el evento que disparó el envío.
- Fecha y hora: cuándo ocurrió el intento de envío.
- Duración: cuánto tiempo tardó tu endpoint en responder.
- HTTP: el status code HTTP devuelto por tu endpoint.
- Payload: cada fila se puede expandir para mostrar el payload enviado en ese intento, con un botón para copiarlo.
También puedes filtrar las entregas por status o evento, y por período usando Data de inicio y Data de fin.
La respuesta de tu endpoint no se muestra
La tabla muestra el payload enviado por el Orquestador, pero no el cuerpo de la respuesta de tu endpoint, ya que la plataforma valida únicamente el status code.
Desactivación automática¶
Si un webhook acumula 10 entregas consecutivas con falla, se desactiva automáticamente. Un banner en la pantalla del webhook explica el motivo, con un enlace al historial de entregas.
La reactivación siempre es manual, realizada por un Administrador.
Límites y permisos¶
- Disponible solo en planes de pago.
- Solo el rol Administrador puede crear, editar, eliminar, activar o desactivar webhooks.
- Límite de 10 webhooks por workspace. Al alcanzar el límite, el botón de creación se deshabilita.


