Las integraciones envían los eventos del negocio a otro servicio en el momento en que ocurren: una conversación nueva, una reserva, un aviso al equipo, una solicitud de asistencia. Con Zapier o Make puedes, por ejemplo, añadir una fila a una hoja de cálculo, enviar un mensaje a un chat o crear una ficha en un CRM sin copiar datos a mano.
Dónde encontrarlas
Abre «Módulos» en el menú superior, conecta el módulo «Integraciones» (está desactivado por defecto) y haz clic en «Abrir integraciones» en su tarjeta. Se abre la pestaña «Webhooks», y junto a ella está la pestaña «Registro de eventos». Solo Propietario y Administrador pueden abrir la sección: la dirección de un destino puede contener un token privado. Mientras el módulo está desactivado no se entrega nada, y los eventos ocurridos entretanto no se reenvían después. Los receptores siguen configurados y el registro de eventos sigue guardándose.
Cómo añadir un destino
- En Zapier crea un Zap con el disparador «Webhooks by Zapier» y el evento «Catch Hook» y copia la dirección que te da. En Make añade el módulo «Custom webhook» y copia su dirección.
- En la página de integraciones rellena «Nombre» (por ejemplo, el nombre del Zap) y «Dirección del destino» (la dirección copiada).
- En «Eventos que se envían» marca lo que se debe enviar.
- Haz clic en «Añadir destino».
- El secreto de firma aparece una sola vez. Cópialo y guárdalo. Zapier y Make no lo necesitan; tu propio servidor lo usa para comprobar la firma. Si lo pierdes, crea uno nuevo con «Cambiar el secreto».
- En la ficha del destino haz clic en «Enviar prueba». El resultado dice Entregado o No entregado con el motivo.
La dirección debe ser pública y empezar por https. Se rechazan, y la página indica el motivo: direcciones http, direcciones IP en lugar de un dominio, puertos personalizados, direcciones con usuario y contraseña, direcciones internas y direcciones de dominios de ReceptionWorks. La página muestra solo el dominio y la ruta: la parte tras el signo de interrogación puede contener el token de tu destino.
Qué eventos se envían
- «Nueva conversación» (
conversation.started): un cliente inició una conversación nueva en cualquier canal. Los chats de prueba y los clientes bloqueados no se envían. - «Se solicita a un miembro del equipo» (
conversation.handoff_requested): el empleado de IA o el sistema pidió a un miembro del equipo. El evento incluye el motivo: petición del propio empleado de IA, respuestas automáticas detenidas, modo manual, empleado de IA no disponible, límite de respuestas agotado o plan inactivo. - «Conversación derivada a un miembro del equipo» (
conversation.handed_off): un miembro del equipo asumió la conversación. Se envía cada vez. - «Nueva reserva», «Reserva modificada» y «Reserva cancelada» (
booking.created,booking.changed,booking.cancelled): una reserva fue creada, modificada o cancelada por un empleado de IA, por ti en el calendario o por el asistente del negocio. - «Nueva solicitud de asistencia» (
support_case.created) y «Solicitud de asistencia modificada» (support_case.updated): se creó una solicitud de asistencia o cambió su estado, prioridad o descripción. Las notas internas del equipo no se envían. - «Mensaje nuevo» (
message.created): cada mensaje que ve el cliente, enviado en cuanto se escribe: del cliente, del empleado de IA, de un miembro del equipo o del sistema (un aviso en la conversación). Incluye el texto del mensaje. - «Conversación completa» (
conversation.transcript): toda la conversación, enviada cuando lleva 30 minutos sin mensajes. Si la conversación continúa, se envía de nuevo tras cada pausa posterior.
Los eventos del chat de prueba no se envían. Un destino recibe solo los eventos que ocurren después de añadirlo y mientras está activo: lo ocurrido durante una pausa o desactivación no se envía después.
«Mensaje nuevo» y «Conversación completa» llevan el texto íntegro de las conversaciones, incluido lo que escriben los clientes. El texto sale de ReceptionWorks y llega al destino que elija, así que márquelos solo para destinos de confianza. Un destino nuevo empieza con estos dos desmarcados. Solo se envían mientras algún destino los tenga marcados y no aparecen en el registro de eventos ni en su exportación: la propia conversación está en la bandeja de entrada. Los chats de prueba y los clientes bloqueados no se envían.
Qué recibe el destino
Cada evento es una solicitud POST con un cuerpo JSON. Ejemplo de un aviso al equipo pedido por un empleado de IA:
{
"schema_version": "business-webhook.v1",
"id": "5b0c5e2e-0000-4000-8000-000000000001",
"type": "conversation.handoff_requested",
"occurred_at": "2026-10-07T09:30:00.000Z",
"business": { "name": "Example Studio" },
"actor": { "kind": "ai_employee" },
"channel": "telegram",
"employee": { "name": "Anna" },
"conversation": { "url": "https://app.example.com/businesses/studio/inbox?conversation=example" },
"customer": { "name": "Maria", "email": "maria@example.com", "phone": "+1 555 0100" },
"booking": null,
"handoff": { "reason": "ai_request", "reason_text": "The customer wants to discuss a discount" },
"support_case": null
}
id: el identificador del evento. No cambia en cada reintento, así que ignora un id que ya hayas procesado.type: el tipo de evento de la lista anterior;occurred_at: la hora en UTC.business: el nombre de tu negocio.actor: quién provocó el evento.kindescustomer,ai_employee,team_member(un miembro del equipo o el asistente del negocio) osystem.channel:web,telegram,instagram,whatsappomessenger, onullsi el evento no tiene conversación.employee: el nombre del empleado de IA, onullsi actuó el equipo o el asistente del negocio.conversation.url: un enlace a la conversación; se abre para los miembros del equipo con sesión iniciada.nullsi no hay conversación.customer: nombre, email y teléfono en el momento del envío, onull. Los contactos se envían completos, así que añade solo destinos de confianza.booking: solo en los eventos de reserva:service,starts_at,ends_at,statusylocation.handoff: solo en «Se solicita a un miembro del equipo»:reason(ai_request,automation_stopped,manual_mode,ai_unavailable,quota_exhaustedoplan_inactive) yreason_text, la explicación del propio empleado de IA onull.support_case: solo en los eventos de solicitudes de asistencia:subject,status(open,in_progress,waiting_customer,resolvedoclosed) ypriority(low,normal,highourgent).message: solo para «Mensaje nuevo»:id,sequence(la posición del mensaje en la conversación),author(customer,ai_employee,team_memberosystem),text,created_atyattachments: una lista conkind(siempreimage),nameymedia_type. Solo se envían el nombre y el tipo del adjunto, no el archivo.transcript: solo para «Conversación completa»:message_count(mensajes de la conversación),truncatedymessages: mensajes con la misma forma quemessage. Una transcripción contiene como máximo los 500 mensajes más recientes y 512 KiB de texto;truncatedestruesi se omitieron mensajes más antiguos.
Las secciones que no corresponden al evento son null. El evento de «Enviar prueba» tiene el tipo webhook.test y todas las secciones salvo business son null. Los datos no llevan texto traducido: los nombres son tal como se guardaron, los códigos son palabras fijas en inglés y las horas están en UTC.
"message": {
"id": "6c1d0f52-0000-4000-8000-000000000002",
"sequence": 12,
"author": "customer",
"text": "Hello, can I book for Friday?",
"created_at": "2026-10-07T09:29:41.000Z",
"attachments": [{ "kind": "image", "name": "photo.jpg", "media_type": "image/jpeg" }]
}
Los mensajes y las transcripciones pueden llegar desordenados y repetirse, así que no dependa del orden de llegada. Use sequence para restaurar el orden de los mensajes de una conversación y descarte la entrega cuyo webhook-id ya haya procesado. La transcripción repite mensajes que quizá ya recibió uno a uno: úsela para comprobar o reconstruir toda la conversación.
Cómo comprobar la firma
Cada petición lleva tres cabeceras del estándar Standard Webhooks: webhook-id, webhook-timestamp y
webhook-signature. Zapier y Make no las comprueban. En tu propio servidor usa la biblioteca oficial de Standard
Webhooks para tu lenguaje: pásale el secreto tal como se muestra (empieza por whsec_), el cuerpo original sin
modificar y las tres cabeceras. Comprobación manual:
signed_content = webhook-id + "." + webhook-timestamp + "." + raw request body
signature = "v1," + base64( HMAC-SHA256( key, signed_content ) )
key = base64-decoded part of the secret after "whsec_"
La cabecera webhook-signature contiene v1, y la firma. Después de «Cambiar el secreto» contiene dos firmas separadas por
un espacio: acepta la petición si coincide cualquiera. Rechaza las peticiones cuya marca de tiempo difiera de tu reloj
en más de cinco minutos.
Reintentos y desactivación automática
El destino debe responder con un código 2xx en 10 segundos. No se siguen las redirecciones: una dirección que redirige
cuenta como error. Si no, ReceptionWorks lo intenta de nuevo: enseguida y después a 1 minuto, 5 minutos, 30 minutos,
2 horas, 6 horas y 12 horas. Son 7 intentos en unas 21 horas. Si todos fallan, el envío queda como No entregado en
«Registro de envíos» y puedes hacer clic en «Enviar de nuevo». Los reintentos llevan el mismo webhook-id, así que el destino puede
descartar duplicados.
Un destino se desactiva automáticamente si responde que la dirección ya no existe (código 410) o si cinco eventos seguidos no se entregan. La ficha muestra entonces «Desactivado automáticamente» con el motivo y tu equipo recibe una notificación. Corrige la dirección y haz clic en «Activar»: los eventos perdidos mientras tanto no se envían.
Pausa, secreto nuevo y eliminación
- «Pausar» detiene el envío sin eliminar el destino; haz clic en «Activar» para continuar.
- «Cambiar el secreto» y después «Crear secreto nuevo»: se muestra un secreto nuevo una sola vez. El anterior sigue valiendo 24 horas para que puedas actualizar el destino sin perder eventos.
- «Eliminar» y después «Eliminar destino» eliminan el destino para siempre.
Conviene saber
- Solo Propietario y Administrador gestionan las integraciones. Un negocio puede tener hasta 5 destinos.
- El registro de envíos muestra el evento, el destino, la hora, el estado, los intentos y el próximo intento. No guarda el texto de las peticiones.
- La prueba con «Enviar prueba» no crea una entrada en el registro y no necesita un evento real.