Depuis le COVID, mon calendrier est rempli de réunions, de réunions d’équipe et d’appels clients.
Cependant, planifier un événement et inviter des invités sont des tâches ennuyeuses. Un vendredi, après avoir passé trop de temps sur ces tâches, je me suis dit :
Pourquoi est-ce que je passe autant de temps là-dessus ?
J'ai donc eu l'idée de créer un planificateur d'événements pour simplifier mon travail !
Dans cet article, je vais vous montrer comment créer une application Nodejs capable de créer des événements et d'envoyer automatiquement des invitations par e-mail avec des liens Google Meet.
Excité ? Moi aussi.
Alors, sans plus attendre !
Commençons !
Pour démarrer notre projet, nous devons configurer un environnement Node.js. Créons donc un projet Node. Exécutez la commande suivante dans le terminal.
npm init -y
Cela initialisera un nouveau projet Node.js.
Maintenant, nous allons installer les dépendances requises de notre projet.
npm install express googleapis dotenv
Cela installera les packages suivants :
.env
.
Ensuite, nous allons créer un dossier .env
pour stocker en toute sécurité nos informations sensibles telles que les informations d’identification de l’API.
//.env PORT = YOUR_PORT || 8000 CLIENT_ID = YOUR_CLIENT_ID CLIENT_SECRET = YOUR_CLIENT_SECRET REDIRECT_URL = http://localhost:8000/auth/redirect API_KEY = YOUR_API_KEY
Nous allons maintenant créer un fichier index.js
dans le répertoire racine et configurer un serveur express de base. Voir le code suivant :
const express = require("express"); const dotenv = require("dotenv"); dotenv.config(); const app = express(); const port = process.env.PORT || 8000; app.get("/", (req, res) => { res.send("Hello World"); }); app.listen(port, () => { console.log(`Server running on port ${port}`); });
Ici, nous utilisons le package « dotenv » pour accéder au numéro de PORT à partir du fichier .env
.
En haut du projet, nous chargeons les variables d'environnement à l'aide dotenv.config()
pour les rendre accessibles dans tout le fichier.
Dans un premier temps, nous allons accéder à la console Google Cloud .
Ensuite, nous obtiendrons ce tableau de bord. (J'ai déjà créé un projet, c'est pourquoi j'obtiens ceci, vous pourriez obtenir autre chose).
Maintenant, nous allons cliquer sur le bouton « Nouveau projet » pour démarrer un nouveau projet.
Ensuite, nous obtiendrons quelque chose comme ceci. Ici, nous ajouterons le nom et l'organisation de notre projet. Pour ce projet, je garde cela comme « Mail-integration-Demo ». Ensuite, nous cliquerons sur le bouton Créer pour continuer
Ensuite, dans la barre de navigation latérale, nous trouverons « API et services ». Dans cette section, il y a un sous-menu pour activer les API et les services. Nous cliquerons dessus pour continuer.
Ensuite, nous allons activer l'API que nous utiliserons dans ce projet, c'est-à-dire l'API Google Calender.
Ensuite, nous allons accéder à l'écran de consentement OAuth. Ici, nous allons sélectionner le type d'utilisateur comme externe. Et nous allons appuyer sur le bouton Créer pour continuer.
Ensuite, nous allons accéder à la page d'inscription de l'application. Ici, nous allons ajouter plus d'informations sur notre application. Nous commençons par ajouter le nom de notre application et une adresse e-mail pour le support utilisateur.
Pour ce projet, je l'appellerai « Intégration de la messagerie d'Arindam » et utiliserai ma propre adresse e-mail pour le support.
Ensuite, nous devons définir la portée de l’application.
Dans les étendues, nous ajouterons les autorisations nécessaires telles que userinfo.email
et userinfo.profile
pour ce projet.
Après cela, nous ajouterons un utilisateur de test à notre application.
Voilà, notre application est enregistrée sur la plateforme.
Nous allons maintenant créer notre secret d'ID client OAuth. Pour cela, nous allons passer à la partie Créer des informations d'identification.
Ici, nous allons ajouter le type de notre application et son nom. Pour ce projet, il s'agit d'une application Web et son nom est Arindam's Mail Demo.
Nous avons également ajouté une URL de redirection. Pour ce projet, il s'agira de http://localhost:8000/auth/redirect
.
Et ensuite, nous obtiendrons les informations d’identification OAuth.
Ensuite, nous allons créer des clés API.
Après avoir fait tout cela, nous mettrons à jour notre fichier .env
avec les clés API et les informations d’identification OAuth que nous avons générées précédemment.
Avec cela, nous avons configuré notre console Google Cloud pour ce projet, passons maintenant à la section suivante
Jusqu'à présent, nous avons effectué la configuration de base de notre projet. Nous allons maintenant intégrer l'authentification OAuth2 dans notre projet. Cela permet à notre application d'interagir en toute sécurité avec les services Google. Pour cela, nous allons d'abord importer les packages requis dans le fichier index.js
.
const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv');
Nous définirons ensuite la portée de l’accès requis pour l’API Google Calendar.
const scopes = ['https://www.googleapis.com/auth/calendar'];
Ensuite, nous allons configurer le client OAuth 2 à l’aide des informations d’identification que nous avons stockées dans le fichier .env
.
// OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL );
Après la configuration OAuth 2, nous allons créer une route pour authentifier nos utilisateurs.
app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } );
Lorsque nos utilisateurs empruntent cette route, ils seront redirigés vers la page d'authentification de Google où des autorisations spécifiques seront demandées pour notre application.
Après une authentification réussie, Google redirigera l'utilisateur vers notre URL de redirection ( /auth/redirect
)
app.get("/auth/redirect", async (req, res) => { const {tokens} = await oauth2Client.getToken(req.query.code); oauth2Client.setCredentials(tokens); res.send('Authentication successful! Please return to the console.'); } );
Ici, nous récupérons les jetons d'actualisation de la requête et les stockons sous forme d'informations d'identification dans oauth2Client
. Ces informations d'identification nous aideront à effectuer des requêtes auprès de l'API Google Calendar.
Voici le code complet pour index.js
:
//index.js const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv'); const app = express(); dotenv.config(); const port = process.env.PORT || 8000; app.get('/', (req, res) => { res.send('Hello World'); } ); // Define the scope of access for the Google Calendar API. const scopes = ['https://www.googleapis.com/auth/calendar']; // OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL ); app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } ); app.get("/auth/redirect", async (req, res) => { const {tokens} = await oauth2Client.getToken(req.query.code); oauth2Client.setCredentials(tokens); res.send('Authentication successful! Please return to the console.'); } );
Voici la partie la plus importante ! Dans cette section, nous allons planifier un événement sur Google Agenda !
Pour commencer, nous allons initialiser le client API Google Calendar.
const calendar = google.calendar({ version: 'v3', auth: oauth2Client });
Ensuite, nous allons créer un objet événement dans lequel nous ajouterons tous les détails de l'événement tels que le résumé, l'emplacement, l'heure de début et de fin, etc.
const event = { summary: 'Tech Talk with Arindam', location: 'Google Meet', description: "Demo event for Arindam's Blog Post.", start: { dateTime: "2024-03-14T19:30:00+05:30", timeZone: 'Asia/Kolkata' }, end: { dateTime: "2024-03-14T20:30:00+05:30", timeZone: 'Asia/Kolkata' }, };
Après cela, nous allons créer une route ( /create-event
) où nous créerons l'événement.
Ici, nous insérons un événement dans le calendrier de l'utilisateur à l'aide de la méthode calendar.events.insert()
.
app.get('/create-event', async (req, res) => { try { const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client, resource: event }); res.send({ status: 200, message: 'Event created', }); } catch (err) { console.log(err); res.send(err); } } );
Grâce à cela, nous pouvons planifier dynamiquement des événements sur Google Agenda.
Jusqu'à présent, nous avons vu comment créer un événement simple sur Google Agenda. Dans cette section, nous verrons comment ajouter un lien Google Meet à cet événement !
Pour cela, nous allons mettre à jour l'objet événement que nous avons créé dans la section précédente. Nous allons ajouter une propriété conferenceData
pour spécifier la demande de création d'un lien Google Meet.
conferenceData: { createRequest: { requestId: uuid(), } },
Nous ajouterons également une propriété attendees
pour inviter des invités à l'événement. Voici un exemple simple :
attendees: [ {email: '[email protected]'}, ]
Maintenant, l’objet Event ressemble à ceci :
const event = { summary: 'Tech Talk with Arindam', location: 'Google Meet', description: "Demo event for Arindam's Blog Post.", start: { dateTime: "2024-03-14T19:30:00+05:30", timeZone: 'Asia/Kolkata' }, end: { dateTime: "2024-03-14T20:30:00+05:30", timeZone: 'Asia/Kolkata' }, colorId: 1, conferenceData: { createRequest: { requestId: uuid(), } }, attendees: [ {email: '[email protected]'}, ] };
Ensuite, dans l’étape d’insertion de l’événement, nous y ajouterons le paramètre conferenceDataVersion
.
const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1, resource: event });
Cela créera un événement avec un lien Google Meet. Nous pouvons également partager le lien en réponse comme ceci :
res.send({ status: 200, message: 'Event created', link: result.data.hangoutLink });
Nous avons donc presque terminé notre projet, il ne reste plus qu'à apporter la touche finale. Jusqu'à présent, notre projet ajoutera directement l'événement au calendrier des invités.
Cependant, pour les informer de ces événements, nous devons envoyer un courrier électronique. Pour cela, nous devons ajouter un paramètre sendUpdates: 'all',
dans la partie de création d'événement. Avec cela, l'application enverra automatiquement des courriers électroniques aux invités.
const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1 , sendUpdates: 'all', resource: event });
Grâce à cet ajout, notre projet gère désormais de manière transparente la création d'événements et les notifications par e-mail.
La partie codage de notre projet est terminée. Voyons maintenant si cela fonctionne ou non !
Pour cela, nous allons lancer le projet !
npm run start
Et nous avons démarré notre serveur sur le port 8000 ! Maintenant, nous allons accéder à la route http://localhost:8000/auth/ pour authentifier l'utilisateur. Cela nous redirigera vers quelque chose comme ceci :
Il demandera une autorisation pour l'application.
Il redirigera vers la route /auth/redirect
avec le paramètre de requête code
.
Après avoir authentifié avec succès l'utilisateur, nous accéderons à la route http://localhost:8000/create-event pour planifier l'événement.
Génial ! Cela signifie que notre événement est créé avec un lien Google Meet.
Pour vérifier que le processus de création d'événements fonctionne correctement, vérifions notre calendrier Google
Incroyable ! Notre événement est créé, ce qui signifie que le parcours de création d'événement fonctionne parfaitement ! Et nous avons également reçu un e-mail d'invitation :
Super ! Notre application fonctionne parfaitement !
Nous avons ainsi intégré Google Calendar à notre application Node.js. Dans les articles suivants, nous explorerons d'autres cas d'utilisation de Google Calendar.
D’ici là, restez à l’écoute !
Si vous avez trouvé cet article de blog utile, pensez à le partager avec d'autres personnes qui pourraient en bénéficier. Vous pouvez également me suivre pour plus de contenu sur Javascript, React et d'autres sujets de développement Web.
Pour une collaboration rémunérée, envoyez-moi un mail à : [email protected]
Connectez-vous avec moi sur Twitter , LinkedIn , YouTube et GitHub .
Merci d'avoir lu :)