Passerelle CRM

Dès qu’une session reçoit un nom, l’enregistrement est ajouté sous forme de note à la fiche de cette personne dans votre CRM : au contact existant, sans en créer un nouveau.

1. Le fonctionnement en une phrase

Dès qu’une session est identifiée, nous recherchons la personne dans votre CRM à partir de l’identifiant que vous nous avez envoyé et lui ajoutons une note contenant un lien vers l’enregistrement.

C’est tout. Aucun nouveau contact, aucune nouvelle affaire, aucune modification du pipeline. Un CRM qui crée un doublon chaque fois que quelqu’un visite votre page de tarifs est pire qu’une absence d’intégration.

Si nous ne trouvons pas la personne, rien ne se passe. La créer reviendrait à ajouter une fiche à votre CRM à partir d’une session de navigateur, alors qu’une telle session ne permet pas d’établir de manière fiable qui sont vos clients.

2. La clé de correspondance : comment nous trouvons la personne

Cette partie mérite dix minutes d’attention, car c’est là qu’une intégration CRM se met généralement à échouer sans bruit.

Nous connaissons le visiteur par l’information fournie par votre site : MousePlayer.setUserId(), un identifiant distinct récupéré dans votre outil d’analyse ou un appel d’identification côté serveur. Votre CRM le connaît lui aussi par une information. Ces deux informations doivent être identiques.

Critère de rechercheModifiable
HubSpotl’adresse e-mail du contactnon : le point de terminaison de recherche repose sur elle
Pipedriveles personnes par terme, d’abord par e-mailnon
Salesforceun champ que vous indiquez, par défaut Emailoui

Pourquoi Salesforce vous demande le champ

Les installations Salesforce utilisent rarement l’e-mail comme clé. La vôtre utilise peut-être Customer_Number__c, ou un identifiant externe issu de votre système de facturation. En recherchant malgré tout par e-mail, nous ne trouverions rien tout en signalant une réussite : le pire des échecs, car l’intégration semble fonctionner.

Le formulaire pose donc la question : quel champ de Contact contient la valeur que nous vous envoyons ? Saisissez le nom API, y compris le suffixe __c s’il s’agit d’un champ personnalisé.

Le nom du champ est vérifié selon un format strict avant d’atteindre une requête. Un nom de champ CRM contient des lettres, des chiffres et des traits de soulignement : tout autre caractère est refusé plutôt qu’échappé, car une erreur subtile d’échappement est possible, tandis qu’un refus ne présente pas cette ambiguïté.

3. Quand l’envoi se déclenche, et quand il ne se déclenche volontairement pas

Lors de l’identification : lorsque votre site appelle MousePlayer.setUserId(), lorsque notre passerelle analytique récupère un identifiant distinct depuis PostHog, Mixpanel ou Amplitude, ou lorsque votre serveur appelle le point de terminaison d’identification.

Une fois par session, pas une fois par page

Une personne qui se connecte puis parcourt onze pages produit une note, pas onze. La chronologie de votre CRM doit rester lisible.

Pas sans identifiant

Une session anonyme n’offre aucun critère de correspondance. Nous ne devinons pas l’identité à partir de l’adresse IP et n’associons pas l’enregistrement à une personne qui partage simplement cette adresse.

Pas si la personne est inconnue de votre CRM

Le traitement est considéré comme terminé, pas comme échoué : un prospect qui n’est pas encore dans votre CRM est un cas normal, et une nouvelle tentative le lendemain n’y changerait rien.

4. La note et le stockage du jeton

Une note dans la chronologie du contact : une ligne indiquant qu’une session a été enregistrée, et le lien. Votre commercial clique dessus et regarde ce que la personne a réellement fait avant de vous écrire.

Les données d’authentification

Stockées sous forme chiffrée avec AES-256-GCM. Elles ne sont plus affichées après l’enregistrement : le champ montre des astérisques, et enregistrer le formulaire avec ces astérisques ne modifie pas la valeur stockée. Elles sont aussi volontairement exclues de la file interne qui transporte la tâche : une file est un état partagé, et un état partagé n’est pas un endroit approprié pour une clé.

Salesforce exige trois éléments, les autres deux

Salesforce s’authentifie via une application connectée avec un jeton d’actualisation : vous devez fournir la clé consommateur, le secret et le jeton d’actualisation, ainsi que l’URL de votre instance. HubSpot et Pipedrive utilisent un seul jeton API. Dans les trois cas, l’application vous appartient : MousePlayer ne gère aucune application de place de marché à laquelle vous devriez faire confiance.

5. Zoho CRM et Freshsales

Deux autres CRM, avec des efforts de configuration très différents.

Zoho CRMFreshsales
À fournircentre de données, identifiant client, secret client, jeton d’actualisationclé API et votre domaine Freshworks
Critère de rechercheun champ que vous indiquez, par défaut Emailun champ que vous indiquez, par défaut email
Emplacement de la notesur le contact, comme enregistrement Notesur le contact, comme note

Zoho utilise six centres de données

Un compte se trouve dans com, eu, in, com.au, jp ou com.cn, sans que la clé permette de savoir lequel. Un mauvais choix fait répondre Zoho par INVALID_TOKEN — ce qui ressemble à une clé incorrecte et vous conduit à chercher au mauvais endroit. Le champ est une liste déroulante précisément pour cette raison.

Configurer le Self Client une seule fois

Créez un Self Client dans la console API Zoho, générez un jeton d’autorisation pour ZohoCRM.modules.ALL et ZohoSearch.securesearch.READ, puis échangez-le une fois contre un jeton d’actualisation. Ce dernier n’expire pas ; les jetons d’accès horaires sont obtenus à partir de lui et ne sont jamais stockés.

Zoho répond 200 même en cas de refus

L’échange de jetons comme l’écriture de fiches peuvent renvoyer HTTP 200 avec une erreur ou un statut par fiche dans le corps. Nous lisons ce corps : une passerelle qui se fierait au seul code de statut annoncerait la réussite d’une note qui n’a jamais été créée.

Toutes les marques citées appartiennent à leurs propriétaires respectifs. MousePlayer n’entretient aucune relation commerciale avec ces fournisseurs.