Saltar al contenido
OmniChannels.ai

Cómo conectar un CRM a una bandeja omnicanal con webhooks

Conecte un CRM a una bandeja de entrada omnicanal con webhooks: eventos a sincronizar, idempotencia, reintentos, cruce de contactos, privacidad y arquitectura.

Actualizado 8 min de lectura

Por OmniChannels.ai Editorial Team · Revisado por BroadNet Messaging Solutions Team

Integración

Respuesta breve

Para conectar un CRM a una bandeja de entrada omnicanal, suscríbase a los webhooks de conversaciones y mensajes, recíbalos en un endpoint sencillo que verifique la firma y guarde cada evento una sola vez según su ID, y procéselos de forma asíncrona: cruce al remitente con un contacto del CRM por teléfono normalizado, correo o ID social, y escriba las actividades de vuelta. En sentido contrario, use la API de la bandeja para enviar mensajes o cambiar el propietario desde los flujos del CRM.

En esta página
  1. ¿Qué deben intercambiar un CRM y una bandeja de entrada omnicanal?
  2. ¿A qué eventos de webhook conviene suscribirse?
  3. ¿Cómo se construye un receptor de webhooks fiable?
  4. ¿Cómo se cruzan los contactos entre canales?
  5. ¿Cómo se gestiona la privacidad de los datos en una integración con un CRM?
  6. ¿Qué aspecto tiene una arquitectura de referencia?
  7. Ejemplo práctico: un grupo de clínicas en Yeda
  8. ¿Cuáles son los errores más comunes?
  9. Cómo ayuda OmniChannels.ai

Puntos clave

  • Los webhooks envían eventos de la bandeja al CRM casi en tiempo real; las API consultan datos o disparan acciones en sentido contrario. Una integración sólida usa ambos.
  • La entrega de webhooks suele ser «al menos una vez», así que el receptor debe deduplicar por ID de evento y tolerar eventos que lleguen desordenados.
  • Confirme los webhooks rápidamente y realice el trabajo del CRM en una cola en segundo plano, para que las llamadas lentas al CRM no provoquen reintentos ni duplicados.
  • Cruce los contactos con identificadores normalizados, como teléfonos en formato E.164 y correos en minúsculas, y nunca fusione registros solo por el nombre.
  • Envíe solo los datos que el CRM necesita, mantenga el contenido de los mensajes fuera del CRM cuando baste un resumen y cumpla la ley de privacidad aplicable, como el RGPD o las leyes de protección de datos de Emiratos y Arabia Saudí.

Esta guía es para CTO, arquitectos de soluciones y administradores de CRM que necesitan que su CRM y su bandeja de entrada omnicanal compartan una única visión del cliente. Explica qué eventos sincronizar, cómo construir un receptor de webhooks que resista reintentos y duplicados, cómo cruzar contactos entre WhatsApp, Instagram y correo, y qué normas de privacidad condicionan el diseño.

¿Qué deben intercambiar un CRM y una bandeja de entrada omnicanal?

La bandeja debe decirle al CRM quién contactó con la empresa, por qué canal, sobre qué y con qué resultado. El CRM debe decirle a la bandeja quién es el cliente, quién lo gestiona y qué contexto necesitan los agentes.

Sentido Datos Uso típico
Bandeja a CRM Nueva conversación, canal, identificadores del contacto Crear o actualizar el contacto, registrar la actividad
Bandeja a CRM Cambios de asignación y estado, resolución Actualizar la cronología del caso o la oportunidad, medir el tiempo de gestión
Bandeja a CRM Estado de entrega de plantillas salientes Seguir los resultados de campañas o notificaciones
CRM a bandeja Nombre del contacto, idioma, responsable de cuenta, nivel Enrutamiento y personalización
CRM a bandeja Disparador para enviar una plantilla aprobada Actualizaciones de pedido, cita o caso
CRM a bandeja Cambio de propietario Derivar a los clientes recurrentes a su gestor de cuenta

Empiece por el conjunto más pequeño que sostenga un flujo de trabajo real. Sincronizar el cuerpo de cada mensaje con el CRM rara vez es necesario y aumenta la exposición en materia de privacidad.

¿A qué eventos de webhook conviene suscribirse?

Suscríbase a los eventos del ciclo de vida, no solo a los mensajes. Los nombres exactos varían entre plataformas, así que asígnelos a estas categorías:

  • Conversación creada: primer mensaje de un cliente por cualquier canal.
  • Mensaje recibido: mensaje entrante del cliente, con el canal y el identificador del remitente.
  • Mensaje enviado: mensaje saliente de un agente o plantilla.
  • Estado del mensaje: enviado, entregado, leído o fallido, cuando el canal lo informa.
  • Conversación asignada: cambio de propietario o de cola.
  • Conversación resuelta o reabierta: transiciones de estado.
  • Contacto actualizado: identificadores o atributos modificados en la bandeja.

En WhatsApp, los webhooks de Meta entregan a la plataforma los mensajes entrantes y las actualizaciones de estado de los salientes; después, su proveedor de bandeja de entrada expone sus propios eventos a sus sistemas.

¿Cómo se construye un receptor de webhooks fiable?

Aceptar rápido, verificar, guardar una vez, procesar después. La mayoría de los problemas de entrega vienen de hacer trabajo del CRM dentro de la propia solicitud del webhook.

Diseño del receptor paso a paso

  1. Exponga un endpoint HTTPS por entorno, por ejemplo /webhooks/inbox.
  2. Verifique la autenticidad. Compruebe la firma (normalmente un HMAC del cuerpo sin procesar con un secreto compartido, tal como define la RFC 2104) o el token que documente el emisor. Calcúlela sobre los bytes originales antes de interpretar el JSON.
  3. Compruebe la vigencia. Si se incluye una marca de tiempo, rechace los eventos fuera de una tolerancia corta para limitar las repeticiones.
  4. Deduplique. Inserte el ID del evento en una tabla con restricción de unicidad. Si la inserción falla porque el ID ya existe, devuelva éxito y deténgase.
  5. Encole. Ponga el evento en una cola y devuelva de inmediato una respuesta 2xx.
  6. Procese de forma asíncrona. Un worker lee la cola, cruza el contacto y escribe en el CRM mediante upserts.
  7. Reintente con backoff. Si el CRM está caído, reintente desde su cola con backoff exponencial; no dependa de los reintentos del emisor.
  8. Dead-letter. Tras varios fallos, mueva el evento a una cola de mensajes fallidos (dead-letter) y avise a una persona.
  9. Concilie. Ejecute una tarea periódica que compare las conversaciones recientes de la bandeja con los registros del CRM y rellene los huecos con la API de la bandeja.

Por qué importan la idempotencia y el orden

Los emisores de webhooks suelen reintentar cuando no reciben una respuesta de éxito a tiempo, lo que hace que la entrega sea «al menos una vez». El mismo evento puede llegar dos veces, y un evento «resuelta» puede llegar antes que el último «mensaje recibido». Para gestionarlo:

  • Use el ID del evento como clave de deduplicación.
  • Use upserts con clave en el ID de la conversación o del mensaje en el CRM.
  • Compare las marcas de tiempo o los números de secuencia de los eventos e ignore los estados más antiguos.

Cuando su flujo del CRM llame a la API de la bandeja para enviar un mensaje, pase una clave de idempotencia si la API la admite; el borrador del IETF sobre una cabecera HTTP Idempotency-Key describe el patrón habitual.

¿Cómo se cruzan los contactos entre canales?

Cruce con identificadores normalizados, priorice las coincidencias deterministas y derive la ambigüedad a una persona.

Identificador Normalizar como Fiabilidad del cruce Notas
Teléfono de WhatsApp o SMS E.164, por ejemplo +9715XXXXXXXX Alta Cuidado con los formatos locales con cero inicial
Correo electrónico Minúsculas, sin espacios sobrantes Alta Los alias pueden ser la misma persona; no lo dé por hecho
Cuenta de Instagram ID de usuario propio de la plataforma Alta dentro de esa cuenta Los nombres de usuario pueden cambiar; guarde el ID, no solo el nombre
Usuario de Telegram ID de usuario de la plataforma Alta dentro de ese bot o cuenta Puede que no comparta el teléfono
Nombre Nunca por sí solo Baja No fusione nunca por el nombre

Reglas de decisión:

  1. Una coincidencia exacta: vincúlela.
  2. Ninguna coincidencia: cree un lead o un «contacto sin cruzar» con el canal de origen.
  3. Varias coincidencias: márquelas para un agente; no las fusione automáticamente.
  4. El cliente confirma otro identificador en la conversación: vincúlelo anotando la evidencia.

¿Cómo se gestiona la privacidad de los datos en una integración con un CRM?

Mueva solo lo que cada sistema necesita, documente el porqué y haga que la supresión funcione en ambos sistemas.

  • Minimización de datos. Guarde en el CRM enlaces a conversaciones, resultados y resúmenes; mantenga las transcripciones completas en la bandeja salvo que exista una finalidad definida.
  • Base legal y consentimiento. Registre el consentimiento de marketing por canal; una conversación de soporte no es consentimiento para plantillas de marketing.
  • Conservación. Alinee los plazos de conservación de la bandeja, el CRM, las colas y los registros; los registros de cargas de webhooks suelen olvidarse.
  • Control de acceso. Limite quién puede ver el contenido de los mensajes y los adjuntos en el CRM.
  • Solicitudes de supresión y acceso. Haga que una solicitud en un sistema se propague al otro.
  • Transferencias internacionales. Compruebe dónde almacena los datos cada sistema. El RGPD se aplica a los datos personales de las personas en la UE, y tanto Emiratos Árabes Unidos como Arabia Saudí tienen sus propias leyes de protección de datos personales; confirme las obligaciones vigentes con el regulador correspondiente y con su equipo jurídico.

¿Qué aspecto tiene una arquitectura de referencia?

En texto, el flujo es: canales a la bandeja, bandeja al receptor, receptor a la cola, cola al worker, worker al CRM y flujos del CRM de vuelta a la API de la bandeja.

Componente Responsabilidad Decisión de diseño clave
Canales (WhatsApp, Instagram, correo, Telegram) Entregar los mensajes de clientes a la bandeja Sujetos a las reglas de cada plataforma
Bandeja de entrada omnicanal Conversaciones, asignación, agentes, eventos Emite webhooks; expone una API
Receptor de webhooks Verificar, deduplicar, encolar Sin estado, respuesta 2xx rápida
Almacén de eventos y cola Búfer duradero, reproducción ID de evento único, cola dead-letter
Worker de sincronización Cruce de contactos, upserts en el CRM Escrituras idempotentes, backoff
CRM Contactos, oportunidades, casos, flujos Llama a la API de la bandeja con claves de idempotencia
Tarea de conciliación Detectar y reparar huecos Se ejecuta de forma programada
Monitorización Retraso, fallos, dead letters Alertas a un responsable

Ejemplo práctico: un grupo de clínicas en Yeda

«Wahat Clinics», un grupo sanitario ficticio de Arabia Saudí, usa un CRM para las citas de los pacientes y una bandeja de entrada para WhatsApp y correo.

  • Un paciente escribe por WhatsApp. La bandeja emite un evento de conversación creada; el receptor lo verifica, lo guarda y lo encola.
  • El worker normaliza el número a E.164, encuentra un único registro de paciente y registra una actividad con un enlace a la conversación, no con el texto del mensaje.
  • El CRM indica que el idioma preferido del paciente es el árabe y lo envía a la bandeja, que lo enruta a la cola en árabe.
  • Cuando la cita se reserva en el CRM, un flujo llama a la API de la bandeja para enviar una confirmación con una plantilla de utilidad aprobada, pasando el ID de la cita como clave de idempotencia para que un reintento no pueda enviar dos confirmaciones.
  • El evento «mensaje entregado» de la bandeja actualiza el registro de la cita.

¿Cuáles son los errores más comunes?

  • Escribir en el CRM dentro de la solicitud del webhook, lo que causa tiempos de espera, reintentos y duplicados.
  • No deduplicar, con lo que se crean actividades y contactos duplicados.
  • Cruzar teléfonos sin normalizar, de modo que los formatos +971 y con 0 nunca coinciden.
  • Fusionar automáticamente por nombre o por coincidencias parciales.
  • Copiar todo el contenido de los mensajes al CRM sin finalidad ni regla de conservación.
  • No conciliar, de forma que un evento perdido se convierte en una desviación permanente.
  • Secretos en el código fuente y sin plan de rotación.

Cómo ayuda OmniChannels.ai

OmniChannels.ai, con la tecnología de BroadNet Technologies, reúne las conversaciones de WhatsApp, Instagram, Messenger, Telegram y correo en una única Omni Inbox con asignación de agentes y etiquetado, además de el alta en WhatsApp mediante el registro integrado de Meta (Embedded Signup) y plantillas aprobadas con variables, multimedia y botones. Para la integración con el CRM, la API REST está documentada públicamente con una especificación OpenAPI 3.1, y los webhooks notifican los estados de entrega (SENT, DELIVERED, READ, FAILED y otros) en un único formato normalizado. Los informes de entrega (DLR), con filtros y exportación a CSV, facilitan la conciliación. Empiece por la página de desarrolladores.

Preguntas frecuentes

¿Qué diferencia hay entre un webhook y una API en la integración con un CRM?

Un webhook es una solicitud HTTP que la bandeja envía a su endpoint cuando ocurre algo, como un mensaje nuevo o una conversación resuelta. Una API es algo que su sistema invoca para leer datos o ejecutar acciones, como enviar una respuesta o reasignar una conversación. Los webhooks mantienen el CRM actualizado sin sondeo; las API permiten que los flujos del CRM actúen sobre la bandeja.

¿Qué significa idempotencia en los webhooks?

Idempotencia significa que procesar dos veces el mismo evento tiene el mismo efecto que procesarlo una. Como los emisores de webhooks reintentan cuando no reciben una respuesta de éxito a tiempo, su endpoint puede recibir duplicados. Guarde el ID único de cada evento, omita los ya procesados y diseñe las escrituras en el CRM como upserts, de modo que un evento repetido no cree un segundo contacto ni una segunda actividad.

¿Cómo se cruza un número de WhatsApp con un contacto del CRM?

Normalice ambos lados al formato internacional E.164, con prefijo de país, sin espacios ni ceros iniciales, y busque en el CRM por ese valor. Si coincide exactamente un contacto, vincúlelo. Si no coincide ninguno, cree un lead o un contacto sin cruzar. Si coinciden varios, no adivine: marque la conversación para que un agente elija y registre la decisión para la próxima vez.

¿Deben guardarse las transcripciones completas de los chats en el CRM?

Solo si existe una finalidad clara y una base legal. Muchos equipos guardan en el CRM un enlace a la conversación, un resumen, el resultado y las marcas de tiempo, mientras que la transcripción completa permanece en la bandeja con sus propios controles de acceso y plazo de conservación. Así se reduce la duplicación de datos personales y se facilita atender solicitudes de supresión conforme a normas como el RGPD.

¿Cómo se debe proteger un endpoint de webhooks?

Sirva el endpoint solo por HTTPS, verifique la firma o el secreto compartido que el emisor incluye en cada solicitud, rechace solicitudes con marcas de tiempo antiguas para limitar los ataques de repetición y guarde los secretos en un gestor de secretos, no en el código. Limite lo que puede hacer: solo debe encolar eventos, no exponer datos del CRM ni aceptar comandos arbitrarios.

Fuentes

  1. Webhooks — WhatsApp Cloud API, Meta for Developers
  2. El campo de cabecera HTTP Idempotency-Key — borrador del grupo de trabajo IETF HTTPAPI
  3. RFC 2104: HMAC — hash con clave para la autenticación de mensajes
  4. Reglamento (UE) 2016/679 (RGPD) — EUR-Lex
  5. Leyes de protección de datos — portal del Gobierno de los EAU (u.ae)