Automatiser les tâches Google Workspace avec l'API Gemini

1. Avant de commencer

Dans cet atelier de programmation, vous allez apprendre à automatiser des tâches Google Workspace avec les fonctionnalités d'appel de fonction et de multimodalité de l'API Gemini.

Prérequis

  • Connaissances de base d'Apps Script, de JavaScript ou d'un langage de programmation similaire

Objectifs

  • Comment exploiter les fonctionnalités de multimodalité et d'appel de fonction de l'API Gemini
  • Enchaîner plusieurs appels de l'API Gemini
  • Automatiser des tâches Google Workspace avec l'API Gemini

Ce dont vous avez besoin

  • Un navigateur Web.
  • Un compte Gmail Il peut également s'agir d'un compte Google Workspace ayant implémenté la configuration spécifique de l'API Gemini.
  • Une connexion depuis une région compatible pour l'API Gemini
  • Facultatif: interface de ligne de commande avec le programme curl pour tester les requêtes API directes.

Le code complet de cet atelier de programmation est disponible dans le livre de recettes de l'API Gemini sur GitHub. Consultez-la si vous avez besoin du code complet.

2. Configurer l'API Gemini

À propos de Gemini

Les modèles Gemini constituent la famille de modèles d'IA la plus vaste et la plus performante de Google. Pour exploiter ces modèles dans vos applications, vous pouvez utiliser l'API Gemini. Vous pouvez également essayer l'API Gemini dans Google AI Studio, une interface Web pour l'API qui vous permet d'essayer des requêtes, d'ajuster les paramètres des modèles et de régler des modèles personnalisés sans écrire de code.

Obtenir une clé

Facultatif: Tester votre clé

Si vous avez accès à une ligne de commande avec curl, ajoutez votre clé à la première ligne du bloc suivant, puis exécutez-la dans votre terminal pour tester la clé API.

export GOOGLE_API_KEY=Paste_your_API_key_here

curl "https://generativelanguage.googleapis.com/v1beta/models?key=${GOOGLE_API_KEY}"

Vous devriez voir une liste de modèles au format JSON, par exemple, modèles/gemini-1.0-pro. Cela signifie que cela a fonctionné.

3. Facultatif: Envoyer une requête à l'API Gemini

Dans cette étape facultative, vous allez envoyer une requête à l'API Gemini afin de mieux comprendre comment fonctionne la génération de contenu avant de l'ajouter à une application Apps Script.

À propos des modèles

L'API Gemini fournit un certain nombre de modèles ayant des capacités et des limites différentes. Tous les modèles et leurs capacités sont listés sur la page Modèles Gemini.

Faire votre première demande

Pour que l'API Gemini complète une requête textuelle, vous devez créer une requête JSON et l'envoyer au point de terminaison de l'API REST.

Pour cela, procédez comme suit :

  1. Dans un nouveau fichier, saisissez la requête JSON suivante:
{
  contents: [
   {
     parts: [
       { text: 'The most important aspects of a persuasive presentation are:' }
     ]
   }
 ]
}

La requête JSON inclut l'invite suivante: The most important aspects of a persuasive presentation are:. Le modèle va exécuter cette instruction et vous communiquer directement le résultat.

La requête JSON comporte trois champs de premier niveau à renseigner: contents, generationConfig et safetySettings. Seul contents est obligatoire. Les autres fournissent des mécanismes de contrôle des résultats.

  1. Enregistrez ce code JSON dans un fichier presentation.txt, puis transmettez-le directement à curl, comme suit:
curl -H 'Content-Type: application/json' -X POST -d @presentation.txt \
  'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.0-pro-latest:generateContent?key='${GOOGLE_API_KEY}

Dans cet exemple, vous définissez les valeurs suivantes dans l'URL:

  • v1beta spécifie la version de l'API.
  • gemini-1.0-pro-latest spécifie Gemini 1.0 Pro comme modèle et utilise le dernier instantané.
  • generateContent spécifie la méthode API que vous appelez.

Un résultat semblable aux lignes suivantes doit s'afficher :

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "* **Credibility:** The audience must trust that you are an expert on the subject matter and that you have their best interests at heart.\n* **Clearness:** Your message must be easy to understand and follow. Avoid using jargon or technical terms that your audience may not be familiar with.\n* **Concreteness:** Use specific examples and data to support your arguments. Avoid making vague or general claims.\n* **Emotional appeal:** In addition to appealing to the audience's logical side, you should also try to connect with them on an emotional level. Use storytelling, humor, and personal anecdotes to make your points more memorable and engaging.\n* **Strong closing:** End your presentation with a strong call to action. Tell the audience what you want them to do and why it is important for them to do it."
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP",
      "index": 0,
      "safetyRatings": [...]
    }
  ],
  "promptFeedback": {
    "safetyRatings": [...]
  }
}

Par souci de lisibilité, la sortie du terminal est régulièrement formatée:

  • Crédibilité:les participants doivent avoir confiance en vous en tant qu'expert dans ce domaine et en pensant à leur intérêt supérieur.
  • Clarté:votre message doit être facile à comprendre et à suivre. Évitez d'utiliser du jargon ou des termes techniques que votre audience ne connaît peut-être pas.
  • Concret:utilisez des exemples et des données spécifiques pour étayer vos arguments. Évitez les allégations vagues ou générales.
  • Attrait émotionnel:en plus d'attirer le côté logique de votre audience, vous devez également essayer d'établir un lien émotionnel avec elle. Utilisez la narration, l'humour et des anecdotes personnelles pour rendre vos arguments plus mémorables et engageants.
  • Bouclage fort:terminez votre présentation par une incitation à l'action efficace. Dites au public ce que vous voulez qu'il fasse et pourquoi il est important qu'il le fasse.

Pour en savoir plus sur les autres paramètres, y compris generationConfig et safetySettings, consultez les guides de requête et de sécurité.

4. Appeler l'API Gemini à partir d'Apps Script

  1. Accédez à script.new. Un fichier Apps Script code.gs est créé automatiquement pour vous.
  2. Maintenez votre curseur sur le fichier code.gs, puis cliquez sur 8bfe57773be886ab.png > Renommer.
  3. Remplacez le nom du fichier par utils.gs.
  4. Dans le fichier, supprimez la fonction myFunction pour qu'il soit vide.

Ajouter votre clé API au projet

  1. Dans le menu de navigation, sélectionnez Paramètres du projet.
  2. Sous Propriétés de script, cliquez sur Ajouter une propriété de script.
  3. Sous Propriété, saisissez GOOGLE_API_KEY.
  4. Sous Valeur, saisissez votre clé API Google AI Studio.

fcfe205a93879c49.png

  1. Cliquez sur Enregistrer les propriétés du script.
  2. Revenez à l'éditeur.

Ajouter le code de l'API Gemini

Dans le fichier utils.gs, procédez comme suit:

Configurez la clé API et le point de terminaison:

const properties = PropertiesService.getScriptProperties().getProperties();
const geminiApiKey = properties['GOOGLE_API_KEY'];
const geminiEndpoint = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.0-pro-latest:generateContent?key=${geminiApiKey}`;
  1. Ajoutez la fonction suivante qui appelle l'API Gemini avec une requête spécifique:
function callGemini(prompt, temperature=0) {
  const payload = {
    "contents": [
      {
        "parts": [
          {
            "text": prompt
          },
        ]
      }
    ], 
    "generationConfig":  {
      "temperature": temperature,
    },
  };

  const options = { 
    'method' : 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload)
  };

  const response = UrlFetchApp.fetch(geminiEndpoint, options);
  const data = JSON.parse(response);
  const content = data["candidates"][0]["content"]["parts"][0]["text"];
  return content;
}
  1. Ajoutez la fonction suivante qui définit l'invite:
function testGemini() {
  const prompt = "The best thing since sliced bread is";
  const output = callGemini(prompt);
  console.log(prompt, output);
}

Tester

  1. Cliquez sur 76113423d1f91775.png Enregistrer.
  2. Choisissez testGemini dans la liste déroulante des fonctions, puis cliquez sur 5b9034ff679c8761.png.
  3. Acceptez les autorisations nécessaires. Le code devrait s'exécuter et une sortie de la console devrait s'afficher avec les résultats dans le journal d'exécution.

Journal d'exécution

Ça a marché !

5. Appeler l'API Gemini avec des images

L'une des fonctionnalités les plus puissantes de la famille de modèles Gemini est la prise en charge de la saisie multimodale, ce qui signifie que vous pouvez fournir bien plus que du texte. Dans cette section, vous allez ajouter une fonction qui appelle l'API Gemini avec une image.

  • En haut du fichier utils.gs, après la déclaration const geminiEndpoint existante, ajoutez la ligne suivante:
const geminiProVisionEndpoint = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.0-pro-vision-latest:generateContent?key=${geminiApiKey}`;

Ajouter le code Gemini Vision

  1. Ajoutez une fonction au fichier utils.gs pour appeler ce point de terminaison nouvellement ajouté:
function callGeminiProVision(prompt, image, temperature=0) {
  const imageData = Utilities.base64Encode(image.getAs('image/png').getBytes());

  const payload = {
    "contents": [
      {
        "parts": [
          {
            "text": prompt
          },
          {
            "inlineData": {
              "mimeType": "image/png",
              "data": imageData
            }
          }          
        ]
      }
    ], 
    "generationConfig":  {
      "temperature": temperature,
    },
  };

  const options = { 
    'method' : 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload)
  };

  const response = UrlFetchApp.fetch(geminiProVisionEndpoint, options);
  const data = JSON.parse(response);
  const content = data["candidates"][0]["content"]["parts"][0]["text"];
  return content;
}
  1. Ajoutez la fonction de test suivante:
function testGeminiVision() {
  const prompt = "Provide a fun fact about this object.";
  const image = UrlFetchApp.fetch('https://storage.googleapis.com/generativeai-downloads/images/instrument.jpg').getBlob();
  const output = callGeminiProVision(prompt, image);
  console.log(prompt, output);
}

Cette fonction charge une image de test depuis Internet et la transmet à la fonction que vous avez définie. Plus tard, vous lui connectez afin d’utiliser un graphique d’une feuille de calcul, il ne s’agit donc que d’un test.

Tester

  • Enregistrez et exécutez la fonction testGeminiVision, puis inspectez le résultat.

849c6728bfb5ec52.png

6. Appeler l'API Gemini avec des outils

En plus du texte et des images, vous pouvez également donner accès à des outils dans vos requêtes.

Ajouter le code de gestion de l'outil

  • Ajoutez au fichier utils.gs une fonction qui accepte une spécification d'outil:
function callGeminiWithTools(prompt, tools, temperature=0) {
  const payload = {
    "contents": [
      {
        "parts": [
          {
            "text": prompt
          },
        ]
      }
    ], 
    "tools" : tools,
    "generationConfig":  {
      "temperature": temperature,
    },    
  };

  const options = { 
    'method' : 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload)
  };

  const response = UrlFetchApp.fetch(geminiEndpoint, options);
  const data = JSON.parse(response);
  const content = data["candidates"][0]["content"]["parts"][0]["functionCall"];
  return content;
}

Pour en savoir plus sur ce schéma et les champs disponibles, consultez la documentation de référence de l'API FunctionDeclaration.

Tester

  1. Définissez un outil que le modèle peut utiliser pour trouver la date et l'heure actuelles:
function testGeminiTools() {
  const prompt = "Tell me how many days there are left in this month.";
  const tools = {
    "function_declarations": [
      {
        "name": "datetime",
        "description": "Returns the current date and time as a formatted string.",
        "parameters": {
          "type": "string"
        }
      }
    ]
  };
  const output = callGeminiWithTools(prompt, tools);
  console.log(prompt, output);
}

Le format utilisé ici est le schéma FunctionDeclaration. Vous n'appelez pas réellement la fonction date-heure. Vous ne recevez qu'une indication indiquant que le modèle a demandé un appel de fonction. Vous gérerez les appels de fonction ultérieurement.

  1. Enregistrez et exécutez la fonction testGeminiTools pour afficher le résultat.

Journal d'exécution

7. Présentation des intégrations de démonstration avec Google Workspace

Maintenant que vous savez comment fonctionne l'appel de fonction, vous pouvez facilement étendre les fonctionnalités du modèle Gemini à d'autres services. Dans les sections suivantes, vous allez créer des intégrations avec les produits Google Workspace, tels que Google Drive, Google Slides et Google Sheets. Voici un diagramme simplifié:

3 outils

De manière générale, lorsqu'une requête utilisateur arrive, vous utilisez l'appel de fonction de l'API Gemini pour déterminer l'outil à utiliser. Vous allez créer trois outils capables d'effectuer les opérations suivantes:

  • Planifiez une réunion. La fonction setupMeeting() du schéma appelle l'API Gemini 1.0 Pro pour résumer un blog dans Google Drive et ajouter le résumé à une réunion nouvellement créée dans Google Agenda.
  • Rédiger un e-mail basé sur les insights d'un graphique La fonction draftEmail() du diagramme appelle Gemini 1.0 Pro Vision pour analyser un graphique dans Google Sheets et rédiger un e-mail dans Gmail en fonction de l'analyse.
  • Créez un deck squelette. La fonction createDeck() du diagramme appelle Gemini 1.0 Pro pour réfléchir à la liste à puces d'une présentation dans Google Slides.

Pour chaque outil, vous devez effectuer les trois opérations suivantes:

  1. Déterminez si la réponse d'appel de fonction de l'API Gemini demande à appeler cet outil particulier dans un bloc if...else.
  2. Ajoutez la fonction pour implémenter la fonctionnalité de l'outil.
  3. Déclarez l'outil avec l'API Gemini afin que le modèle Gemini connaisse l'existence de l'outil et puisse renvoyer la réponse correcte lors de l'appel de fonction.

8. Organiser une réunion avec Apps Script

Tout d'abord, vous devez automatiser la configuration d'une réunion dans Google Agenda, mais aussi ajouter une description, qui correspond au résumé d'un fichier dans Google Drive.

Pour cela, procédez comme suit :

  1. Téléchargez ce fichier texte, qui est la copie texte du blog sur le lancement de Gemini 1.5 Pro.
  2. Importez le fichier dans votre dossier racine dans Google Drive.
  3. Dans l'éditeur, créez un fichier main.gs, puis ajoutez le code suivant:
function main() {
  const userQuery = "Set up a meeting at 10AM tomorrow with Helen to discuss the news in the Gemini-blog.txt file.";

  var tool_use = callGeminiWithTools(userQuery, WORKSPACE_TOOLS);
  Logger.log(tool_use);
  
  if(tool_use['name'] == "setupMeeting") {
    setupMeeting(tool_use['args']['time'], tool_use['args']['recipient'], tool_use['args']['filename']);
    Logger.log("Your meeting has been set up.");
 }
  else
    Logger.log("no proper tool found");
}

Ici, vous invoquez la capacité d'appel de fonction de l'API Gemini. Vous devez ensuite définir la fonction de l'outil.

  1. Sur la gauche de l'éditeur, à côté de Services, cliquez sur + Ajouter un service > API Google Calendar > Ajouter. Cela permet d'activer le service avancé de Google Agenda, que vous devrez utiliser ultérieurement pour certaines API avancées.

Ajouter un service

  1. Dans votre fichier utils.gs, ajoutez le code suivant :
function attachFileToMeeting(event, file, fileName) {
  // Get the iCal ID for the event.
  const iCalEventId = event.getId();

  // Log the ID and title for debugging.
  console.log(`iCal event ID: ${iCalEventId}`);
  console.log(`event Title: ${event.getTitle()}`);

  // Set up the options for listing the event with the advanced Google Calendar service.
  const options = {
      iCalUID: iCalEventId,
    };

  // Use the primary calendar as the calendar ID to list events.
  const calendarId = 'primary';

  // Use the advanced Google Calendar service to list the event.
  const calEvents = Calendar.Events.list(calendarId, options);

  // Get the Calendar ID used by the advanced Google Calendar service.
  const eventId = calEvents.items[0].id;

  // Get the file URL for the attachment.
  const fileUrl = file.getUrl();

    // Set up the patch options to add the file.
    var patch = {
      attachments: [{
        'fileUrl': fileUrl,
        'title': fileName
      }]
    };

    // Patch the event to add the file as an attachment.
    Calendar.Events.patch(patch, 'primary', eventId, {"supportsAttachments": true});  
}

function setupMeeting(time, recipient, filename) {
  const files = DriveApp.getFilesByName(filename);
  const file = files.next();
  const blogContent = file.getAs("text/*").getDataAsString();
  
  var geminiOutput = callGemini("Give me a really short title of this blog and a summary with less than three sentences. Please return the result as a JSON with two fields: title and summary. \n" +  blogContent);
  // The Gemini model likes to enclose the JSON with ```json and ```
  geminiOutput = JSON.parse(geminiOutput.replace(/```(?:json|)/g, ""));  
  const title = geminiOutput['title'];
  const fileSummary = geminiOutput['summary'];

  const event = CalendarApp.getDefaultCalendar().createEventFromDescription(`meet ${recipient} at ${time} to discuss "${title}"`); 
  event.setDescription(fileSummary);
  attachFileToMeeting(event, file, filename);
}

Ce code effectue les opérations suivantes:

  • La fonction setupMeeting() parcourt votre Google Drive et trouve le fichier Gemini-blog.txt. Ce nom de fichier est automatiquement renvoyé par l'appel de fonction de l'API Gemini à l'étape 3.
  • La fonction setupMeeting() appelle l'API Gemini pour résumer le contenu du fichier, configure une réunion avec l'application CalendarApp à l'aide d'une description au format libre et ajoute le résumé à la réunion.
  • La fonction setupMeeting() appelle la fonction attachFileToMeeting() pour utiliser le service avancé de Google Agenda afin de joindre le fichier de blog à la réunion.
  1. En haut du fichier utils.gs, ajoutez le code suivant:
const WORKSPACE_TOOLS = {
 "function_declarations": [
   {
     "name": "setupMeeting",
     "description": "Sets up a meeting in Google Calendar.",
     "parameters": {
       "type": "object",
       "properties": {
         "time": {
           "type": "string",
           "description": "The time of the meeting."
         },
         "recipient": {
           "type": "string",
           "description": "The name of the recipient."
         },   
         "filename": {
           "type": "string",
           "description": "The name of the file."
         },                     
       },
       "required": [
         "time",
         "recipient",
         "filename"
       ]
     }
   },
   // You add tools here.        
 ]
};
  1. Dans l'éditeur, revenez au fichier main.gs, puis cliquez sur 5b9034ff679c8761.png.
  2. Si Google Workspace vous demande l'autorisation d'exécuter le script, cliquez sur OK.

Après quelques secondes, le journal d'exécution affiche un message indiquant que la réunion est configurée.

  1. Dans Google Agenda, recherchez la réunion avec le résumé et la pièce jointe.

Invitation à la réunion

9. Rédiger un e-mail avec Apps Script

Ensuite, vous automatisez la rédaction d'un e-mail dans Gmail. Voici le scénario: supposons que vous effectuez une analyse de données dans Google Sheets. Vous mettez tous les chiffres en place et créez un graphique. Vous souhaitez utiliser l'API Gemini Pro Vision pour rédiger un e-mail à partir du graphique.

Pour cela, procédez comme suit :

  1. Ouvrez cette feuille et cliquez sur Fichier -> Créez une copie.
  2. Dans la zone de texte Nom de la boîte de dialogue Copier le document, remplacez le nom par défaut Copy of CollegeExpenses par CollegeExpenses.
  3. Dans le fichier main.gs, remplacez la requête utilisateur précédente par une nouvelle, puis ajoutez le code suivant à l'instruction if...else:
function main() {
  // const userQuery = "Set up a meeting at 5PM with Helen to discuss the news in the Gemini-1.5-blog.txt file.";  
  const userQuery = "Draft an email for Mary with insights from the chart in the CollegeExpenses sheet.";

  if(...) {...}
  // Add this code
  else if(tool_use['name'] == "draftEmail") {
    draftEmail(tool_use['args']['sheet_name'], tool_use['args']['recipient']);
    Logger.log("Check your Gmail to review the draft");
  }
  else {...}

}
  1. Dans votre fichier utils.gs, ajoutez le code suivant :
function draftEmail(sheet_name, recipient) {
  
  const prompt = `Compose the email body for ${recipient} with your insights for this chart. Use information in this chart only and do not do historical comparisons. Be concise.`;

  var files = DriveApp.getFilesByName(sheet_name);
  var sheet = SpreadsheetApp.openById(files.next().getId()).getSheetByName("Sheet1");
  var expenseChart = sheet.getCharts()[0];

  var chartFile = DriveApp.createFile(expenseChart.getBlob().setName("ExpenseChart.png"));
  var emailBody = callGeminiProVision(prompt, expenseChart);
  GmailApp.createDraft(recipient+"@demo-email-provider.com", "College expenses", emailBody, {
      attachments: [chartFile.getAs(MimeType.PNG)],
      name: 'myname'
  });
}

Cette fonction récupère le graphique des frais universitaires de la feuille et l'envoie à Gemini Pro Vision pour rédiger l'e-mail. Gemini Pro Vision extrait les informations du graphique et rédige le corps de l'e-mail pour vous.

  1. Dans le fichier utils.gs, ajoutez le code suivant à l'objet WORKSPACE_TOOLS après le commentaire You add tools here:
  WORKSPACE_TOOLS = {
    "function_declarations": [
      // You add tools here.

      {
        "name": "draftEmail",
        "description": "Write an email by analyzing data or charts in a Google Sheets file.",
        "parameters": {
          "type": "object",
          "properties": {
            "sheet_name": {
              "type": "string",
              "description": "The name of the sheet to analyze."
            },
            "recipient": {
              "type": "string",
              "description": "The name of the recipient."
            },            
          },
          "required": [
            "sheet_name",
            "recipient"
          ]
        }
      },   


    ]
  };
  1. Dans l'éditeur, revenez au fichier main.gs, puis cliquez sur 5b9034ff679c8761.png.
  2. Au bout de 10 à 20 secondes, ouvrez Gmail. Vous devriez voir un brouillon d'e-mail semblable à celui-ci:

Vous pouvez modifier le brouillon avant de l'envoyer. L'intégralité de l'e-mail est rédigée par Gemini Pro Vision après que vous lui avez donné une courte requête et le graphique.

10. Créer un squelette de présentation avec Apps Script

Ensuite, vous allez automatiser la création d'une présentation "squelette" dans Google Slides à l'aide d'Apps Script.

Pour cela, procédez comme suit :

  1. Dans le fichier main.gs, remplacez la requête utilisateur précédente par une nouvelle et ajoutez le code suivant à l'instruction if...else:
function main() {
  // const userQuery = "Draft an email for Mary with insights from the chart in the CollegeExpenses sheet.";
  const userQuery = "Help me put together a deck about water conservation.";

  if(...) {...}
  // Add this code
  else if(tool_use['name'] == 'createDeck') {
    deckURL = createDeck(tool_use['args']['topic']);
    Logger.log("Deck URL: " + deckURL);
  }
  else {...}

}
  1. Dans votre fichier utils.gs, ajoutez le code suivant :
function createDeck(topic) {
  const prompt = `I'm preparing a ${NUM_SLIDES}-slide deck to discuss ${topic}. Please help me brainstorm and generate main bullet points for each slide. Keep the title of each slide short. Please produce the result as a valid JSON so that I can pass it to other APIs.`;
  
  var geminiOutput = callGemini(prompt, 0.4);
  // The Gemini model likes to enclose the JSON with ```json and ```
  geminiOutput = geminiOutput.replace(/```(?:json|)/g, "");
  const bulletPoints = JSON.parse(geminiOutput);
    
  // Create a Google Slides presentation.
  const presentation = SlidesApp.create("My New Presentation");

  // Set up the opening slide.
  var slide = presentation.getSlides()[0]; 
  var shapes = slide.getShapes();
  shapes[0].getText().setText(topic);

  var body;
  for (var i = 0; i < NUM_SLIDES; i++) {
      slide = presentation.appendSlide(SlidesApp.PredefinedLayout.TITLE_AND_BODY);
      shapes = slide.getShapes();
      // Set title.
      shapes[0].getText().setText(bulletPoints['slides'][i]['title']);
  
      // Set body.
      body = "";
      for (var j = 0; j < bulletPoints['slides'][i]['bullets'].length; j++) {
        body += '* ' + bulletPoints['slides'][i]['bullets'][j] + '\n';
      }
      shapes[1].getText().setText(body);
  } 

  return presentation.getUrl();
}

Cette fonction appelle l'API Gemini pour faire un brainstorming sur un sujet particulier et renvoyer les puces au format

de JSON, puis utilisez Apps Script pour remplir un squelette de présentation.

  1. Dans le fichier utils.gs, ajoutez le code suivant à l'objet WORKSPACE_TOOLS après le commentaire You add tools here:
  WORKSPACE_TOOLS = {
    "function_declarations": [
      // You add tools here.

      {
        "name": "createDeck",
        "description": "Build a simple presentation deck with Google Slides and return the URL.",
        "parameters": {
          "type": "object",
          "properties": {
            "topic": {
              "type": "string",
              "description": "The topic that the presentation is about."
            },
          },
          "required": [
            "topic"
          ]
        }
      },


    ]
  };
  1. En haut du fichier utils.gs, définissez la constante suivante:
const NUM_SLIDES = 3;

Il s'agit du nombre de diapositives que le modèle Gemini crée en plus de la diapositive d'ouverture.

  1. Dans l'éditeur, revenez au fichier main.gs, puis cliquez sur 5b9034ff679c8761.png. En quelques secondes, une URL de présentation apparaît dans le journal d'exécution.
  2. Ouvrez l'URL dans votre navigateur. Vous devriez voir un squelette rempli de puces.

Version préliminaire

11. Idées à explorer

Au-delà de ces trois intégrations, vous pouvez explorer les idées suivantes:

  • Créez un chatbot sur Google Chat. La création d'un chatbot est l'un des cas d'utilisation les plus courants des grands modèles de langage (LLM). Avec l'API Gemini, il est facile de créer un chatbot pour Google Chat. Pour en savoir plus, consultez l'API Google Chat et l'atelier de programmation Créer des applications Google Chat avec Gemini.
  • Génération augmentée de récupération (RAG) avec vos propres données dans Google Drive ou Keep. Dans cet atelier de programmation, vous n'utiliserez qu'un seul fichier texte pour la synthèse. Toutefois, vous pouvez également utiliser le contenu de vos comptes Google Drive et Keep personnels (notes, PDF et images, par exemple) avec l'API Gemini, une base de données vectorielle et, éventuellement, un outil d'orchestration tel que LangChain pour effectuer des RAG et personnaliser la réponse du modèle en fonction de vos données.
  • Utilisez la fonctionnalité d'appel de fonction multitour de l'API Gemini. L'appel de fonction de l'API Gemini ne se limite pas à un seul tour, et vous pouvez effectuer des appels de fonction multitours pour des tâches encore plus complexes.
  • Allez au-delà de Google Workspace. Maintenant que vous savez comment intégrer l'API Gemini dans Google Workspace, vous pouvez aller au-delà de Google Workspace et exploiter d'autres API dans le monde.

12. Félicitations

Vous avez découvert les fonctionnalités multimodales et l'appel de fonction de l'API Gemini. Vous les avez utilisées pour automatiser certaines tâches Google Workspace avec Apps Script.

En savoir plus