Cas d’utilisation du gestionnaire de transactions : génération de documents avec Google Docs

  • Rversion finale: Australia
  • Mis à jour 12 mars 2026
  • 7 minutes de lecture
  • Générez des documents à partir du gestionnaire de transactions à l’aide de Google Docs et Google Apps Script.

    Pour générer un document à partir de Transaction Manager, Google Docs combiné à Google Apps Script fournit une solution efficace et simple. En créant des API personnalisées à l’aide d’Apps Script, vous pouvez facilement recevoir des demandes GET et POST à partir d’une URL directe. Cela élimine le besoin de middleware, rationalisant l’intégration avec des services tels que CPQ ou Transaction Manager.

    Vous pouvez déclencher la génération de documents par l’une des méthodes suivantes :
    • CPQ Webhook : envoyez automatiquement des demandes POST pour lancer la création de documents.
    • Gestionnaire des transactions : utilisez-le pour gérer et automatiser les processus.

    Configuration d’un document Google pour extraire des CPQ données

    Pour accéder à la fenêtre développeur, ouvrez le document Google dans lequel vous souhaitez intégrer le script. Dans la barre de menus, accédez à Extensions > Apps Script pour ouvrir l’environnement de développement.

    Vous pouvez écrire du JavaScript personnalisé pour traiter des données et interagir avec Google Docs à l’aide de l’éditeur de script Apps.

    BOM

    Script

    Codage en cours

    Le script Google Apps inclut les demandes GET et POST.

    • Les requêtes GET (doGet) répondent par une sortie de texte simple, utile pour vérifier que l’application Web est en cours d’exécution.
    • Les requêtes POST (doPost) traitent les données entrantes (généralement JSON), génèrent le document en fonction du modèle et renvoient un lien vers le document nouvellement créé.

    Cette vidéo explique comment fonctionnent doGet et doPost dans un script d’application Google Doc.

    Lorsque vous utilisez Transaction Manager, vous devez transformer le JSON pour l’envoyer à Google Docs. Vous trouverez ci-dessous un exemple de modèle. Si vous utilisez un webhook, consultez la section pour savoir Webhooks comment les données seront envoyées à Google Docs.

    Le bloc de code suivant montre un exemple de modèle de transformation, envoyé en tant que POST à la fonction doPost.

    { 
      "transaction": { 
        "uuid": "{{txn.uuid}}", 
        "term": {{txn.term}}, 
        "stage": "{{txn.stage}}", 
        "status": "{{txn.status}}", 
        "account": "{{txn.account}}", 
        "endDate": "{{txn.endDate}}", 
        "netTotal": {{txn.netTotal}}, 
        "termUnit": "{{txn.termUnit}}", 
        "createdBy": "{{txn.createdBy}}", 
        "quoteName": "{{txn.quoteName}}", 
        "startDate": "{{txn.startDate}}", 
        "accountName": "{{txn.accountName}}", 
        "createdDate": "{{txn.createdDate}}", 
        "opportunity": "{{txn.opportunity}}", 
        "paymentTerm": "{{txn.paymentTerm}}", 
        "quoteNumber": "{{txn.quoteNumber}}", 
        "contractTerm": {{txn.contractTerm}}, 
        "contractType": "{{txn.contractType}}", 
        "currencyCode": "{{txn.currencyCode}}", 
        "estTaxAmount": {{txn.estTaxAmount}}, 
        "modifiedDate": "{{txn.modifiedDate}}", 
        "billToAddress": "{{txn.billToAddress}}", 
        "hardwareTotal": {{txn.hardwareTotal}}, 
        "servicesTotal": {{txn.servicesTotal}}, 
        "shipToAddress": "{{txn.shipToAddress}}", 
        "softwareTotal": {{txn.softwareTotal}}, 
        "discountAmount": {{txn.discountAmount}}, 
        "expirationDate": "{{txn.expirationDate}}", 
        "lastModifiedBy": "{{txn.lastModifiedBy}}", 
        "primaryContact": "{{txn.primaryContact}}", 
        "customerSegment": "{{txn.customerSegment}}", 
        "discountPercent": {{txn.discountPercent}}, 
        "transactionType": "{{txn.transactionType}}", 
        "estTaxPercentage": {{txn.estTaxPercentage}}, 
        "agreementDiscount": {{txn.agreementDiscount}}, 
        "taxEntityLocation": "{{txn.taxEntityLocation}}", 
        "transactionNumber": {{txn.transactionNumber}}, 
        "totalPriceEstimate": {{txn.totalPriceEstimate}}, 
        "overallDealDiscount": {{txn.overallDealDiscount}}, 
        "annualTransactionBands": "{{txn.annualTransactionBands}}", 
        "annualTransactionCount": {{txn.annualTransactionCount}}, 
        "accountSpecificDiscount": {{txn.accountSpecificDiscount}} 
      },   
      "lines": [
      {{#each lines}} 
        { 
          "uuid": "{{txn.line.uuid}}", 
          "productInfo": {
            "productId": "{{txn.line.productId}}",
            "productSku": "{{txn.line.productSku}}",
            "productCode": "{{txn.line.productCode}}",
            "productName": "{{txn.line.productName}}",
            "productType": "{{txn.line.productType}}",
            "productDescription": "{{txn.line.productDescription}}"
          },
          "pricing": {
            "netPrice": {{txn.line.netPrice}},
            "listPrice": {{txn.line.listPrice}},
            "discountAmount": {{txn.line.discountAmount}},
            "discountPercent": {{txn.line.discountPercent}},
            "netTotal": {{txn.line.netTotal}},
            "customerLineDiscount": {{txn.line.customerLineDiscount}},
            "agreementLineDiscount": {{txn.line.agreementLineDiscount}}
          },
          "dates": {
            "startDate": "{{txn.line.startDate}}",
            "endDate": "{{txn.line.endDate}}",
            "createdDate": "{{txn.line.createdDate}}",
            "modifiedDate": "{{txn.line.modifiedDate}}"
          },
          "quantity": {{txn.line.quantity}},
          "currencyCode": "{{txn.line.currencyCode}}",
          "configUUID": "{{txn.line.configUUID}}",
          "orderDetails": {
            "globalOrder": {{txn.line.globalOrder}},
            "orderNumber": {{txn.line.orderNumber}},
            "transactionLineNumber": {{txn.line.transactionLineNumber}}
          },
          "termDetails": {
            "term": {{txn.line.term}},
            "termUnit": "{{txn.line.termUnit}}",
            "termMultiplier": {{txn.line.termMultiplier}}
          },
          "approvals": "{{txn.line.approvals3}}",
          "lastModifiedBy": "{{txn.line.lastModifiedBy}}"
        }
        {{#unless @last}},{{/unless}} 
      {{/each}}
      ]
    }

    Si vous ne définissez pas la fonction doGet et essayez d’accéder à l’URL, vous recevrez une erreur. Si vous n’utilisez pas le doGet à d’autres fins, il est préférable de toujours le définir sur ce qui suit et de simplement modifier le texte.

    function doGet(e) {
      return ContentService.createTextOutput('Logik Transaction Manager Document Generation Web App is running.');
    }

    Lorsque vous accédez à l’URL en direct, vous recevez ce message :

    Message : L’application Web de génération de documents Logik Transaction Manager est en cours d’exécution.

    Le doPost est important, car il gérera probablement les charges utiles du webhook ou de CPQ l’intégration envoyées via les requêtes POST.

    Ensuite, nous créons une fonction pour générer un Google Doc à l’aide de la fonction doPost .

    Dans votre script Google Apps, la fonction doPost recevra une requête POST contenant des données (au format JSON) que vous souhaitez remplir dans un modèle Google Doc. La logique principale pour interagir avec la doc Google (c’est-à-dire remplacer les espaces réservés comme {{EXAMPLE}} par des valeurs réelles) sera placée dans une fonction distincte appelée à partir de doPost.

    Pour configurer la fonction doPost , définissez la fonction doPost pour gérer les demandes POST entrantes et appelez votre fonction de génération de documents personnalisée. Vous trouverez ci-dessous un exemple de la façon de le structurer.

    function doPost(e) {
      // Parse the JSON data from the POST request
      const postData = JSON.parse(e.postData.contents);
    
      // Call the function to create and populate the Google Doc
      const docLink = createGoogleDocFromTemplate(postData);
    
      // Return the public link to the generated document in the response
      return ContentService.createTextOutput(docLink);
    }

    Dans ce code :

    • L’objet postData contient les données analysées envoyées dans la demande POST.
    • createGoogleDocFromTemplate(postData) est la fonction que vous allez définir pour gérer la génération de Google Docs.
    • Le docLink est le lien public vers le document Google généré, renvoyé à l’appelant.

    Ensuite, créez la fonction de génération de documents. La fonction createGoogleDocFromTemplate :

    1. faites une copie d’un modèle Google Doc.
    2. Remplacez les espaces réservés (par exemple, {{EXAMPLE}}) dans le document par les données correspondantes.
    3. Renvoyer un lien public vers le document généré.
    Le bloc de code suivant montre un exemple de fonction createGoogleDocFromTemplate :
    function createGoogleDocFromTemplate(data) {
      // Specify the ID of the Google Doc template
      var templateId = 'YOUR_TEMPLATE_DOC_ID_HERE';
      // Make a copy of the template
      var templateDoc = DriveApp.getFileById(templateId).makeCopy();
      var doc = DocumentApp.openById(templateDoc.getId());
      var body = doc.getBody();
      // Replace placeholders with actual data from the POST request
      body.replaceText('{{ACCOUNT_NAME}}', data.transaction.accountName);
      body.replaceText('{{QUOTE_NUMBER}}', data.transaction.quoteNumber);
      body.replaceText('{{USER}}', data.transaction.createdBy);
      // Continue to replace all other placeholders...
      // Save and close the document
      doc.saveAndClose();
      // Make the document public (optional, based on your needs)
      templateDoc.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW);
      // Return the public link to the newly created document
      return templateDoc.getUrl();
    }

    Dans cette fonction :

    • La variable templateId stocke l’ID du modèle Google Doc. Vous devez remplacer « YOUR_TEMPLATE_DOC_ID_HERE » par l’ID réel de votre modèle.
    • makeCopy() crée une copie du modèle.
    • replaceText('{{EXAMPLE}}', data.key) remplace chaque espace réservé dans le document par des données réelles de la demande POST entrante. Par exemple, {{ACCOUNT_NAME}} est remplacé par data.transaction.accountName.
    • Le document est rendu public avec setSharing(), mais vous pouvez ajuster les paramètres de partage selon vos besoins.

    Connexion

    Google Apps Script offre une journalisation intégrée via Logger.log() pour le débogage, mais une meilleure journalisation est disponible dans Google Cloud Logs. Pour accéder aux journaux :

    Accéder à > Vue > Exécutions pour vérifier les sorties de votre script. Ensuite, connectez votre projet à Google Cloud Platform pour afficher les journaux.

    Dans l’explorateur de journaux Google Cloud, appliquez le filtre resource.type="app_script_function » pour afficher les journaux associés à votre application.

    Déploiement

    • Cliquez sur le bouton « Déployer » dans le coin supérieur droit de l’éditeur de script d’applications.
    • Sélectionnez « Déployer en tant qu’application Web ».
    • Définissez la version du projet (vous pouvez en créer une nouvelle).
    • Définissez qui peut accéder à l’application :
      • Exécuter en tant que : Ceci doit être défini sur moi, afin que le script s’exécute avec vos autorisations.
      • Qui a accès : choisissez « Tout le monde » (public).

      Nouvelle interface utilisateur de déploiement

    Une fois déployé, vous obtiendrez une URL se terminant par /exec pour une utilisation en direct et /dev pour le test. Il s’agit de l’URL que les utilisateurs cibleront pour déclencher la fonction doGet ou envoyer des requêtes POST pour déclencher doPost.

    Dans les exemples suivants, les points de suspension (...) représentent le numéro de script d’application unique de votre script.

    • En direct : https://script.google.com/macros/s/.../exec
    • Dev : https://script.google.com/macros/s/.../dev

    Si vous souhaitez tester vos changements avant de les mettre en ligne, utilisez l’URL de développement pour tester votre script avec des données réelles.

    Chaque fois que vous effectuez un redéploiement, vous devez créer une nouvelle version de votre script. Procédez comme suit :

    1. Dans l’éditeur de script Google Apps, cliquez sur le bouton Déployer en haut à droite.
    2. Sélectionnez Gérer les déploiements dans le menu.
    3. Dans la fenêtre Déploiements, cliquez sur Modifier sur le déploiement existant ou créez un nouveau déploiement.
    4. Cliquez sur Sélectionner une version, puis sur Nouvelle version.

    Dans la fenêtre contextuelle, vous pouvez donner un nom ou une description à votre version. Ceci est facultatif, mais utile pour le suivi des modifications. Cliquez sur Enregistrer pour créer la nouvelle version.

    Pour afficher ou gérer vos déploiements actuels :

    1. Dans l’éditeur de script Google Apps, cliquez sur Déployer.
    2. Sélectionnez Gérer les déploiements. Ici, vous verrez toutes les versions actives de votre script.
    3. Vous pouvez modifier, supprimer ou redéployer n’importe quelle version en cliquant sur le menu à trois points en regard de la version.
    • Modifier : mettez à jour un déploiement existant pour qu’il pointe vers une nouvelle version.
    • Supprimer : supprimez entièrement le déploiement (remarque : le lien actif cessera de fonctionner si le déploiement est supprimé).

    Si nécessaire, vous pouvez revenir à une ancienne version de votre application Web :

    1. Accéder à Déployer > Gérer les déploiements.
    2. Recherchez la version précédente à laquelle vous souhaitez revenir et cliquez sur Modifier.
    3. Sélectionnez la version antérieure dans le menu Sélectionner une version.
    4. Cliquez sur Déployer pour activer la version précédente.

    Cela permet de résoudre facilement les problèmes pouvant survenir avec les versions plus récentes.