paint-brush
Cómo construí un programador de eventos en NodeJspor@arindam1729
306 lecturas
306 lecturas

Cómo construí un programador de eventos en NodeJs

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

Demasiado Largo; Para Leer

En este artículo, te mostraré cómo crear una aplicación Node.js que pueda crear eventos y enviar automáticamente invitaciones por correo electrónico con enlaces de Google Meet. Usaremos el marco Express para crear el programador de eventos. Para comenzar, debemos configurar un entorno Node.js y configurar un servidor Express.
featured image - Cómo construí un programador de eventos en NodeJs
Arindam Majumder  HackerNoon profile picture

Introducción

Desde que comenzó el COVID, mi calendario ha estado lleno de reuniones de pie, reuniones de equipo y llamadas a clientes.


Sin embargo, programar un evento e invitar a los invitados son tareas aburridas. Un viernes, después de dedicarle demasiado tiempo, pensé:

¿Por qué dedico tanto tiempo a esto?

GIF frustrado seriamente

¡Así se me ocurrió la idea de crear un programador de eventos para simplificar mi trabajo!


En este artículo, te mostraré cómo crear una aplicación Nodejs que pueda crear eventos y enviar automáticamente invitaciones por correo electrónico con enlaces de Google Meet.


¿Emocionado? Yo también.


Así que, ¡sin demorarnos más!


¡Empecemos!

Configuración del proyecto:

1. Crear un proyecto Node.js:

Para iniciar nuestro proyecto, necesitamos configurar un entorno Node.js. Por lo tanto, vamos a crear un proyecto de nodo. Ejecute el siguiente comando en la terminal.

 npm init -y


Esto inicializará un nuevo proyecto Node.js.

2. Instalar dependencias:

Ahora, instalaremos las dependencias necesarias de nuestro proyecto.

 npm install express googleapis dotenv


Esto instalará los siguientes paquetes:

  • express: un framework web popular para Node.js


  • dotenv: carga variables de entorno desde un archivo .env .


  • googleapis: proporciona acceso a varias API de Google

3. Configurar variables de entorno:

A continuación, crearemos una carpeta .env para almacenar de forma segura nuestra información confidencial, como las credenciales de 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. Crear servidor Express:

Ahora, crearemos un archivo index.js en el directorio raíz y configuraremos un servidor express básico. Vea el código siguiente:

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

Aquí, usamos el paquete "dotenv" para acceder al número de PUERTO desde el archivo .env .


En la parte superior del proyecto, estamos cargando variables de entorno usando dotenv.config() para que sea accesible en todo el archivo.

Configuración de Google Console

Primero, iremos a la consola de Google Cloud .


Luego obtendremos este Tablero. (Anteriormente he creado un proyecto, por eso obtengo esto, es posible que obtengas algo más).

Consola de Google Cloud

Ahora, haremos clic en el botón “Nuevo proyecto” para iniciar un nuevo proyecto.

Nueva página del proyecto


A continuación, obtendremos algo como esto. Aquí, agregaremos el nombre y la organización de nuestro proyecto. Para este proyecto, lo mantendré como "Mail-integration-Demo". Luego, haremos clic en el botón Crear para continuar.


Nuevos detalles del proyecto

A continuación, en la barra de navegación lateral, veremos "API y servicios". Dentro de esta sección, hay un submenú para habilitar API y servicios. Haremos clic en él para continuar.

API y servicios

A continuación, habilitaremos la API que usaremos en este proyecto, es decir, la API de Google Calender.

API de Google Calendar

Después de eso, iremos a la pantalla de consentimiento de OAuth. Aquí, seleccionaremos el tipo de usuario como Externo y presionaremos el botón Crear para continuar.

Pantalla de consentimiento de OAuth


Luego, iremos a la página de registro de la aplicación. Aquí agregaremos más información sobre nuestra aplicación. Comenzaremos agregando el nombre de nuestra aplicación y una dirección de correo electrónico para soporte al usuario.


Para este proyecto, lo llamaré "Integración de correo de Arindam" y utilizaré mi propia dirección de correo electrónico para brindar soporte.

Página de información de la aplicación

A continuación, tenemos que definir el alcance de la aplicación.

Página de alcances

En los ámbitos, agregaremos los permisos necesarios como userinfo.email y userinfo.profile para este proyecto.

ámbitos seleccionados

Después de eso, agregaremos un usuario de prueba a nuestra aplicación.

Página de usuario de prueba

Eso es todo. Nuestra aplicación está registrada en la plataforma.


Ahora, crearemos nuestro secreto de ID de cliente de OAuth. Para ello, pasaremos a la parte Crear credencial.

Panel de control de la consola de Google

Aquí agregaremos el tipo de nuestra aplicación y su nombre. En este proyecto, se trata de una aplicación web y su nombre es Arindam's Mail Demo.

ID de cliente de OAuth

Además, hemos añadido una URL de redireccionamiento. Para este proyecto, será http://localhost:8000/auth/redirect .

URL de redireccionamiento

Y luego obtendremos la credencial OAuth.

Cliente OAuth creado

A continuación, crearemos claves API.

Página de generación de claves API

Después de hacer todo esto, actualizaremos nuestro archivo .env con las claves API y las credenciales OAuth que generamos anteriormente.


Con esto, hemos configurado nuestra consola de Google Cloud para este proyecto, ahora pasemos a la siguiente sección.

Autenticación OAuth 2:

Hasta ahora, hemos realizado la configuración básica de nuestro proyecto. Ahora, integraremos la autenticación OAuth2 en nuestro proyecto. Esto permite que nuestra aplicación interactúe de forma segura con los servicios de Google. Para ello, primero, importaremos los paquetes necesarios en el archivo index.js .

 const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv');


Luego definiremos el alcance de acceso requerido para la API de Google Calendar.

 const scopes = ['https://www.googleapis.com/auth/calendar'];


A continuación, configuraremos el cliente OAuth 2 utilizando las credenciales que hemos almacenado en el archivo .env .

 // OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL );


Después de la configuración de OAuth 2, crearemos una ruta para autenticar a nuestros usuarios.

 app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } );

Cuando nuestros usuarios accedan a esta ruta, serán redirigidos a la página de autenticación de Google donde les solicitará permisos específicos para nuestra aplicación.


Después de una autenticación exitosa, Google redirigirá al usuario a nuestra URL de redireccionamiento ( /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.'); } );


Aquí, obtenemos los tokens de actualización de la consulta y los almacenamos como credenciales en oauth2Client . Estas credenciales nos ayudarán a realizar solicitudes a la API de Google Calendar.


Aquí está el código completo para 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.'); } );

Programación de eventos en Google Calendar

¡Aquí viene la parte más importante! En esta sección, programaremos un evento en Google Calendar.


Para comenzar, inicializaremos el cliente API de Google Calendar.

 const calendar = google.calendar({ version: 'v3', auth: oauth2Client });


A continuación, crearemos un objeto de evento donde agregaremos todos los detalles del evento, como el resumen, la ubicación, la hora de inicio y finalización, 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' }, };

Después de eso crearemos una Ruta ( /create-event ) donde crearemos el evento.


Aquí estamos insertando un evento en el Calendario del usuario usando el método 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); } } );

Con esto podremos programar eventos dinámicamente en Google Calendar.

Cómo agregar un enlace de Google Meet:

Hasta ahora, hemos explorado cómo crear un evento simple en Google Calendar. En esta sección, exploraremos cómo agregar un enlace de Google Meet a ese evento.


Para ello, actualizaremos el objeto de evento que hemos creado en la sección anterior. Agregaremos una propiedad conferenceData para especificar la solicitud de creación de un enlace de Google Meet.

 conferenceData: { createRequest: { requestId: uuid(), } },


También agregaremos una propiedad attendees para invitar a los invitados al evento. A continuación, se muestra un ejemplo sencillo:

 attendees: [ {email: '[email protected]'}, ]


Ahora, el objeto Evento se ve así:

 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]'}, ] };


A continuación, en el paso de inserción del evento, le agregaremos el parámetro conferenceDataVersion .

 const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1, resource: event });


Esto creará un evento con un enlace de Google Meet. También podemos compartir el enlace como respuesta, de esta manera:

 res.send({ status: 200, message: 'Event created', link: result.data.hangoutLink });

Envío de recordatorio a los asistentes:

Ya casi hemos terminado con nuestro proyecto, solo nos queda darle los toques finales. Hasta ahora, nuestro proyecto agregará directamente el evento al calendario de los invitados.


Sin embargo, para notificarles sobre estos eventos, debemos enviar un correo electrónico. Para ello, debemos agregar un parámetro sendUpdates: 'all', en la parte de creación del evento. Con esto, la aplicación enviará automáticamente correos electrónicos a los invitados.

 const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1 , sendUpdates: 'all', resource: event });

Con esta incorporación, nuestro proyecto ahora gestiona sin problemas tanto la creación de eventos como las notificaciones por correo electrónico.

Probando la aplicación:

La parte de codificación de nuestro proyecto está completa. ¡Ahora veamos si funciona o no!


¡Para eso comenzamos el proyecto!

 npm run start


¡Y ya hemos iniciado nuestro servidor en el puerto 8000! Ahora, iremos a la ruta http://localhost:8000/auth/ para autenticar al usuario. Nos redireccionará a algo como esto:

Página de inicio de sesión

Solicitará algún permiso para la aplicación.

Página de permisos

Se redireccionará a la ruta /auth/redirect con el parámetro de consulta code .

/auth/redireccionar ruta

Después de autenticar exitosamente al usuario, iremos a la ruta http://localhost:8000/create-event para programar el Evento.

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

¡Genial! Significa que nuestro evento se creó con un enlace de Google Meet.


Para verificar que el proceso de creación de eventos está funcionando correctamente, revisemos nuestro Calendario de Google

Calendario de Google

¡Increíble! Nuestro evento se ha creado, lo que significa que la ruta de creación de eventos funciona perfectamente. Además, recibimos un correo electrónico de invitación:

Correo de invitación a eventos.

¡Genial! ¡Nuestra aplicación está funcionando perfectamente!


Con esto, hemos integrado Google Calendar en nuestra aplicación Node.js. En los siguientes artículos, exploraremos más casos de uso con Google Calendar.


Hasta entonces, ¡estad atentos!

Conclusión

Si esta publicación del blog te resultó útil, considera compartirla con otras personas a quienes les pueda resultar útil. También puedes seguirme para obtener más contenido sobre Javascript, React y otros temas de desarrollo web.


Para colaboración paga, envíeme un correo electrónico a: [email protected]


Conéctate conmigo en Twitter , LinkedIn , YouTube y GitHub .


Gracias por leer :)

Gracias