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?
¡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!
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.
Ahora, instalaremos las dependencias necesarias de nuestro proyecto.
npm install express googleapis dotenv
Esto instalará los siguientes paquetes:
.env
.
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
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.
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).
Ahora, haremos clic en el botón “Nuevo proyecto” para iniciar un nuevo 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.
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.
A continuación, habilitaremos la API que usaremos en este proyecto, es decir, la API de Google Calender.
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.
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.
A continuación, tenemos que definir el alcance de la aplicación.
En los ámbitos, agregaremos los permisos necesarios como userinfo.email
y userinfo.profile
para este proyecto.
Después de eso, agregaremos un usuario de prueba a nuestra aplicación.
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.
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.
Además, hemos añadido una URL de redireccionamiento. Para este proyecto, será http://localhost:8000/auth/redirect
.
Y luego obtendremos la credencial OAuth.
A continuación, crearemos 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.
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.'); } );
¡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.
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 });
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.
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:
Solicitará algún permiso para la aplicación.
Se redireccionará a la ruta /auth/redirect
con el parámetro de consulta code
.
Después de autenticar exitosamente al usuario, iremos a la ruta http://localhost:8000/create-event para programar el Evento.
¡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
¡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:
¡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!
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 :)