paint-brush
Comment j'ai créé un planificateur d'événements dans NodeJspar@arindam1729
Nouvelle histoire

Comment j'ai créé un planificateur d'événements dans NodeJs

par Arindam Majumder 12m2024/08/18
Read on Terminal Reader

Trop long; Pour lire

Dans cet article, je vais vous montrer comment créer une application Node.js capable de créer des événements et d'envoyer automatiquement des invitations par e-mail avec des liens Google Meet. Nous utiliserons le framework Express pour créer le planificateur d'événements. Pour commencer, nous devons configurer un environnement node.js et configurer un serveur Express.
featured image - Comment j'ai créé un planificateur d'événements dans NodeJs
Arindam Majumder  HackerNoon profile picture

Introduction

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 ?

frustré sérieusement GIF

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 !

Configuration du projet :

1. Créer un projet Node.js :

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.

2. Installer les dépendances :

Maintenant, nous allons installer les dépendances requises de notre projet.

 npm install express googleapis dotenv


Cela installera les packages suivants :

  • express : un framework Web populaire pour Node.js


  • dotenv : charge les variables d'environnement à partir d'un fichier .env .


  • googleapis : permet d'accéder à diverses API Google

3. Configurer les variables d'environnement :

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

4. Créer un serveur Express :

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.

Configuration de la console Google

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).

Console Google Cloud

Maintenant, nous allons cliquer sur le bouton « Nouveau projet » pour démarrer un nouveau projet.

Nouvelle page de 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


Détails du nouveau projet

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.

API et services

Ensuite, nous allons activer l'API que nous utiliserons dans ce projet, c'est-à-dire l'API Google Calender.

API Google Agenda

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.

Écran de consentement OAuth


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.

Page d'informations sur l'application

Ensuite, nous devons définir la portée de l’application.

Page des portées

Dans les étendues, nous ajouterons les autorisations nécessaires telles que userinfo.email et userinfo.profile pour ce projet.

portées sélectionnées

Après cela, nous ajouterons un utilisateur de test à notre application.

Page d'utilisateur de test

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.

Tableau de bord de la console Google

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.

ID client OAuth

Nous avons également ajouté une URL de redirection. Pour ce projet, il s'agira de http://localhost:8000/auth/redirect .

URL de redirection

Et ensuite, nous obtiendrons les informations d’identification OAuth.

Client OAuth créé

Ensuite, nous allons créer des clés API.

Page de génération de clé 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

Authentification OAuth 2 :

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.'); } );

Planification d'événements sur Google Agenda

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.

Ajout du lien Google Meet :

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 });

Envoi d'un rappel aux participants :

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.

Test de l'application :

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 :

Page de connexion

Il demandera une autorisation pour l'application.

Page d'autorisation

Il redirigera vers la route /auth/redirect avec le paramètre de requête code .

/auth/route de redirection

Après avoir authentifié avec succès l'utilisateur, nous accéderons à la route http://localhost:8000/create-event pour planifier l'événement.

http://localhost:8000/create-event route

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

Google Agenda

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 :

Courrier d'invitation à l'événement.

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 !

Conclusion

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 :)

Merci