Intégration API

Panne Pipedrive : rattraper les ventes non transmises

Jérémy Chomel Dawap
  • Publié le : 6 novembre 2026
  • Mis à jour le : 11 novembre 2026
  • Temps de lecture : 16 minutes
  1. Déterminer ce que le récepteur a réellement perdu
  2. Fixer une fenêtre de lecture et garder ses bornes
  3. Parcourir les pages sans sauter les objets simultanés
  4. Valider ensemble l’inbox et le point de reprise
  5. Rapprocher les effets ERP avant toute nouvelle commande
  6. Limiter la reprise sans épuiser les autres intégrations
  7. Rejouer une panne dans le laboratoire local
  8. Plan d’action pour rouvrir le flux après la panne
  9. Vérifier le devis et les écritures à reprendre
  10. Conclusion sur les critères de reprise
Portrait de Jérémy Chomel

Après une maintenance, le récepteur de webhooks répond de nouveau. Plusieurs ventes gagnées restent à rapprocher et un commercial ne voit toujours pas le numéro de commande. Le risque est de recréer une commande alors que l’ERP l’a déjà enregistrée et que seul le retour vers Pipedrive manque.

Retrouvez d’abord les affaires gagnées modifiées pendant la période concernée. Enregistrez les observations et le point de reprise ensemble. Puis, pour chaque affaire, relisez son état et cherchez la commande existante avant d’autoriser une création. L’exemple téléchargeable reproduit ce parcours avec des réponses simulées et un journal SQLite.

Dans une intégration Pipedrive avec l’ERP, décidez avec l’ADV comment retrouver la commande et qui peut débloquer un dossier. Le même rapprochement peut servir aux autres flux du CRM vers les applications métier.

Déterminer ce que le récepteur a réellement perdu

En cas d’échec initial, Pipedrive prévoit trois nouvelles tentatives après 3, 30 et 150 secondes. Dix échecs en première tentative peuvent suspendre la souscription pendant 30 minutes. Les notifications émises pendant la suspension sont perdues. Pipedrive supprime également un webhook après trois jours consécutifs sans livraison réussie. Consulter les règles de livraison des webhooks v2.

La première vérification porte donc sur la souscription, ses droits, les réponses du récepteur et la période d’indisponibilité. Un service qui répond 2XX avant d’avoir stocké la notification peut avoir accusé réception d’un événement qu’il a ensuite perdu. À l’inverse, une commande peut exister dans l’ERP alors que seul le retour vers le CRM manque.

Pour qui lancer un rattrapage borné

Le parcours vise une panne identifiée sur le flux des ventes gagnées. Il ne reconstruit pas un miroir exhaustif du CRM. Les objets supprimés ou archivés, les changements de permissions et les affaires repassées à perdu demandent des campagnes et des règles spécifiques. Une absence de ligne dans une collecte filtrée ne prouve pas que l’objet n’a jamais existé.

Si vous ignorez la période de perte, commencez par comparer les références connues des deux systèmes et les journaux d’exécution. L’article sur la réconciliation entre source et cible aide à construire cette comparaison sans confondre les compteurs de pages, d’objets et de documents métier.

Fixer une fenêtre de lecture et garder ses bornes

L’API Deals v2 permet de filtrer sur updated_since et updated_until. Dans la référence officielle Deals, la borne basse inclut l’instant donné et la borne haute l’exclut. Les dates utilisent un fuseau explicite au format RFC3339.

L’exemple collecte du 5 novembre à 00 h UTC inclus au 6 novembre à 00 h UTC exclu. Il lit le statut courant won et trie sur update_time. Une affaire gagnée plus tôt peut apparaître si elle a été modifiée pendant cette fenêtre. Gardez les mêmes bornes et le même filtre sur toutes les pages.

query = {
    "status": "won",
    "updated_since": start,
    "updated_until": end,
    "sort_by": "update_time",
    "sort_direction": "asc",
    "limit": 100,
}
if cursor:
    query["cursor"] = cursor
response = api.request("GET", "/api/v2/deals", query=query)

L’API peut rendre une affaire visible tardivement ou faire évoluer son update_time pendant la lecture. Par exemple, si une modification déplace l’affaire après la borne haute, alors la fenêtre suivante pourra la récupérer. Prévoyez une réconciliation périodique pour les écarts persistants. Le collecteur de l’archive impose un début égal au checkpoint courant. Une lecture de recouvrement doit donc passer par un traitement distinct qui conserve ce checkpoint.

Séparer les progressions de chaque flux

Le checkpoint de l’exemple utilise une clé locale pour un compte Pipedrive et un filtre. En production, identifiez la progression par société, connexion et périmètre du flux. Si une autre connexion ou un nouveau filtre entre en service, alors définissez sa fenêtre initiale et rapprochez ses données avec l’ERP avant d’enregistrer un checkpoint.

Conservez la version du filtre et les bornes dans le journal d’exécution. Par exemple, après le remplacement d’une connexion OAuth, vérifiez qu’elle donne accès à un dossier connu de chaque pipeline attendu. Si la nouvelle connexion ne voit qu’un sous-ensemble des affaires, alors une page vide peut faire avancer le point de reprise en laissant des ventes de côté.

Parcourir les pages sans sauter les objets simultanés

Plusieurs deals peuvent partager le même horodatage de modification. Enregistrer simplement le dernier timestamp reçu, puis repartir strictement après lui, risque d’écarter les autres objets portant cet instant. Le curseur opaque fourni par l’API sert à poursuivre la même collecte ; il ne doit pas être fabriqué à partir d’un ID ou d’une date.

Le code suit additional_data.next_cursor jusqu’à une valeur nulle. Il refuse une réponse dont les métadonnées de pagination manquent, un curseur vide ou répété et un nombre de pages dépassant la limite locale. Ces refus sont des échecs de collecte : aucun ne doit être transformé en « dernière page » par commodité.

additional = response.get("additional_data")
if not isinstance(additional, dict) or "next_cursor" not in additional:
    raise ReviewRequired("Pagination metadata absent")
cursor = additional["next_cursor"]
if cursor is None:
    break
if not isinstance(cursor, str) or not cursor or cursor in seen_cursors:
    raise ReviewRequired("Invalid or repeated cursor")

Borner la mémoire et la promotion des pages

Le collecteur conserve les pages en mémoire, avec une limite de 20 pages et 100 affaires demandées par page. Si le plafond est atteint avant le dernier curseur, alors réduisez la durée de la fenêtre et repartez depuis le même début. Pour une reprise volumineuse, enregistrez les pages dans une table de préparation liée à l’exécution. Rendez-les visibles au consommateur après validation de la dernière page et du checkpoint.

Les lignes reçues sont aussi contrôlées : identifiant entier, statut attendu et date dans la fenêtre. Une observation inattendue provoque un arrêt et conserve le checkpoint précédent. Le support peut alors examiner le contrat plutôt que publier un nouveau point de reprise sur une collecte incohérente.

Valider ensemble l’inbox et le point de reprise

Après réception de toutes les pages, une transaction SQLite écrit les observations dans l’inbox et avance le checkpoint. La clé d’observation combine deal_id et update_time. Si deux lignes portent la même clé mais des données différentes, la transaction est annulée. Cette idempotence concerne la capture. Le consommateur tient un journal d’écriture distinct pour la commande et pour le retour CRM.

Cette transaction vérifie que le checkpoint n’a pas été avancé par un autre collecteur depuis le début de la lecture. Deux exécutions ne peuvent donc pas considérer simultanément leur progression comme acquise. Si une insertion ou ce contrôle échoue, l’ensemble est annulé.

La transaction du collecteur suit cet ordre. Le dernier point de reprise reste exploitable si l’écriture s’interrompt avant le COMMIT.

  1. Ouvrir une transaction avec BEGIN IMMEDIATE et relire won-checkpoint.
  2. Vérifier les conflits, puis insérer les observations dans inbox.
  3. Écrire la borne haute dans meta et valider les deux écritures ensemble. Exécuter un ROLLBACK en cas d’erreur.

Distinguer capture et acceptation métier

Le checkpoint atteste l’enregistrement de la fenêtre dans l’inbox. Pour la supervision, comparez trois états de sortie par affaire. Elle peut être capturée, rapprochée avec une commande confirmée, ou en attente d’une décision. La file de travail doit garder le motif d’attente et l’identité du responsable qui peut agir.

La persistance doit vivre hors du répertoire public, avec sauvegarde et accès limités. L’archive contient le code, jamais une base client. Pour remplacer SQLite par PostgreSQL ou une autre base, conserver les contraintes d’unicité et la frontière transactionnelle importe davantage que reproduire exactement les noms des tables.

La journalisation du collecteur doit conserver la fenêtre d’entrée, la dernière page validée et la sortie de la transaction. Par exemple, si la deuxième page renvoie 429, enregistrez le statut et la borne de reprise. La file de traitement ne reçoit alors aucune des observations de cette exécution. Dans le rapport, comptez séparément les lignes reçues et les nouvelles clés ajoutées à l’inbox.

Rapprocher les effets ERP avant toute nouvelle commande

L’inbox peut contenir un deal observé plusieurs fois au cours de sa vie. Son consommateur doit relire l’état utile et retrouver le document accepté. Un événement ancien ne doit pas rétablir automatiquement une décision commerciale abandonnée entre-temps. Le programme de commande associé refuse notamment une affaire qui n’est plus gagnée au moment du traitement.

Le rapprochement cherche ensuite une commande par sa référence externe, selon les capacités réelles de l’ERP. Si elle existe et correspond à la version attendue, il reste à confirmer le retour CRM. Si elle existe avec une autre version, la reprise s’arrête : créer une seconde commande ou écraser la première serait une nouvelle décision métier.

Le simulateur ERP fourni démontre une clé externe unique et une recherche fiable. Ces propriétés sont un contrat de démonstration, pas une garantie de toute API ERP. Lorsque la cible ne permet pas de retrouver un résultat de manière certaine, une réponse perdue doit aller en vérification manuelle. L’article du deal Pipedrive à la facture ERP montre le journal de commande et le retour de statut.

Consommer l’inbox avec un document accepté

Le consommateur recover_orders charge le document accepté depuis un registre serveur. Dans le scénario 5071, l’ERP simulé enregistre la commande puis perd la réponse. Le premier passage retourne needs_verification. Le second retrouve DEMO-5071 et confirme le retour CRM. Le deal 5072 reste needs_accepted_document. Au total, une seule commande figure dans l’ERP simulé.

Paradoxalement, une création peut avoir réussi alors que le suivi de l’affaire affiche encore un échec. Donnez la priorité au rapprochement par référence externe. Si l’ERP confirme l’écriture mais que le retour CRM reste incertain, vérifiez le champ de suivi dans Pipedrive avant de débloquer cet effet. Le journal conserve des clés distinctes pour les deux écritures.

Limiter la reprise sans épuiser les autres intégrations

Une panne peut créer un retard important, mais toutes les intégrations du compte continuent à partager son budget API. Le modèle de limitation officiel distingue notamment le budget journalier et les limites de fréquence. Une attente courte ne résout pas automatiquement un budget journalier épuisé.

Le client fourni impose un plafond de requêtes par instance. Pour régler l’ordonnanceur réel, estimez le coût en tokens par endpoint REST et contrôlez les en-têtes de limite de fréquence. Si un token atteint sa limite de fréquence, utilisez la fenêtre de réinitialisation documentée. Si le budget quotidien de la société est épuisé, différez la reprise jusqu’au renouvellement de ce budget. Réservez une capacité au flux courant.

Une erreur 429 sur la deuxième page laisse le point de reprise inchangé. Relancez la fenêtre après résolution de la cause, avec une seule exécution par flux. Pour vérifier les opérations de lecture et les paramètres de connexion, retrouvez les objets, quotas et webhooks de l’API Pipedrive.

Rejouer une panne dans le laboratoire local

Téléchargez les implémentations et leurs tests, extrayez l’archive et lancez les commandes avec Python 3.11 ou supérieur. Le bloc reconciliation affiche deux pages, deux observations SQLite et zéro commande confirmée à l’étape de collecte. Le bloc inbox_consumer détaille ensuite le résultat de chaque dossier.

python3 demo.py
python3 test_integration.py -v

Les 48 tests de l’archive couvrent cinq parcours. Pour le rattrapage, ils vérifient la limite de pages, la borne haute exclue, le curseur répété, les métadonnées manquantes et le contenu de l’inbox après un échec. Le cas de réponse ERP perdue vérifie aussi qu’un seul retour CRM est envoyé après rapprochement.

ÉpreuveRésultat attendu
Deux pages, même horodatageLes deux affaires sont conservées avant l’avancement du checkpoint.
429 sur la deuxième pageL’inbox et le checkpoint restent dans leur état antérieur.
Fenêtre dont la fin égale le checkpoint courantLe collecteur retourne zéro et ne refait aucun appel.
Même ID et même horodatage, contenu différentUn conflit annule la transaction.
Réponse perdue après enregistrement de la commandeLa reprise retrouve la commande par sa référence. Le nombre de commandes reste à une.

Sur un compte de recette autorisé, faites modifier une affaire pendant la pagination et mesurez son délai de visibilité. Vérifiez les droits de lecture et le retour de statut. Pour un connecteur PHP, notre tutoriel SDK Pipedrive pour Symfony détaille les appels et les erreurs à gérer.

Plan d’action pour rouvrir le flux après la panne

Délimiter la panne à partir des écritures confirmées

Avant de redémarrer les consommateurs, vérifiez les droits de la souscription et la capacité du récepteur à stocker une notification. Partez du dernier checkpoint confirmé. Si vous ne disposez que de journaux HTTP, alors rapprochez quelques affaires des entrées durables et des commandes ERP pour fixer une borne exploitable avec l’ADV. Consignez les périodes et les comptes dont la couverture reste incertaine.

Produisez un rapport par affaire avec la référence du document accepté, la référence de commande recherchée, le résultat ERP et le retour CRM. Le commerce vérifie les affaires encore gagnées. L’ADV tranche les écarts de document. Le support prend en charge les réponses perdues. Convenez d’un délai avant escalade si l’une de ces responsabilités reste sans réponse.

Réouvrir les consommateurs par lots contrôlés

Validez un premier lot, contrôlez les effets dans la cible, puis ouvrez les suivants. Conservez un mécanisme de pause qui bloque les nouvelles créations tout en gardant l’inbox et les preuves déjà obtenues. Si le lot pilote fait remonter une commande à la référence attendue mais au montant différent, suspendez la création pour cette affaire et demandez à l’ADV de vérifier la version acceptée.

Avant de clôturer la panne, comparez la file de reprise et le flux courant. Une nouvelle notification pour une vente déjà rapprochée doit retrouver la même référence de commande. Le seuil de reprise peut porter sur le nombre de dossiers incertains et le délai depuis leur capture. L’instrumentation doit montrer ces deux mesures au support et à l’ADV.

  1. Vérifier la souscription, ses droits et le stockage du récepteur avant la reprise métier.
  2. Fixer la première fenêtre depuis une borne fiable et conserver sa fin sur toutes les pages.
  3. Arrêter le run sans avancer le checkpoint si la pagination ou le budget bloque la collecte.
  4. Comparer les références ERP avant toute nouvelle commande et isoler les dossiers ambigus.
  5. Conserver les preuves, surveiller le flux courant et organiser ensuite le recouvrement des observations tardives.

Vérifier le devis et les écritures à reprendre

Si une commande reste à créer, vérifiez les références et les montants du devis accepté avant de reprendre le parcours du deal Pipedrive à la facture ERP. Le document accepté fixe les lignes et les montants que l’ADV peut engager.

Pour reprendre une écriture dont la réponse manque, le formulaire Pipedrive avec journal durable montre la réservation d’un effet, la vérification de l’ID distant et la reprise des étapes suivantes. Le même principe s’applique au retour CRM lorsque l’écriture ERP a déjà été confirmée.

Conclusion sur les critères de reprise

Avant de rouvrir le flux, vérifiez que l’inbox contient les observations de la fenêtre et que le checkpoint correspond à sa borne haute. Pour chaque dossier, consignez la commande confirmée ou le motif qui retient encore la décision.

Validez un premier lot avec l’ADV en comparant les documents ERP et les retours Pipedrive. Mettez les écarts restants en attente avec une référence et un responsable. L’équipe pourra traiter les prochains lots en conservant les mêmes contrôles.

Pour cadrer une intégration Pipedrive avec supervision, Dawap peut vous aider à établir le rapprochement, à vérifier les capacités de recherche de l’ERP et à tester la procédure de reprise avec vos équipes.

Portrait de Jérémy Chomel

Retrouvez les ventes Pipedrive à rapprocher

Définissez la fenêtre de reprise et les preuves à vérifier avant de relancer les créations ERP.

Articles recommandés

Du deal à la facture : fiabiliser le passage de Pipedrive vers l’ERP Intégration API Du deal Pipedrive à la facture ERP Lire l'article
  • 3 mars 2024
  • Lecture ~22 min

Un deal gagné attend parfois un compte facturable ou la bonne version du devis. Ce guide explique les contrôles ADV, le retour des statuts ERP et la reprise après une réponse perdue. Un exercice local montre comment retrouver la commande avant de renvoyer sa référence dans Pipedrive. Le parcours couvre aussi les relances de facture.

SDK Pipedrive dans Symfony : client officiel, pagination et reprise Intégration API SDK Pipedrive en PHP et Symfony : appels v2 et reprise Lire l'article
  • 28 janvier 2025
  • Lecture ~18 min

Le client PHP officiel prépare les appels v2, mais la reprise appartient à votre application. Ce tutoriel configure le SDK dans Symfony, distingue clé source et ID distant, puis fournit un programme reproductible. Vingt contrôles locaux vérifient pagination, création de contact, deal et blocage après timeout, sans appel externe.

Formulaire web et Pipedrive : transmettre chaque demande Intégration API Formulaire Pipedrive : demandes sans doublons Lire l'article
  • 6 novembre 2026
  • Lecture ~16 min

Un client soumet deux fois le même formulaire B2B. Comment créer un seul lead Pipedrive et relancer le suivi après une réponse perdue ? L’exemple Python montre comment rapprocher le contact, créer l’activité commerciale et reprendre depuis un journal SQLite. Les tests vérifient aussi les cas où le compte reste à qualifier.

Testez la reprise avec votre équipe ADV

Dawap vous aide à rapprocher les ventes, les devis acceptés et les commandes déjà créées.