paint-brush
Как я создал планировщик событий в NodeJsк@arindam1729
306 чтения
306 чтения

Как я создал планировщик событий в NodeJs

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

Слишком долго; Читать

В этой статье я покажу вам, как создать приложение Node.js, которое может создавать события и автоматически отправлять приглашения по электронной почте со ссылками Google Meet. Мы будем использовать фреймворк Express для создания планировщика событий. Для начала нам нужно настроить среду node.js и настроить сервер Express.
featured image - Как я создал планировщик событий в NodeJs
Arindam Majumder  HackerNoon profile picture

Введение

С момента начала пандемии COVID мой календарь был заполнен стендапами, командными совещаниями и звонками клиентам.


Однако планирование мероприятия и приглашение гостей — скучные задачи. Однажды в пятницу, потратив на это слишком много времени, я подумал —

Почему я трачу на это так много времени?

расстроен серьезно GIF

Поэтому у меня возникла идея создать планировщик событий, чтобы упростить себе работу!


В этой статье я покажу вам, как создать приложение Node.js, которое может создавать мероприятия и автоматически рассылать приглашения по электронной почте со ссылками Google Meet.


Взволнованы? Я тоже.


Итак, не откладывая больше!


НАЧНЕМ!

Настройка проекта:

1. Создайте проект Node.js:

Чтобы запустить наш проект, нам нужно настроить среду Node.js. Итак, давайте создадим проект Node. Запустите следующую команду в Терминале.

 npm init -y


Это инициализирует новый проект Node.js.

2. Установите зависимости:

Теперь установим необходимые зависимости нашего проекта.

 npm install express googleapis dotenv


Это установит следующие пакеты:

  • express: популярный веб-фреймворк для Node.js


  • dotenv: загружает переменные среды из файла .env .


  • googleapis: обеспечивает доступ к различным API Google

3. Настройте переменные среды:

Далее мы создадим папку .env для безопасного хранения нашей конфиденциальной информации, такой как учетные данные 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. Создать Express Server:

Теперь мы создадим файл index.js в корневом каталоге и настроим базовый сервер Express. Смотрите следующий код:

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

Здесь мы используем пакет «dotenv» для доступа к номеру ПОРТА из файла .env .


В верхней части проекта мы загружаем переменные среды с помощью dotenv.config() чтобы сделать их доступными во всем файле.

Настройка Google Console

Сначала перейдем в Google Cloud Console .


Затем мы получим эту панель инструментов. (Я уже создал один проект, поэтому я получаю это, вы можете получить что-то другое).

Консоль Google Cloud

Теперь нажмем кнопку «Новый проект», чтобы начать новый проект.

Новая страница проекта


Далее у нас получится что-то вроде этого. Здесь мы добавим название и организацию нашего проекта. Для этого проекта я оставлю это как "Mail-integration-Demo". Затем мы нажмем кнопку "Создать", чтобы продолжить


Подробности нового проекта

Далее, в боковой панели навигации, мы получим "API и службы". В этом разделе есть подменю для включения API и служб. Щелкните его, чтобы продолжить.

API и сервисы

Далее мы включим API, который будем использовать в этом проекте, т. е. API Google Calender.

API Google Календаря

После этого мы перейдем на экран согласия OAuth. Здесь мы выберем тип пользователя как Внешний. И нажмем кнопку Создать, чтобы продолжить.

Экран согласия OAuth


Затем мы перейдем на страницу регистрации приложения. Здесь мы добавим больше информации о нашем приложении. Начнем с добавления названия нашего приложения и адреса электронной почты для поддержки пользователей.


Этот проект я назову «Интеграция почты Ариндама» и буду использовать свой собственный адрес электронной почты для поддержки.

Страница информации о приложении

Далее нам необходимо определить сферу применения Приложения.

Страница областей применения

В разделе «Области действия» мы добавим необходимые разрешения, такие как userinfo.email и userinfo.profile для этого проекта.

выбранные области

После этого мы добавим в наше приложение одного тестового пользователя.

Тестовая страница пользователя

Вот и все. Наше приложение зарегистрировано на платформе.


Теперь мы создадим наш секретный идентификатор клиента OAuth. Для этого перейдем к части Create Credential.

Панель инструментов консоли Google

Здесь мы добавим тип нашего приложения и его имя. Для этого проекта это веб-приложение, и его имя — Arindam's Mail Demo.

Идентификатор клиента OAuth

Также мы добавили один URL перенаправления. Для этого проекта это будет http://localhost:8000/auth/redirect .

Перенаправление URL-адресов

И затем мы получим учетные данные OAuth.

Клиент OAuth создан

Далее мы создадим ключи API.

Страница генерации ключа API

После этого мы обновим наш файл .env , добавив в него ключи API и учетные данные OAuth, которые мы сгенерировали ранее.


Итак, мы настроили нашу консоль Google Cloud для этого проекта, теперь перейдем к следующему разделу.

Аутентификация OAuth 2:

До сих пор мы выполнили базовую настройку проекта. Теперь мы интегрируем аутентификацию OAuth2 в наш проект. Это позволит нашему приложению безопасно взаимодействовать с сервисами Google. Для этого сначала импортируем необходимые пакеты в файл index.js .

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


Затем мы определим объем доступа, необходимый для API Календаря Google.

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


Далее мы настроим клиент OAuth 2, используя учетные данные, которые мы сохранили в файле .env .

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


После настройки OAuth 2 мы создадим маршрут для аутентификации наших пользователей.

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

Когда наши пользователи перейдут по этому маршруту, они будут перенаправлены на страницу аутентификации Google, где будут запрошены определенные разрешения для нашего приложения.


После успешной аутентификации Google перенаправит пользователя на наш URL-адрес перенаправления ( /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.'); } );


Здесь мы получаем токены обновления из запроса и сохраняем их как учетные данные в oauth2Client . Эти учетные данные помогут нам делать запросы к API Google Calendar.


Вот полный код 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.'); } );

Планирование событий в Google Calendar

А вот и самая важная часть! В этом разделе мы запланируем событие в Google Calendar!


Для начала мы инициализируем клиент API Календаря Google.

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


Далее мы создадим объект события, в который добавим все подробности события, такие как краткое описание, местоположение, время начала и окончания и т. д.

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

После этого мы создадим маршрут ( /create-event ), где мы создадим событие.


Здесь мы вставляем событие в календарь пользователя с помощью метода 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); } } );

Благодаря этому мы можем динамически планировать события в Google Календаре.

Добавление ссылки Google Meet:

До сих пор мы изучали, как создать простое событие в Google Calendar. В этом разделе мы рассмотрим, как добавить ссылку Google Meet к этому событию!


Для этого мы обновим объект события, который мы создали в предыдущем разделе. Мы добавим свойство conferenceData , чтобы указать запрос на создание ссылки Google Meet.

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


Мы также добавим свойство attendees , чтобы приглашать гостей на мероприятие. Вот простой пример:

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


Теперь объект Event выглядит так:

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


Далее, на этапе вставки события, мы добавим к нему параметр conferenceDataVersion .

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


Это создаст событие со ссылкой Google Meet. Мы также можем поделиться ссылкой в качестве ответа, например:

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

Напоминание участникам:

Итак, мы почти закончили наш проект, остался последний штрих. До этого момента наш проект будет напрямую добавлять событие в календарь приглашенных гостей.


Однако, чтобы уведомить их об этих событиях, нам нужно отправить одно Mail. Для этого нам нужно добавить один параметр sendUpdates: 'all', в часть создания события. С этим приложение будет автоматически отправлять электронные письма приглашенным гостям.

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

Благодаря этому дополнению наш проект теперь без проблем обрабатывает как создание событий, так и уведомления по электронной почте.

Тестирование приложения:

Часть кода нашего проекта завершена. Теперь давайте посмотрим, работает он или нет!


Для этого мы начнем проект!

 npm run start


И мы запустили наш сервер на порту 8000! Теперь перейдем на маршрут http://localhost:8000/auth/ для аутентификации пользователя. Он перенаправит нас на что-то вроде этого:

Страница входа

Для приложения потребуется некоторое разрешение.

Страница разрешений

Он выполнит перенаправление на маршрут /auth/redirect с параметром запроса code .

/auth/redirect маршрут

После успешной аутентификации пользователя мы перейдем по маршруту http://localhost:8000/create-event, чтобы запланировать событие.

http://localhost:8000/create-event маршрут

Круто! Это значит, что наше мероприятие создано с помощью ссылки Google Meet.


Чтобы убедиться, что процесс создания событий работает правильно, давайте проверим наш Google Календарь.

Google Календарь

Удивительно! Наше событие создано, что означает, что маршрут создания событий работает отлично! И мы также получили письмо с приглашением:

Письмо с приглашением на мероприятие.

Отлично! Наше приложение работает отлично!


С этим мы интегрировали Google Calendar в наше приложение Node.js. В следующих статьях мы рассмотрим больше вариантов использования Google Calendar.


До тех пор оставайтесь с нами!

Заключение

Если вы нашли этот пост в блоге полезным, пожалуйста, рассмотрите возможность поделиться им с другими, кому он может быть полезен. Вы также можете подписаться на меня, чтобы получать больше контента по Javascript, React и другим темам веб-разработки.


Для платного сотрудничества пишите мне на адрес: [email protected]


Свяжитесь со мной в Twitter , LinkedIn , YouTube и GitHub .


Спасибо за чтение :)

Спасибо