Techsy
Contact
Commencer
Retour au Blog
ai-machine-learning

Connecter un agent vocal IA à votre CRM : HubSpot, Salesforce & Pipedrive (avec le code webhook)

Écrit par Mert Batur Gürbüz
Jun 10, 2026
19 lecture
Table des matières
Connecter un agent vocal IA à votre CRM : HubSpot, Salesforce & Pipedrive (avec le code webhook)

Connecter un agent vocal IA à votre CRM : HubSpot, Salesforce & Pipedrive (avec le code webhook)

Sur un build Vapi livré plus tôt cette année, notre chemin agent vocal → API de lookup interne → lecture contact HubSpot affichait 410 ms en p50 et 1 240 ms en p95. Ce chiffre est la raison d'être de cet article. L'intégration d'un agent vocal CRM tient ou échoue à une horloge que contrôle l'appelant. Câblez-la comme une sync Zapier et l'agent se tait au milieu d'une phrase pendant qu'un webhook avance à la vitesse d'un escargot. La solution n'est pas d'ajouter des appels API. Ce sont deux patterns, un timeout et une phrase de fallback. Les voici tous les trois, avec du code que vous pouvez déployer.

La plupart des guides sur ce sujet enseignent le concept puis vous vendent leur produit. Personne ne livre le handler. Nous faisons le contraire.

Points clés à retenir

  • Un agent vocal se connecte à un CRM de deux façons : function calling pour les lectures en direct pendant l'appel, webhooks pour les écritures post-appel.
  • Les lectures pendant un appel ont besoin d'un budget de 5 secondes et d'une phrase de fallback parlée pour que l'appelant n'entende jamais de silence.
  • Mappez les données d'appel vers les champs CRM avec une clé d'idempotence pour éviter les doublons sur les webhooks rejoués.
  • Pipedrive n'a aucun webhook pour les changements de champs personnalisés : vous devez interroger dealFields par polling planifié.

Ce que signifie réellement "intégration agent vocal CRM" (2 méthodes, pas une)

L'intégration agent vocal CRM connecte un agent vocal à votre CRM de deux façons bien distinctes : le function calling pour lire des données en direct pendant que l'appelant est en ligne, et les webhooks pour écrire le résultat de l'appel après que la personne a raccroché. La lecture en direct personnalise la conversation ; l'écriture post-appel enregistre ce qui s'est passé. Ces deux mécanismes fonctionnent sur des horloges différentes et échouent de manière différente.

Le modèle mental en une phrase : le function calling, c'est l'agent vocal qui pose une question à votre CRM au milieu d'une phrase ; le webhook, c'est l'agent qui dépose son rapport après avoir raccroché.

Function calling : lire les données en direct

Le function calling est la façon dont un LLM interrompt la génération de texte, appelle un outil externe que vous avez défini, et réintègre le résultat dans ce qu'il dit ensuite. Pour un agent vocal, cet outil est "chercher cet appelant dans le CRM". Le modèle décide qu'il a besoin des données, votre serveur les récupère, et l'agent accueille l'appelant par son nom avec son niveau d'abonnement. Si vous voulez comprendre les mécanismes en profondeur, notre guide function calling détaille le schéma de définition des outils. Le hic : tout se passe en direct, donc vous courez contre la patience de l'appelant.

Webhooks : écrire les données après

Un webhook est une requête POST que votre serveur reçoit quand quelque chose se termine. Pour les agents vocaux, l'événement clé est la fin d'appel : la plateforme vous envoie la transcription, le résumé, la disposition et l'URL d'enregistrement dès que l'appel se termine. Vous prenez ce payload et vous l'écrivez dans le CRM sous forme d'une Activity, puis vous faites avancer le deal stage. Ici, aucune contrainte de temps. L'appelant est parti. Vous pouvez retry, mettre en file d'attente, réconcilier.

La plupart des intégrations en production utilisent les deux. Lecture en direct, écriture après.

L'architecture : ce qui se passe sur un appel entrant, de bout en bout

Une intégration agent vocal CRM suit un cycle de vie en cinq étapes fixes sur chaque appel entrant. L'appel arrive, l'agent lit la fiche de l'appelant en direct via un function call, la conversation se déroule, un webhook de fin d'appel se déclenche, et votre handler écrit le résultat dans le CRM et notifie un humain si nécessaire. Chaque exemple de code dans cet article s'accroche à l'une de ces cinq étapes.

Le déroulement, étape par étape :

  1. L'appel entrant arrive. La plateforme (Vapi, Retell, ou votre propre stack d'agent vocal) répond et identifie l'appelant par son numéro de téléphone.
  2. Lookup en direct (function call). L'agent appelle votre outil de lookup, qui interroge le CRM et retourne le contact, le deal stage et le contexte récent.
  3. Conversation. L'agent parle, en appelant éventuellement d'autres outils (vérifier des créneaux de rendez-vous, récupérer une commande).
  4. Webhook de fin d'appel. L'appel se termine, la plateforme envoie un rapport de fin d'appel en POST à votre serveur.
  5. Écriture CRM + handoff. Votre handler enregistre l'Activity, définit la disposition, fait avancer le deal, et crée une tâche pour le commercial humain avec le contexte complet.

Le diagramme en en-tête correspond exactement à ce schéma : une flèche entrante, une bifurcation en "lecture en direct" et "écriture post-appel", trois cartes de destination CRM et un nœud de handoff. Gardez cette image en tête. Tout ce qui suit ne fait que remplir les cases.

Lire les données CRM pendant l'appel (et pourquoi vous avez un budget de 5 secondes)

Oui, un agent vocal peut récupérer des données CRM pendant un appel. Il utilise un function call qui touche votre endpoint de lookup et retourne un résultat avant la prochaine phrase de l'agent. La contrainte, c'est le temps. D'après la documentation des server events de Vapi, les function tool calls sont soumis à un timeout, et sur un appel en direct votre plafond réel c'est la patience de l'appelant, pas celle de l'API. Budgétez cinq secondes et prévoyez un fallback.

Voilà ce que personne dans les résultats de recherche ne mesure. Sur notre chemin Vapi → API de lookup interne → lecture contact HubSpot, nous avons enregistré 410 ms en p50 et 1 240 ms en p95 aller-retour sur quelques milliers d'appels. La plupart des lectures sont rapides. Mais la queue p95 (backoff de rate-limit HubSpot, lambda froide, fetch d'association lent) c'est là que les appels deviennent silencieux. C'est cette queue qui nous a amenés à régler le timeout de l'outil function call à 5 secondes : confortablement au-dessus du p95, confortablement en dessous du seuil où un humain dit "allô ? vous êtes là ?"

Et voici la règle qui compte : si votre lookup CRM dure plus longtemps que la patience de l'appelant, l'agent doit dire quelque chose. Ne restez jamais silencieux. Le silence est le moyen le plus rapide de perdre un appel. Sur nos builds, l'agent prononce une phrase de fallback dès que l'outil expire : "Laissez-moi vérifier ça, une seconde." L'appelant entend une pause qui sonne humain, pas un bot en panne.

Voici la définition d'outil function call que nous déployons pour un lookup CRM en direct :

json
{
  "type": "function",
  "function": {
    "name": "lookup_crm_contact",
    "description": "Look up the caller in the CRM by phone number before greeting them. Returns name, plan, and open deal stage.",
    "parameters": {
      "type": "object",
      "properties": {
        "phone": {
          "type": "string",
          "description": "Caller phone number in E.164 format"
        }
      },
      "required": ["phone"]
    }
  },
  "server": {
    "url": "https://api.yourdomain.com/voice/crm-lookup",
    "timeoutSeconds": 5
  }
}

Deux éléments rendent cela sûr pour un usage vocal. Le plafond timeoutSeconds: 5 empêche l'agent d'attendre indéfiniment. Et server.url pointe vers votre endpoint, pas directement vers le CRM, ce qui vous donne le contrôle sur le cache, les retries et la forme de ce qui revient. D'expérience, placer une API interne entre l'agent et le CRM est la meilleure décision que vous puissiez prendre ; c'est là que vivent la logique de fallback et le mapping des champs.

Écrire après l'appel : enregistrer l'Activity, le résumé et la disposition

Pour enregistrer un appel d'agent vocal IA dans un CRM, vous recevez le webhook de fin d'appel de la plateforme, vous en extrayez la transcription, le résumé et la disposition, puis vous POSTez une Activity d'appel dans le CRM et vous définissez le statut du lead. Il n'y a aucune contrainte de latence ici (l'appelant est parti), donc c'est là que vous effectuez les écritures lourdes, les retries et les déplacements de deal stage que vous ne risqueriez jamais en cours d'appel.

Le payload de fin d'appel (Vapi l'appelle l'événement end-of-call-report, d'après leur documentation server events) contient la transcription, un résumé généré, l'issue de l'appel, l'URL d'enregistrement et la durée. Votre mission est de mapper tout ça en une Activity CRM et de faire avancer la fiche.

Voici un handler Node/TypeScript prêt à l'emploi qui reçoit le rapport et écrit un engagement d'appel HubSpot, puis fait avancer le deal stage. L'endpoint POST /crm/v3/objects/calls et le pattern d'association au contact viennent directement du guide d'API calls de HubSpot :

typescript
import express from "express";

const app = express();
app.use(express.json());

const HUBSPOT_TOKEN = process.env.HUBSPOT_TOKEN!;
const seen = new Set<string>(); // swap for Redis/DB in production

app.post("/voice/end-of-call", async (req, res) => {
  const report = req.body.message; // Vapi end-of-call-report
  if (report?.type !== "end-of-call-report") return res.sendStatus(200);

  const key = report.call.id; // idempotency key (see field-mapping section)
  if (seen.has(key)) return res.sendStatus(200);
  seen.add(key);

  const { contactId, dealId } = report.call.metadata; // set when call started

  // 1. Write the call Activity (engagement)
  await fetch("https://api.hubapi.com/crm/v3/objects/calls", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${HUBSPOT_TOKEN}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      properties: {
        hs_call_title: "AI Voice Agent Call",
        hs_call_body: report.summary,
        hs_call_duration: String(report.durationMs ?? 0),
        hs_call_recording_url: report.recordingUrl ?? "",
        hs_call_status: "COMPLETED",
        hs_timestamp: Date.now(),
      },
      associations: [
        {
          to: { id: contactId },
          types: [{ associationCategory: "HUBSPOT_DEFINED", associationTypeId: 194 }],
        },
      ],
    }),
  });

  // 2. Move the deal stage based on disposition
  if (dealId && report.analysis?.disposition === "qualified") {
    await fetch(`https://api.hubapi.com/crm/v3/objects/deals/${dealId}`, {
      method: "PATCH",
      headers: {
        Authorization: `Bearer ${HUBSPOT_TOKEN}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({ properties: { dealstage: "qualifiedtobuy" } }),
    });
  }

  res.sendStatus(200);
});

app.listen(3000);

C'est la valeur promise par le titre : un handler déployable, pas la description d'un. Vous préférez ne pas coder et héberger ça vous-même ? Une alternative no-code comme n8n peut recevoir le même webhook et écrire dans le CRM avec des nœuds visuels, au prix d'un contrôle réduit sur les retries et la gestion des erreurs.

Mapper les données d'appel vers les champs CRM (sans créer de doublons)

Le mapping de champs connecte chaque donnée d'appel à un objet et un champ CRM précis : l'intention de l'appelant vers une propriété de deal, la disposition vers le statut du lead, le résumé vers le corps de l'Activity. Deux pièges classiques se présentent ici : formater les données pour la synthèse vocale avant que l'agent les lise à voix haute, et utiliser une clé d'idempotence pour qu'un webhook rejoué ne crée pas un deuxième enregistrement pour le même appel.

Sur nos builds, nous conservons le mapping dans un objet de config unique pour que les non-développeurs puissent le modifier sans toucher au handler. Voici la forme d'un vrai :

Donnée d'appelObjet CRM.champTypeExemple
intention de l'appelantdeal.intent_summarystring"Veut une démo du plan Pro"
dispositioncontact.lead_statusenum"qualified"
résumé d'appelcall.hs_call_bodystring"Discuté tarifs, démo réservée"
URL d'enregistrementcall.hs_call_recording_urlurl"https://..."
durée (ms)call.hs_call_durationnumber184000
flag qualifiédeal.dealstageenum"qualifiedtobuy"

Premier piège : le formatage pour la synthèse vocale. Un agent vocal qui lit du JSON brut à un appelant sonne cassé. Formatez les données CRM en phrases avant qu'elles arrivent au TTS. Ne retournez pas {"plan":"pro","renewed":"2026-03"} au modèle. Retournez "ils sont sur le plan Pro, renouvelé en mars dernier" pour que l'agent le dise naturellement.

Deuxième piège : l'idempotence. Les plateformes vocales rejouent les webhooks. Si votre handler n'est pas idempotent, le même appel est enregistré deux fois et vous obtenez des doublons. Utilisez l'ID d'appel comme clé :

typescript
const key = report.call.id;
if (await store.has(key)) return res.sendStatus(200); // already processed
await store.add(key);
// ...do the CRM write

En production, ce store est Redis ou une ligne de base de données avec une contrainte unique sur l'ID d'appel, pas un Set en mémoire. Le Set ci-dessus fonctionne pour une démo ; il perd sa mémoire à chaque redémarrage du serveur.

Avant les sections par CRM, voici comment les trois plateformes diffèrent sur ce qui compte vraiment pour la voix :

HubSpotSalesforcePipedrive
Objet Activity/appelengagement / crm/v3/objects/callsTask / ActivityActivity
Objet dealDealOpportunityDeal
AuthOAuth / token d'application privéeOAuthToken API / OAuth
Écriture post-appelAPI engagementREST / CompositeActivities API
Webhook champs personnalisésouiouinon, polling dealFields

Intégration HubSpot (Vapi → HubSpot, étape par étape)

Pour une intégration Vapi → HubSpot, vous mappez la lecture en direct vers un lookup de Contact et l'écriture post-appel vers un engagement d'appel associé à ce Contact et à son Deal. Le modèle objet HubSpot est Contact, Deal, et engagement (l'Activity), et l'endpoint POST /crm/v3/objects/calls est votre cible d'écriture. C'est le pattern intégration vapi hubspot que la plupart des développeurs cherchent vraiment.

La lecture en direct est un function call vers votre endpoint de lookup, qui interroge GET /crm/v3/objects/contacts/search par numéro de téléphone et retourne le Contact et tout Deal ouvert. L'écriture post-appel est le handler de la section précédente : il crée un engagement d'appel et l'associe au Contact via le type d'association 194, puis PATCH le dealstage du Deal.

Le détail que les gens manquent : les associations HubSpot sont typées. Une association appel-contact utilise un associationTypeId spécifique, et l'appel n'apparaîtra pas sur la timeline du contact si vous le sautez. Le guide d'API calls de HubSpot liste les IDs. Pour l'auth, un token d'application privée est le chemin le plus rapide pour un seul workspace ; utilisez OAuth si vous déployez vers plusieurs comptes HubSpot.

Intégration Salesforce (objets, auth, lecture/écriture en temps réel)

Une intégration agent vocal Salesforce lit depuis Contact ou Lead pendant l'appel et écrit une Task (l'objet Activity) après. Le deal vit sur Opportunity. Le pattern est identique à HubSpot (lecture en direct par function call, écriture post-appel), mais les noms d'objets et le flux d'auth diffèrent. Vous appelez l'API REST ou l'API Composite pour l'écriture.

Pour la lecture en direct, votre endpoint de lookup interroge Salesforce avec une requête SOQL du type SELECT Id, Name, Account.Name FROM Contact WHERE Phone = '...' et retourne le résultat à l'agent. Pour l'écriture post-appel, vous créez une Task avec WhoId défini sur le Contact/Lead et WhatId défini sur l'Opportunity, d'après le guide API REST Salesforce :

typescript
await fetch(
  `${INSTANCE_URL}/services/data/v60.0/sobjects/Task`,
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${sfToken}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      Subject: "AI Voice Agent Call",
      Description: report.summary,
      Status: "Completed",
      WhoId: contactId,      // Contact or Lead
      WhatId: opportunityId, // Opportunity
      CallDurationInSeconds: Math.round((report.durationMs ?? 0) / 1000),
    }),
  }
);

Le piège spécifique à la voix : les tokens OAuth Salesforce expirent, et vous ne voulez pas qu'un renouvellement de token soit en compétition avec votre budget de lecture en direct de 5 secondes. Renouvelez les tokens en arrière-plan sur un planning régulier, mettez le token d'accès en cache et gardez-le chaud pour que le lookup en direct ne paie jamais le coût du renouvellement pendant un appel.

Intégration Pipedrive (celle que tout le monde évite)

L'intégration Pipedrive passe par Persons, Deals et Activities, et elle a un vrai piège : il n'existe pas de webhook pour les changements de champs personnalisés. Si votre agent vocal écrit un champ personnalisé et que vous avez besoin de réagir à ce changement ailleurs, vous ne pouvez pas vous y abonner. Pipedrive ne vous webhookera pas quand un champ personnalisé change ; vous devez faire un polling de dealFields sur un planning. Presque personne ne couvre ce point, ce qui explique exactement pourquoi les intégrations agent vocal Pipedrive cassent de manière insidieuse.

Le cycle de vie vocal se mappe proprement : la lecture en direct interroge GET /persons/search par téléphone, l'écriture post-appel crée une Activity (POST /activities) liée à la Person et au Deal, et la qualification fait avancer le Deal vers l'étape suivante. Du classique.

Le piège, c'est les champs personnalisés. Dans Pipedrive, les champs personnalisés sont référencés par une clé de hachage de 40 caractères, pas par un nom lisible, donc votre config de mapping doit stocker quelque chose comme dcf558aba6... au lieu de plan_tier. Et d'après la documentation DealFields de Pipedrive, il n'y a aucun événement de changement pour ces champs. Si un système en aval a besoin de savoir quand l'agent a mis à jour un champ personnalisé, vous faites un polling GET /dealFields et vous comparez avec votre dernier snapshot sur un cron. Ce n'est pas élégant. C'est juste comme ça que Pipedrive fonctionne, et le découvrir à 2h du matin en production vaut moins que de le lire ici.

Le handoff de qualification : faire avancer le deal et briefer le commercial

Le handoff, c'est là où l'agent vocal fait avancer le deal stage à la qualification, crée une tâche pour le commercial humain et lui transmet la transcription et le résumé pour qu'il arrive déjà au courant du contexte. Bien fait, le commercial hérite d'un lead chaud et qualifié avec des notes jointes, pas d'un nom et d'un numéro de téléphone froids.

Mécaniquement, ce sont trois écritures, toutes dans le handler post-appel : PATCH du deal vers le stage qualifié, POST d'une Activity/Task assignée au commercial avec une date d'échéance, et insertion du résumé d'appel dans le corps de la tâche. Le commercial ouvre son CRM, voit "qualifié par IA : veut une démo Pro, budget confirmé, préfère le jeudi," et rappelle préparé.

C'est aussi là que le choix de plateforme compte. Si vous êtes encore en train de décider sur quel moteur construire, notre comparaison sur quelle plateforme gère le mieux l'intégration CRM analyse comment Vapi, Retell et Bland exposent les métadonnées d'appel et les événements webhook, et cette différence impacte directement la propreté de votre handoff.

Construire soi-même ou déléguer (heures honnêtes)

Construire une intégration agent vocal CRM de qualité production prend environ 20 à 40 heures par CRM, et les heures ne vont pas là où vous le pensez. Le chemin heureux de lecture-écriture prend peut-être une journée. Le reste va dans la gestion des tokens d'auth, le mapping des champs, la gestion des fallbacks, l'idempotence et les tests contre les rate limits et les particularités du CRM. Alors combien de temps ça prend vraiment ? Voici le découpage honnête.

Sur nos builds, le temps se répartit à peu près ainsi : 3 à 5 heures sur l'auth et le renouvellement des tokens, 4 à 6 sur le mapping des champs et la couche de formatage pour la voix, 4 à 8 sur la gestion des fallbacks et des timeouts, 3 à 5 sur l'idempotence et la déduplication, et le reste sur les tests avec du vrai trafic d'appels. Le premier CRM vous apprend le pattern ; le deuxième et le troisième vont plus vite, mais chacun a son propre piège, comme l'absence de webhook pour les champs personnalisés dans Pipedrive.

Construire ou acheter ? Si vous avez un développeur capable d'héberger un endpoint webhook et que vous intégrez un seul CRM, construisez. Cet article est votre plan. Si vous avez besoin de trois CRM, d'une auth multi-tenant et de quelqu'un de disponible quand HubSpot vous rate-limite à 9h du matin, le calcul change. Nous détaillons cette décision dans notre guide construire ou acheter, et le détail des tarifs montre ce que le travail d'intégration ajoute à un build.

Si vous préférez ne pas maintenir tout ça, nous le faisons pour nos clients. Techsy livre des agents vocaux en production connectés à votre CRM : les lectures par function call, les écritures webhook, la gestion des fallbacks, tout. Sans obligation ; le code ci-dessus est à vous quoi qu'il arrive.

À propos de l'auteur

Mert Batur Gurbuz est co-fondateur de Techsy.io, où l'équipe livre des agents IA, des systèmes d'automatisation et des pipelines voix/SDR pour des clients B2B. Il étudie à l'Université de Birmingham et écrit sur la stack LLM tooling que l'équipe Techsy utilise réellement en production. Retrouvez-le sur LinkedIn.

Foire aux questions

Comment connecter un agent vocal IA à un CRM ?

Vous reliez l'agent au CRM de deux façons : le function calling pour les lectures en direct pendant l'appel, et un webhook pour l'écriture post-appel. L'agent cherche l'appelant en direct via votre endpoint, puis un webhook de fin d'appel déclenche votre handler, qui enregistre une Activity et met à jour le deal stage dans le CRM.

Un agent vocal peut-il récupérer des données CRM pendant un appel ?

Oui. L'agent utilise le function calling pour toucher votre endpoint de lookup, qui interroge le CRM et retourne le contact et les données de deal avant la prochaine phrase de l'agent. Réglez un timeout d'outil à 5 secondes et une phrase de fallback parlée, parce que sur un appel en direct vous courez contre la patience de l'appelant, pas celle de l'API.

Comment enregistrer les appels d'un agent vocal IA dans un CRM ?

Vous recevez le webhook de fin d'appel de la plateforme, qui contient la transcription, le résumé, la disposition et l'URL d'enregistrement. Votre handler les extrait, POSTe une Activity ou un engagement d'appel dans le CRM associé au contact, et définit le statut du lead. Il n'y a aucune pression de latence puisque l'appelant a déjà raccroché.

Quelle est la différence entre un webhook et le function calling pour les agents vocaux ?

Le function calling est une lecture en direct pendant l'appel : l'agent pose une question à votre CRM au milieu de la conversation et utilise immédiatement la réponse. Un webhook est une écriture post-appel : la plateforme envoie le résultat de l'appel en POST à votre serveur après la fin de l'appel. Le function calling court contre l'horloge ; les webhooks non.

Vapi s'intègre-t-il à HubSpot, Salesforce et Pipedrive ?

Vapi ne livre pas de connecteurs natifs pour les trois, mais il s'intègre avec n'importe lequel via ses outils function call (lectures en direct) et ses webhooks server URL (écritures post-appel). Vous pointez ces éléments vers votre propre endpoint, qui parle à HubSpot, Salesforce ou Pipedrive via leurs API REST. Le pattern est identique sur les trois CRM.

Comment mapper les données d'appel vers des champs CRM personnalisés ?

Conservez un objet de config qui mappe chaque champ de données d'appel vers un objet et un champ CRM. Pour HubSpot et Salesforce, les champs personnalisés utilisent des noms internes lisibles. Pipedrive référence les champs personnalisés par une clé de hachage de 40 caractères, donc votre config stocke le hash, pas un nom convivial. Formatez les valeurs pour la voix avant que l'agent les lise à voix haute.

Un agent vocal peut-il mettre à jour mon CRM en temps réel pendant l'appel ?

Il peut lire en temps réel, mais la plupart des builds en production diffèrent les écritures à après l'appel. Les lectures en direct doivent être rapides et sont sans risque. Les écritures en direct risquent la latence et des mises à jour partielles si l'appel se coupe au milieu d'une écriture. Le pattern standard est lire en direct, écrire sur le webhook de fin d'appel, ce qui protège l'expérience de l'appelant.

Comment éviter que l'agent vocal crée des doublons dans le CRM ?

Utilisez une clé d'idempotence ; l'ID d'appel est parfait. Avant que votre handler écrive quoi que ce soit, vérifiez si vous avez déjà traité cet ID d'appel ; si oui, retournez 200 et sautez. Stockez la clé dans Redis ou une base de données avec une contrainte unique, pas en mémoire, pour qu'elle survive aux redémarrages. Les webhooks sont rejoués, donc ce n'est pas optionnel.

Retell s'intègre-t-il à Pipedrive ?

Retell s'intègre à Pipedrive via le même pattern function call et webhook que pour tout CRM, même sans connecteur natif listé. Vous branchez les événements d'appel de Retell vers votre endpoint, qui utilise les API Activities et Deals de Pipedrive. Surveillez la limitation des champs personnalisés : Pipedrive n'a pas de webhook pour les changements de champs personnalisés, donc vous faites un polling dealFields à la place.

Combien de temps faut-il pour construire une intégration agent vocal CRM ?

Environ 20 à 40 heures par CRM pour un build de qualité production. Le chemin heureux est rapide ; le temps va dans l'auth et le renouvellement des tokens, le mapping des champs, la gestion des fallbacks et des timeouts, l'idempotence et les tests avec du vrai trafic d'appels. Le premier CRM est le plus lent parce qu'il vous apprend le pattern. Chaque CRM supplémentaire a encore ses propres particularités.

Tags

intégration agent vocal crmvapi hubspotfunction callingwebhookpipedrive

Partager cet article

Articles connexes

Plus dans ai-machine-learning

ai-machine-learning
Jul 24, 2026

Claude Opus 5 est là : une intelligence quasi-Fable-5 à moitié prix

Anthropic a lancé Claude Opus 5 le 24 juillet 2026. Il fait plus que doubler Opus 4.8 sur Frontier-Bench et maintient le prix d'Opus, mais perd quelques tests face à Fable 5 et Mythos 5. Voici le tableau des benchmarks, les tarifs et un verdict passer/attendre/rester.

10 min read lecture
Lire
ai-machine-learning
Jul 20, 2026

8 Meilleures APIs de Web Scraping IA en 2026 (Testées Sur Notre Propre Stack d'Agents)

Nous avons testé 8 APIs de web scraping IA avec les prix réels 2026 relevés via notre propre stack d'agents. Firecrawl, Bright Data, ScrapingBee et 5 autres, classées selon la qualité du rendu pour LLM, l'anti-bot et le support MCP.

9 min de lecture lecture
Lire
ai-machine-learning
Jul 20, 2026

Prompt Engineering pour le Code : 7 Techniques Qu'on Utilise au Quotidien dans Claude Code et Cursor (2026)

La plupart des articles sur les « prompts de codage IA » vous donnent 50 modèles à copier. Celui-ci enseigne les 7 techniques qu'on utilise chaque jour pour faire tourner un pipeline Claude Code à 16 agents, avec un vrai avant-après pour chacune, plus l'endroit où chaque technique vit dans Claude Code, Cursor et Copilot en 2026.

11 min read lecture
Lire
Voir tous les articles
Démarrez Votre Projet

Prêt à construire quelque chose d'extraordinaire ?

Transformons votre vision en réalité. Notre équipe est prête à vous aider à créer un logiciel qui fait la différence.

Réserver un appel de cadrage de 30 minVoir nos projets

Les nouveautés de la bibliothèque

Claude Skills

Voir tout
  • New Post

    Full SEO blog pipeline: research, brief, write, validate, image, translate, publish to Sanity. Autonomous from start to finish.

  • Content Refresh

    Audit a stale post, find decay drivers, and ship a SERP-aligned refresh without losing existing rankings.

  • SEO Audit

    Site-wide SEO audit with prioritized fix list: technical, on-page, and EEAT signals.

Automatisations IA

Voir tout
  • Auditeur de sécurité

    Scan SCA et IaC hebdo avec des PRs de correctifs priorisées.

  • Rédacteur de cold emails

    Génère des e-mails de premier contact ancrés dans un détail public précis.

  • Agent de recherche de leads

    Enrichit un e-mail en profil, note l'adéquation, alerte dans Slack.

Les nouveautés de la bibliothèque

Claude Skills

Voir tout
  • New Post

    Full SEO blog pipeline: research, brief, write, validate, image, translate, publish to Sanity. Autonomous from start to finish.

  • Content Refresh

    Audit a stale post, find decay drivers, and ship a SERP-aligned refresh without losing existing rankings.

  • SEO Audit

    Site-wide SEO audit with prioritized fix list: technical, on-page, and EEAT signals.

Automatisations IA

Voir tout
  • Auditeur de sécurité

    Scan SCA et IaC hebdo avec des PRs de correctifs priorisées.

  • Rédacteur de cold emails

    Génère des e-mails de premier contact ancrés dans un détail public précis.

  • Agent de recherche de leads

    Enrichit un e-mail en profil, note l'adéquation, alerte dans Slack.

Services

  • Solutions Enterprise
  • Applications mobiles
  • Applications web

Solutions

  • Systèmes CRM
  • Intégration IA
  • Solutions ERP
  • Agents Vocaux
  • Automatisation des Processus
  • Cybersécurité

Bibliothèque

  • Blog
  • Portfolio

Communauté

  • Automatisations IA
  • Claude Skills

Outils

  • Calculateur de coût app mobile
  • Calculateur coût API OpenAI / LLM
  • Calculateur de coût MVP
  • Calculateur agent vocal IA

Entreprise

  • À propos
  • Partenaires
  • Contact

Légal

  • Politique de confidentialité
  • Conditions d'utilisation
  • Politique des cookies

Services

  • Solutions Enterprise
  • Applications mobiles
  • Applications web

Solutions

  • Systèmes CRM
  • Intégration IA
  • Solutions ERP
  • Agents Vocaux
  • Automatisation des Processus
  • Cybersécurité

Bibliothèque

  • Blog
  • Portfolio

Communauté

  • Automatisations IA
  • Claude Skills

Outils

  • Calculateur de coût app mobile
  • Calculateur coût API OpenAI / LLM
  • Calculateur de coût MVP
  • Calculateur agent vocal IA

Entreprise

  • À propos
  • Partenaires
  • Contact
LégalPolitique de confidentialitéConditions d'utilisationPolitique des cookies
TECHSY
© 2026 Techsy. Tous droits réservés.