Intégration API

Google Drive : PDF en double

Jérémy Chomel Dawap
  • Date éditoriale : 3 septembre 2025
  • Temps de lecture : 16 minutes
  1. Dans quel cas : deux copies du même bon de livraison
  2. Réserver l’identité du fichier avant le premier envoi
  3. Reprendre les octets sans recréer le document
  4. Exercice corrigé : suivre 24 échanges du SDK hors connexion
  5. Après un 409, retrouver la ressource réellement concernée
  6. Éviter les reprises qui fabriquent une autre version
  7. Plan d’action : reprendre le dépôt d’un bon de livraison témoin
  8. Conclusion : le bon de livraison conserve son fichier et sa révision
Portrait de Jérémy Chomel

Deux fichiers nommés BL-4182-r1.pdf apparaissent dans Google Drive après la reprise du connecteur. Le premier envoi avait terminé sur un timeout ; le second paraît réussi. L’ADV ne sait plus quel lien transmettre au commercial, et le dossier de livraison conserve une référence différente de celle partagée au client. Effacer la copie la plus récente peut même retirer le document déjà utilisé. Le problème commence avant le nettoyage : quelle identité le connecteur a-t-il demandée à chaque création ?

Le diagnostic doit commencer par l’identifiant conservé pour cette révision. Une session de transfert permet de poursuivre l’envoi des octets, mais elle ne remplace pas l’identité du fichier à créer. Pour un PDF binaire, un identifiant préparé par l’API puis conservé pour la même révision documentaire évite de changer de cible à chaque tentative incertaine. Il faut ensuite distinguer une réponse de transfert, une ressource retrouvée et son association au bon de livraison. Le nom du PDF ne suffit à fermer aucune de ces étapes.

Notre exercice original a passé 63 contrôles avec le SDK Google 2.201.0 sous Python 3.14.8. Il suit 24 échanges préparés, sans connexion à Drive, et examine les requêtes réellement produites par le client. Les réponses et les octets sont fictifs : aucun compte, fichier distant ou rattachement ERP n’est testé. Vous verrez comment conserver l’identifiant demandé, reprendre au décalage acquitté et laisser un conflit 409 visible plutôt que le convertir en réussite métier.

Le raccordement de Google Workspace aux documents de votre SI doit prendre en charge cette continuité. Une intégration API des pièces de livraison relie la révision générée dans la gestion commerciale, les octets envoyés et la référence conservée pour les utilisateurs. Le connecteur peut alors reprendre un dépôt incertain sans demander à l’ADV de choisir manuellement entre deux fichiers homonymes.

Dans quel cas : deux copies du même bon de livraison

Reconstituer les deux créations plutôt que comparer seulement les noms

Le scénario fictif part d’un ERP qui produit la révision r1 du bon de livraison BL-4182. Un traitement doit déposer son PDF dans un dossier Drive déterminé, puis conserver le lien utile au service commercial. Après une réponse perdue, le traitement reprend la tâche avec le même nom et un nouvel identifiant de fichier. Ce changement peut ouvrir une seconde création. Il ne représente pas simplement une autre tentative technique sur la première ressource.

Pour examiner un incident réel, rapprochez la référence du bon, sa révision, le compte Google utilisé et les identifiants demandés ou obtenus lors des tentatives. Notez séparément les sessions de transfert et leurs résultats connus. La description de la ressource File précise que le nom n’est pas nécessairement unique dans un dossier. Une recherche sur ce nom peut donc retrouver plusieurs candidats sans désigner celui que votre application devait créer.

Reconnaître les situations qui demandent un autre diagnostic

Deux révisions décidées par le métier ne sont pas automatiquement un doublon à supprimer. Un bon corrigé après modification des quantités peut devoir rester distinct du document précédemment diffusé. À l’inverse, deux identifiants Drive pour la même révision inchangée peuvent révéler une reprise mal conçue. Le responsable ADV doit établir cette différence avant que le développeur choisisse entre nouvelle création, mise à jour ou simple restitution d’un fichier déjà présent.

Ce dossier concerne le dépôt d’un fichier binaire, sans conversion en document Google natif. Il ne traite pas la génération correcte du PDF, la signature du document ou sa valeur d’archivage. Si les octets sont déjà différents avant l’appel Drive, un mécanisme de reprise ne répare pas leur provenance. Le coût à mesurer est concret : recherches de la bonne copie, liens divergents dans les outils et dossiers dont personne ne peut expliquer la version transmise.

Réserver l’identité du fichier avant le premier envoi

Obtenir un identifiant utilisable pour la création

La méthode files.generateIds fournit des identifiants utilisables dans des requêtes de création ou de copie. Le laboratoire construit une demande explicite d’un identifiant de type fichier dans l’espace Drive. Le SDK reçoit ensuite une réponse préparée contenant une valeur fictive. Cette lecture locale éprouve la construction et le décodage du client ; elle n’a réservé aucun identifiant auprès de Google.

Le connecteur réel doit conserver la correspondance avant la première création : entreprise concernée, bon BL-4182, révision r1 et identifiant réservé. La taille et l’empreinte de la source attendue aident à reconnaître les octets à reprendre. Cette conservation doit survivre au remplacement du worker. Si chaque relance consulte de nouveau le générateur d’identifiants sans retrouver l’affectation précédente, l’application recommence précisément le choix qui devait rester stable pour ce document.

Conserver une affectation documentaire, pas une nouvelle identité par tentative

La méthode files.create reçoit les métadonnées du fichier. Voici les quatre champs fictifs réellement sérialisés par le SDK dans notre essai de dépôt. Leur présentation est remise en forme pour la lecture. L’identifiant et le dossier sont des valeurs de laboratoire ; en exploitation, ils doivent provenir des références autorisées du flux, et non être recopiés depuis cet exemple.

{
  "id": "identifiant-reserve-fictif-A",
  "name": "BL-4182-r1.pdf",
  "mimeType": "application/pdf",
  "parents": ["dossier-fictif-ADV"]
}

Le contre-exemple construit une seconde demande avec le même nom, mais un identifiant fictif B. Le programme constate cette différence dans le corps sérialisé sans envoyer cette demande. Il ne prétend donc pas avoir créé deux fichiers pour prouver le risque. La règle native de reprise avec identifiant préparé est décrite par Google ; l’expérience montre, elle, quelle identité le code remet réellement au client lors de chaque construction.

Reprendre les octets sans recréer le document

Séparer le début d’une session du résultat de création

La documentation des transferts reprenables distingue la réponse initiale 200, son en-tête Location et le retour final de la ressource. L’ouverture de session a un corps vide. Son URI sert au transfert et à son suivi ; elle n’est pas l’identifiant durable à rattacher au bon. Dans le laboratoire, le premier appel à next_chunk() ouvre cette session puis tente déjà un premier envoi de données.

L’application doit donc conserver deux informations différentes : le fichier visé par la révision et l’état de son transfert en cours. Le monitoring peut afficher le bon, l’identifiant prévu, la quantité acquittée et la dernière étape observée, sans exposer l’URI de session complète dans les journaux ordinaires. Une nouvelle session ne justifie pas, à elle seule, une autre identité documentaire ; sa conservation et son accès demandent également une politique adaptée aux documents transportés.

Relire la quantité reçue après une réponse incertaine

Une sonde vide permet d’interroger une session incertaine. Selon Google, 200 ou 201 indique un transfert terminé ; 308 demande d’examiner Range. Sans cet en-tête, aucun octet n’est confirmé. Un 404 de session appelle un redémarrage du transfert. Ces réponses concernent cette opération : elles n’autorisent pas à renommer tout refus d’accès ou tout conflit de création « session expirée ».

Le témoin contient 786 432 octets synthétiques et demande des blocs de 524 288 octets. Après le premier bloc tenté, la réponse préparée n’acquitte que 262 144 octets. Le SDK poursuit alors au décalage 262144, compté depuis zéro, avec la tranche correspondante de la source. Il n’utilise pas 524288 comme prochain départ parce que cette quantité avait été présentée au transport. Cette observation distingue l’envoi tenté de l’avancement effectivement annoncé par la réponse fournie.

Exercice corrigé : suivre 24 échanges du SDK hors connexion

Exécuter le client avec des réponses explicitement préparées

Le programme d’examen des reprises Drive emploie le client officiel Google 2.201.0, publié le 30 septembre 2026, et son document Drive embarqué, révision 20260916. Il vérifie cette version et l’empreinte du document de découverte. La séquence de données reste en mémoire ; son type déclaré est PDF, mais son contenu n’est pas un PDF validé. Aucune pièce commerciale réelle n’est ouverte.

python3 -m venv .venv-drive
.venv-drive/bin/python -m pip install google-api-python-client==2.201.0
.venv-drive/bin/python -B resumable_file_identity_inventory.py
# checks_passed: 63
# prepared_transport_invocations: 24
# real_http_requests: 0
# connection_attempts: 0

Ces commandes préparent un environnement local de type Unix ; l’installation des dépendances est distincte de l’essai hors connexion. Le programme fournit au SDK un transport qui consomme une liste de réponses préparées et n’envoie rien. Le seuil de cet essai est zéro appel au client HTTP réel et zéro tentative de connexion instrumentée ; les gardes font échouer le programme si une tentative survient. Les 24 appels observés sont ceux de ce transport fictif. La lecture des traces distingue les données tentées de la sonde vide qui suit un résultat incertain.

Le code du client dans cette version permet de rapprocher les traces des transitions exercées. Nous appelons réellement next_chunk() et la lecture de métadonnées avec ce transport, au lieu de réécrire un moteur qui déciderait lui-même des reprises attendues. Le paramètre de retry reste à zéro dans les appels de l’expérience ; les nouvelles tentatives prévues par chaque scénario sont explicites et observables.

Lire les écarts entre tentative, acquittement et résultat fourni

Le tableau présente six points de contrôle. Dans le cas de réponse finale perdue, le premier bloc est acquitté, puis le transport lit les 262 144 derniers octets et lève le timeout préparé. Cela ne dit pas ce qu’un serveur aurait reçu. L’appel suivant du SDK sonde la session. Si la réponse préparée annonce la fin et fournit une ressource, le client la décode sans nouvel envoi de données. Le fichier distant reste fictif, même si ce chemin du SDK est réellement exécuté.

Observation préparéeRésultat observé
Envoi partiellement reçuReprise au décalage 262144
Réponse finale perdueSonde puis ressource fournie
Sonde 308 sans RangeNouvel envoi depuis zéro
Session en 404Exception sans nouvel identifiant
Création en 409Exception, lecture distincte ensuite
Nom identique, autre IDAutre identité demandée

Un autre cas fournit 308 à la sonde, avec un avancement partiel. Paradoxalement, le même appel à next_chunk() sonde la session puis envoie le bloc suivant avant de rendre son résultat. Compter les appels de méthode ne permet donc pas de compter les échanges avec le transport. L’essai sans Range vérifie une reprise depuis zéro, puis une continuation après un nouvel acquittement. La tranche de source effectivement lue est comparée à celle attendue, pas seulement à sa longueur.

Après un 409, retrouver la ressource réellement concernée

Garder le conflit de création visible

Google documente la reprise d’un envoi avec un identifiant préparé après un résultat indéterminé. Si l’action a réussi, une nouvelle tentative retourne 409 sans créer un doublon. Cette possibilité ne couvre pas la création ordinaire des documents Google Workspace ni leur conversion, avec les exceptions précisées par Google. Notre cas reste un PDF binaire ; il ne transpose pas la règle à une feuille Google native.

Dans l’exercice, une réponse 409 préparée lors de l’ouverture de session produit une exception ResumableUploadError. Le client n’ouvre pas de session et n’envoie pas les données. Le programme constate aussi que le corps de cette tentative conserve l’identifiant A. Il n’annonce pas « bon de livraison déposé » sur ce seul statut. Une lecture distincte demande ensuite les métadonnées du fichier réservé ; elle n’est pas un acquittement ERP dissimulé dans le traitement de l’erreur.

Examiner le fichier attendu et conserver les inconnues

Le client construit files.get pour cet identifiant et demande explicitement nom, type, parents, taille et empreinte MD5 avec l’ID. Dans le témoin, size reste une chaîne JSON et md5Checksum concerne le contenu binaire. La comparaison locale porte sur cinq champs fournis : identité, type, destination, taille et empreinte. Le nom reste informatif. Deux réponses supplémentaires préparées signalent respectivement un autre dossier parent et une empreinte absente.

Une taille identique n’authentifie pas le document ; une empreinte MD5 n’est ni une signature ni un contrôle d’innocuité. Même cinq champs concordants ne prouvent pas les permissions attendues ou le rattachement dans votre application. Le scénario laisse ces confirmations à la recette réelle. Si les métadonnées restent indisponibles avec le compte prévu, le support conserve un dépôt à examiner, plutôt que fabriquer un nouvel identifiant pour faire disparaître le conflit et obtenir enfin une réponse verte.

Éviter les reprises qui fabriquent une autre version

Figer les octets et l’affectation du bon de livraison

La même identité Drive ne rend pas interchangeables deux contenus. Si le PDF est régénéré entre les blocs avec d’autres quantités, reprendre son transfert comme si la source était inchangée devient une autre erreur. Le dossier de reprise doit retrouver les octets de r1, leur taille et leur référence de confiance. Une nouvelle révision décidée par le métier demande son propre traitement ; elle ne doit pas hériter silencieusement de l’envoi partiel du document précédent.

Notre laboratoire utilise une source constante et compare ses tranches ; il ne redémarre pas un vrai worker et n’éprouve pas de concurrence entre processus. La base qui conserve l’affectation, les règles d’exclusion entre workers et la récupération après crash doivent être testées dans l’architecture choisie. Ajouter un identifiant au corps JSON ne résout pas une course où deux workers ont déjà réservé chacun une valeur pour BL-4182 r1. L’idempotence du flux dépend aussi de cette affectation commune.

Le diagnostic de la pièce jointe absente du worker n8n complète ce point : un traitement peut posséder une référence sans pouvoir relire les octets attendus. La récupération d’une pièce privée Zendesk traite encore une autre frontière, celle de l’acquisition autorisée. Ni la disponibilité locale ni le téléchargement source ne remplacent le suivi de création Drive montré ici.

Ne pas confondre droit absent, session perdue et nouvelle création

Les identifiants préparés sont documentés dans le contexte de l’utilisateur demandeur. Conservez le contexte d’accès avec le travail à reprendre et qualifiez une éventuelle relève de compte. Le programme ne teste ni OAuth ni les permissions du dossier. Déclarer une capacité de gestion des Drives partagés, lorsque l’intégration en a besoin, ne constitue pas à elle seule un droit d’écriture. Ces conditions doivent être vérifiées sur l’environnement réel avant que les documents de livraison y circulent.

Le backoff peut espacer des tentatives lors d’une indisponibilité, mais il ne choisit pas l’identité du document. Le runbook doit distinguer l’échec de création, le suivi d’une session et une lecture de réconciliation. Dans le cas 404 préparé, le SDK expose une erreur sans réserver un autre fichier. Le redémarrage du transfert relève ensuite du connecteur et garde l’affectation documentaire attendue. Un rollback doit préserver cette correspondance et les dépôts incertains, plutôt que réinitialiser la file comme une série de documents neufs.

Plan d’action : reprendre le dépôt d’un bon de livraison témoin

Choisir une révision dont les équipes connaissent le contenu

Le responsable ADV choisit un bon synthétique ou une pièce autorisée pour la recette et confirme sa révision. Le responsable du connecteur relève le client installé et le fonctionnement de sa file. L’administrateur Workspace qualifie le compte, le dossier et les accès attendus. L’intégrateur ERP intervient sur la génération de la pièce et sur la conservation de la référence dans la gestion commerciale lorsque ces interfaces relèvent de son périmètre. Dawap peut coordonner ces passages sans se substituer à leur validation métier.

  1. Identifier le bon, sa révision et les octets qui doivent rester disponibles pendant la reprise.
  2. Retrouver l’affectation durable à l’identifiant Drive avant toute nouvelle création.
  3. Observer séparément la requête de création, la session et la quantité réellement acquittée.
  4. Provoquer en recette une réponse perdue, une reprise partielle et un conflit sur le même identifiant.
  5. Relire la ressource prévue, vérifier sa destination et confirmer le lien conservé côté gestion.
  6. Faire reprendre un dossier incertain après remplacement du worker, sans réserver une seconde identité.

Le seuil de notre témoin est précis : r1 conserve son affectation à A, les octets repris correspondent à la source convenue et aucun état inconnu n’est présenté comme un dépôt confirmé. Les 63 contrôles locaux vérifient leurs observations préparées ; la recette connectée doit encore confirmer la ressource, les accès et le lien côté gestion. Le test après remplacement de processus est indispensable pour démontrer la persistance que notre programme en mémoire ne couvre pas.

Traiter les doublons existants sans effacer les liens utiles

Avant tout nettoyage réel, inventoriez les identifiants des fichiers homonymes et les applications qui les référencent. L’ADV peut avoir transmis un lien, tandis que l’ERP en conserve un autre. Décider quelle copie garder exige d’examiner révision, contenu, emplacement et usages autorisés. La correction du connecteur n’est pas une autorisation de supprimer les anciens fichiers. Une remise en cohérence des liens doit avoir son propre suivi afin de ne pas réparer le prochain dépôt au prix d’un document déjà diffusé devenu inaccessible.

La journalisation utile suit BL-4182 r1, son identifiant affecté, la phase en cours, les octets acquittés et la dernière lecture connue. La latence de transfert et l’ancienneté des dépôts incertains servent à repérer les attentes ; le nombre de tentatives ne mesure pas le nombre de documents livrés. Le contrat de sortie conserve l’identifiant Drive affecté, la révision du bon et un état de dépôt explicite. Le mapping de retour vers la gestion préserve ces données, sans remplacer l’identité du fichier par l’URI d’une session terminée ou par le seul nom visible dans le dossier.

Conclusion : le bon de livraison conserve son fichier et sa révision

Un timeout de transfert ne doit pas transformer BL-4182 r1 en nouvelle demande de document. Le diagnostic rapproche l’identifiant réservé, la session et les octets acquittés, puis traite le conflit de création sans le masquer. L’expérience montre ces transitions du SDK sur 24 échanges préparés ; elle ne prouve pas qu’un fichier existe dans votre Drive. Cette limite laisse à la recette connectée les contrôles qu’elle seule peut établir.

Notre prestation d’intégration Google Workspace pour vos échanges documentaires peut commencer par ce dépôt témoin. Nous examinons avec vos équipes la conservation des références, la reprise du client et le retour vers la gestion commerciale. Le service ADV doit retrouver un lien explicable pour une révision donnée, et une attente visible lorsque le transfert ou son rattachement reste à confirmer.

Si vos bons de livraison se multiplient après chaque relance, Dawap peut cadrer et développer le middleware API entre votre ERP et vos documents partagés avec votre intégrateur de gestion. Le premier livrable sera une reprise vérifiable sur une pièce connue : une affectation conservée, les bons octets remis au client et une référence de retour contrôlée dans l’outil utilisé par vos équipes.

Portrait de Jérémy Chomel

Reprendre vos dépôts Drive sans multiplier les PDF

Dawap examine les références des documents, le client de transfert et le retour vers votre gestion commerciale pour cadrer une reprise qui conserve le bon fichier.

Articles recommandés

Illustration du trajet d’une pièce jointe entre réception n8n, stockage, worker et application de gestion Intégration API n8n : pièce jointe absente du worker Lire l'article
  • 13 août 2025
  • Lecture ~13 minutes

Le document est visible dans l’éditeur, mais son transfert ERP échoue selon le worker. Le diagnostic distingue référence, octets et preuve de rattachement. Une expérience locale de 28 contrôles montre les écarts de lecture, sans cluster n8n, appel distant ou écriture dans l’application de gestion destinataire.

Illustration du diagnostic d’une pièce jointe Zendesk refusée au connecteur ERP Intégration API Zendesk : pièce jointe refusée Lire l'article
  • 25 août 2025
  • Lecture ~17 minutes

L’agent ouvre le document du ticket, mais le connecteur ERP reçoit un refus. Retrouvez le compte, la pièce et le domaine qui répond avant de relancer. Un exercice Python de 56 contrôles sépare accès source et lien temporaire, ne transmet pas les identifiants Zendesk à la cible et rapproche des octets fictifs du bon dossier de gestion.

Illustration d’un import de relations Notion vers un CRM et des identifiants de pages liées à conserver Intégration API Notion : 37 contrats lus, un seul importé Lire l'article
  • 1er septembre 2025
  • Lecture ~18 minutes

La pagination arrive à son terme, mais le CRM ne conserve qu’une relation. Le témoin fictif montre pourquoi l’identifiant de propriété écrase les références de contrats. Un exercice Python de 62 contrôles compare les deux niveaux d’identifiants, retrouve les 37 références et isole les fiches clientes, sans appel Notion ni modification du CRM.

Illustration du contrôle des modes de lecture Google Sheets et des montants transmis à un ERP Intégration API Google Sheets : 1 250,50 € refusés Lire l'article
  • 2 septembre 2025
  • Lecture ~15 minutes

Le montant est lisible dans la feuille, mais son import ERP refuse le texte reçu. Une option de date seule ne règle pas le mode de lecture des valeurs. Un exercice de 71 contrôles construit six requêtes avec le SDK Google, compare nombre et texte au même affichage et reproduit une conversion erronée, sans appel Google ni écriture ERP.

Reprendre vos dépôts Drive sans multiplier les PDF

Dawap examine les références des documents, le client de transfert et le retour vers votre gestion commerciale pour cadrer une reprise qui conserve le bon fichier.