Connecter un CRM à une boîte omnicanale avec des webhooks
Connectez un CRM à une boîte omnicanale via webhooks : événements à synchroniser, idempotence, relances, rapprochement des contacts, RGPD et architecture.
Par OmniChannels.ai Editorial Team · Relu par BroadNet Messaging Solutions Team
Intégration
Réponse courte
Pour connecter un CRM à une boîte de réception omnicanale, abonnez-vous aux webhooks de conversation et de message, réceptionnez-les sur un petit point d'entrée qui vérifie la signature et enregistre chaque événement une seule fois grâce à son identifiant, puis traitez-les de façon asynchrone : rapprochez l'expéditeur d'un contact CRM par téléphone normalisé, e-mail ou identifiant social, et réécrivez les activités. Dans l'autre sens, utilisez l'API de la boîte pour envoyer des messages ou changer le propriétaire depuis les workflows du CRM.
Sur cette page
- Que doivent échanger un CRM et une boîte de réception omnicanale ?
- À quels événements de webhook faut-il s'abonner ?
- Comment construire un récepteur de webhooks fiable ?
- Comment rapprocher les contacts entre les canaux ?
- Comment gérer la protection des données dans une intégration CRM ?
- À quoi ressemble une architecture de référence ?
- Exemple concret : un groupe de cliniques à Djeddah
- Quelles sont les erreurs courantes ?
- Comment OmniChannels.ai vous aide
Points clés
- Les webhooks poussent les événements de la boîte vers le CRM en quasi temps réel ; les API récupèrent des données ou déclenchent des actions dans l'autre sens. Une intégration robuste utilise les deux.
- La livraison des webhooks est généralement « au moins une fois » : le récepteur doit dédoublonner par identifiant d'événement et tolérer des événements qui arrivent dans le désordre.
- Accusez réception rapidement et traitez le travail CRM dans une file d'attente en arrière-plan, afin que des appels CRM lents ne déclenchent ni relances ni doublons.
- Rapprochez les contacts sur des identifiants normalisés, comme les numéros au format E.164 et les e-mails en minuscules, et ne fusionnez jamais des fiches sur le seul nom.
- N'envoyez que les données dont le CRM a besoin, gardez le contenu des messages hors du CRM lorsqu'un résumé suffit et respectez la loi applicable en matière de vie privée, comme le RGPD ou les lois de protection des données des Émirats et de l'Arabie saoudite.
Ce guide s'adresse aux CTO, architectes de solutions et administrateurs CRM qui veulent que leur CRM et leur boîte de réception omnicanale partagent une vue unique du client. Il explique quels événements synchroniser, comment construire un récepteur de webhooks qui résiste aux relances et aux doublons, comment rapprocher les contacts entre WhatsApp, Instagram et l'e-mail, et quelles règles de vie privée structurent l'architecture.
Que doivent échanger un CRM et une boîte de réception omnicanale ?
La boîte doit indiquer au CRM qui vous a contacté, sur quel canal, à quel sujet et avec quelle issue. Le CRM doit indiquer à la boîte qui est le client, qui en est responsable et quel contexte les agents doivent connaître.
| Sens | Données | Usage typique |
|---|---|---|
| Boîte vers CRM | Nouvelle conversation, canal, identifiants du contact | Créer ou mettre à jour le contact, journaliser l'activité |
| Boîte vers CRM | Changements d'affectation et de statut, résolution | Mettre à jour la chronologie du dossier ou de l'affaire, mesurer le temps de traitement |
| Boîte vers CRM | Statut de livraison des modèles sortants | Suivre les résultats des campagnes ou notifications |
| CRM vers boîte | Nom du contact, langue, responsable de compte, segment | Routage et personnalisation |
| CRM vers boîte | Déclencheur d'envoi d'un modèle approuvé | Mises à jour de commande, de rendez-vous ou de dossier |
| CRM vers boîte | Changement de propriétaire | Orienter les clients récurrents vers leur gestionnaire de compte |
Commencez par le plus petit ensemble qui soutient un vrai workflow. Synchroniser le corps de chaque message dans le CRM est rarement nécessaire et accroît l'exposition en matière de vie privée.
À quels événements de webhook faut-il s'abonner ?
Abonnez-vous aux événements du cycle de vie, pas seulement aux messages. Les noms exacts diffèrent selon les plateformes ; rattachez-les à ces catégories :
- Conversation créée : premier message d'un client sur n'importe quel canal.
- Message reçu : message entrant du client, avec le canal et l'identifiant de l'expéditeur.
- Message envoyé : message sortant d'un agent ou modèle.
- Statut du message : envoyé, remis, lu ou en échec, lorsque le canal le remonte.
- Conversation affectée : changement de propriétaire ou de file.
- Conversation résolue ou rouverte : transitions de statut.
- Contact mis à jour : identifiants ou attributs modifiés dans la boîte.
Pour WhatsApp, les webhooks de Meta remettent à la plateforme les messages entrants et les mises à jour de statut des messages sortants ; votre fournisseur de boîte expose ensuite ses propres événements à vos systèmes.
Comment construire un récepteur de webhooks fiable ?
Accepter vite, vérifier, stocker une fois, traiter plus tard. La plupart des problèmes de livraison viennent du travail CRM effectué à l'intérieur de la requête du webhook.
Conception du récepteur, étape par étape
- Exposez un point d'entrée HTTPS par environnement, par exemple
/webhooks/inbox. - Vérifiez l'authenticité. Contrôlez la signature (généralement un HMAC du corps brut avec un secret partagé, tel que défini par la RFC 2104) ou le jeton documenté par l'émetteur. Calculez-la sur les octets bruts avant d'analyser le JSON.
- Contrôlez la fraîcheur. Si un horodatage est fourni, rejetez les événements hors d'une courte tolérance pour limiter les rejeux.
- Dédoublonnez. Insérez l'identifiant de l'événement dans une table avec contrainte d'unicité. Si l'insertion échoue parce que l'identifiant existe, renvoyez un succès et arrêtez-vous.
- Mettez en file. Placez l'événement dans une file et renvoyez immédiatement une réponse 2xx.
- Traitez de façon asynchrone. Un worker lit la file, rapproche le contact et écrit dans le CRM par upserts.
- Réessayez avec backoff. Si le CRM est indisponible, relancez depuis votre file avec un backoff exponentiel ; ne comptez pas sur les relances de l'émetteur.
- Dead-letter. Après plusieurs échecs, déplacez l'événement vers une file de rebut (dead-letter) et alertez une personne.
- Réconciliez. Lancez une tâche périodique qui compare les conversations récentes de la boîte aux fiches du CRM et comble les écarts via l'API de la boîte.
Pourquoi l'idempotence et l'ordre comptent
Les émetteurs de webhooks réessaient généralement lorsqu'ils ne reçoivent pas de réponse de succès dans les temps, ce qui rend la livraison « au moins une fois ». Un même événement peut arriver deux fois, et un événement « résolu » peut précéder le dernier « message reçu ». Pour y faire face :
- Utilisez l'identifiant d'événement comme clé de dédoublonnage.
- Utilisez des upserts indexés sur l'identifiant de conversation ou de message dans le CRM.
- Comparez les horodatages ou numéros de séquence des événements et ignorez les états plus anciens.
Lorsque votre workflow CRM appelle l'API de la boîte pour envoyer un message, transmettez une clé d'idempotence si l'API le permet ; le brouillon de l'IETF pour un en-tête HTTP Idempotency-Key décrit le schéma courant.
Comment rapprocher les contacts entre les canaux ?
Rapprochez sur des identifiants normalisés, privilégiez les correspondances déterministes et confiez l'ambiguïté à une personne.
| Identifiant | Normaliser en | Fiabilité du rapprochement | Remarques |
|---|---|---|---|
| Numéro WhatsApp ou SMS | E.164, par exemple +9715XXXXXXXX | Élevée | Attention aux formats locaux avec zéro initial |
| Adresse e-mail | Minuscules, sans espaces superflus | Élevée | Des alias peuvent désigner la même personne ; ne le présumez pas |
| Compte Instagram | Identifiant utilisateur propre à la plateforme | Élevée au sein de ce compte | Les pseudos peuvent changer ; stockez l'identifiant, pas seulement le pseudo |
| Utilisateur Telegram | Identifiant utilisateur de la plateforme | Élevée au sein de ce bot ou compte | Le téléphone peut ne pas être partagé |
| Nom | Jamais seul | Faible | Ne fusionnez jamais sur le nom |
Règles de décision :
- Une correspondance exacte : liez.
- Aucune correspondance : créez un lead ou un « contact non rapproché » avec le canal source.
- Plusieurs correspondances : signalez à un agent, ne fusionnez pas automatiquement.
- Le client confirme un autre identifiant en conversation : liez-le en notant la preuve.
Comment gérer la protection des données dans une intégration CRM ?
Ne déplacez que ce dont chaque système a besoin, documentez pourquoi et faites en sorte que la suppression fonctionne dans les deux systèmes.
- Minimisation des données. Stockez dans le CRM les liens de conversation, les issues et les résumés ; gardez les transcriptions complètes dans la boîte sauf finalité définie.
- Base légale et consentement. Enregistrez le consentement (opt-in) marketing par canal ; une conversation de support ne vaut pas consentement pour des modèles marketing.
- Conservation. Alignez les durées de conservation de la boîte, du CRM, des files et des journaux ; les journaux de charges utiles de webhooks sont souvent oubliés.
- Contrôle d'accès. Limitez qui peut voir le contenu des messages et les pièces jointes dans le CRM.
- Demandes de suppression et d'accès. Faites en sorte qu'une demande dans un système se propage à l'autre.
- Transferts transfrontaliers. Vérifiez où chaque système stocke les données. Le RGPD s'applique aux données personnelles des personnes dans l'UE, et les Émirats arabes unis comme l'Arabie saoudite ont leurs propres lois de protection des données personnelles ; confirmez les obligations en vigueur auprès du régulateur concerné et de votre service juridique.
À quoi ressemble une architecture de référence ?
En texte, le flux est : canaux vers la boîte, boîte vers le récepteur, récepteur vers la file, file vers le worker, worker vers le CRM, puis workflows du CRM vers l'API de la boîte.
| Composant | Responsabilité | Choix de conception clé |
|---|---|---|
| Canaux (WhatsApp, Instagram, e-mail, Telegram) | Acheminer les messages clients vers la boîte | Régis par les règles de chaque plateforme |
| Boîte de réception omnicanale | Conversations, affectation, agents, événements | Émet des webhooks ; expose une API |
| Récepteur de webhooks | Vérifier, dédoublonner, mettre en file | Sans état, réponse 2xx rapide |
| Magasin d'événements et file | Tampon durable, rejeu | Identifiant d'événement unique, file dead-letter |
| Worker de synchronisation | Rapprochement des contacts, upserts CRM | Écritures idempotentes, backoff |
| CRM | Contacts, affaires, dossiers, workflows | Appelle l'API de la boîte avec des clés d'idempotence |
| Tâche de réconciliation | Détecter et réparer les écarts | Exécutée selon un calendrier |
| Supervision | Latence, échecs, dead letters | Alertes vers un responsable |
Exemple concret : un groupe de cliniques à Djeddah
« Wahat Clinics », groupe de santé fictif en Arabie saoudite, utilise un CRM pour les rendez-vous des patients et une boîte de réception pour WhatsApp et l'e-mail.
- Un patient écrit sur WhatsApp. La boîte émet un événement de conversation créée ; le récepteur le vérifie, le stocke et le met en file.
- Le worker normalise le numéro au format E.164, trouve une seule fiche patient et journalise une activité avec un lien vers la conversation, et non le texte du message.
- Le CRM indique l'arabe comme langue préférée du patient et la transmet à la boîte, qui route vers la file arabophone.
- Lorsque le rendez-vous est pris dans le CRM, un workflow appelle l'API de la boîte pour envoyer une confirmation via un modèle utilitaire approuvé, en passant l'identifiant du rendez-vous comme clé d'idempotence afin qu'une relance ne puisse pas envoyer deux confirmations.
- L'événement « message remis » de la boîte met à jour la fiche du rendez-vous.
Quelles sont les erreurs courantes ?
- Écrire dans le CRM pendant la requête du webhook, ce qui provoque expirations, relances et doublons.
- Aucun dédoublonnage, d'où des activités et des contacts en double.
- Rapprocher des numéros non normalisés, si bien que les formats +971 et 0 ne se rencontrent jamais.
- Fusionner automatiquement sur le nom ou des correspondances partielles.
- Copier tout le contenu des messages dans le CRM sans finalité ni règle de conservation.
- Aucune réconciliation, de sorte qu'un événement manqué devient une dérive permanente.
- Des secrets dans le code source, sans plan de rotation.
Comment OmniChannels.ai vous aide
OmniChannels.ai, propulsé par BroadNet Technologies, réunit les conversations WhatsApp, Instagram, Messenger, Telegram et e-mail dans une seule Omni Inbox, avec attribution aux agents et étiquetage, ainsi que l'onboarding WhatsApp via Meta Embedded Signup et des modèles approuvés avec variables, médias et boutons. Pour l'intégration CRM, l'API REST est documentée publiquement avec une spécification OpenAPI 3.1, et les webhooks remontent les statuts de livraison (SENT, DELIVERED, READ, FAILED, etc.) dans un format normalisé unique. Les rapports de livraison, avec filtres et export CSV, facilitent la réconciliation. Commencez par la page développeurs.
Questions fréquentes
Quelle différence entre un webhook et une API pour l'intégration d'un CRM ?
Un webhook est une requête HTTP que la boîte de réception envoie à votre point d'entrée lorsqu'un événement survient, comme un nouveau message ou une conversation résolue. Une API est appelée par votre système pour lire des données ou agir, par exemple envoyer une réponse ou réaffecter une conversation. Les webhooks maintiennent le CRM à jour sans interrogation périodique ; les API permettent aux workflows du CRM d'agir sur la boîte.
Que signifie l'idempotence pour les webhooks ?
L'idempotence signifie que traiter deux fois le même événement a le même effet que le traiter une fois. Comme les émetteurs de webhooks réessaient lorsqu'ils ne reçoivent pas de réponse de succès dans les temps, votre point d'entrée peut recevoir des doublons. Stockez l'identifiant unique de chaque événement, ignorez ceux déjà traités et concevez les écritures CRM comme des upserts, afin qu'un événement répété ne crée ni second contact ni seconde activité.
Comment rapprocher un numéro WhatsApp d'un contact CRM ?
Normalisez les deux côtés au format international E.164, avec indicatif pays, sans espaces ni zéro initial, puis recherchez cette valeur dans le CRM. Si un seul contact correspond, liez-le. S'il n'y en a aucun, créez un lead ou un contact non rapproché. S'il y en a plusieurs, ne devinez pas : signalez la conversation à un agent pour qu'il tranche, et consignez sa décision pour la suite.
Faut-il stocker les transcriptions complètes des chats dans le CRM ?
Seulement si vous avez une finalité claire et une base légale. Beaucoup d'équipes conservent dans le CRM un lien vers la conversation, un résumé, l'issue et les horodatages, tandis que la transcription complète reste dans la boîte avec ses propres contrôles d'accès et sa durée de conservation. Cela limite la duplication de données personnelles et facilite le traitement des demandes de suppression, par exemple au titre du RGPD.
Comment sécuriser les points d'entrée de webhooks ?
Exposez le point d'entrée uniquement en HTTPS, vérifiez la signature ou le secret partagé inclus par l'émetteur dans chaque requête, rejetez les requêtes dont l'horodatage est ancien pour limiter le rejeu et conservez les secrets dans un gestionnaire de secrets plutôt que dans le code. Restreignez ses capacités : il doit seulement mettre les événements en file, sans exposer de données CRM ni accepter de commandes arbitraires.
Sources
- Webhooks — WhatsApp Cloud API, Meta for Developers
- L'en-tête HTTP Idempotency-Key — brouillon du groupe de travail IETF HTTPAPI
- RFC 2104 : HMAC — hachage à clé pour l'authentification des messages
- Règlement (UE) 2016/679 (RGPD) — EUR-Lex
- Lois sur la protection des données — portail du gouvernement des Émirats (u.ae)
À lire aussi
Autres guidesIntégration
Choisir une API de messagerie : la checklist du CTO
Choisir une API de messagerie : checklist CTO sur les canaux, la qualité des routes, les webhooks, la sécurité, les limites, SMPP, MCP, la conformité et les prix.
13 min de lecture
Intégration
Intégration d'API de messagerie : REST, SMPP et webhooks
Intégration d'API de messagerie pour développeurs : REST, SMPP, webhooks, authentification, idempotence, accusés de réception, nouvelles tentatives et tests.
9 min de lecture
Service client
Support client par DM Instagram : l'organiser à grande échelle
Comment utiliser Instagram Direct pour le support client et la vente sociale à grande échelle : accès API, fenêtre de 24 heures, workflow d'équipe, modération.
8 min de lecture
