![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
С момента начала пандемии COVID мой календарь был заполнен стендапами, командными совещаниями и звонками клиентам.
Однако планирование мероприятия и приглашение гостей — скучные задачи. Однажды в пятницу, потратив на это слишком много времени, я подумал —
Почему я трачу на это так много времени?
Поэтому у меня возникла идея создать планировщик событий, чтобы упростить себе работу!
В этой статье я покажу вам, как создать приложение Node.js, которое может создавать мероприятия и автоматически рассылать приглашения по электронной почте со ссылками Google Meet.
Взволнованы? Я тоже.
Итак, не откладывая больше!
НАЧНЕМ!
Чтобы запустить наш проект, нам нужно настроить среду Node.js. Итак, давайте создадим проект Node. Запустите следующую команду в Терминале.
npm init -y
Это инициализирует новый проект Node.js.
Теперь установим необходимые зависимости нашего проекта.
npm install express googleapis dotenv
Это установит следующие пакеты:
.env
.
Далее мы создадим папку .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
Теперь мы создадим файл 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 Cloud Console .
Затем мы получим эту панель инструментов. (Я уже создал один проект, поэтому я получаю это, вы можете получить что-то другое).
Теперь нажмем кнопку «Новый проект», чтобы начать новый проект.
Далее у нас получится что-то вроде этого. Здесь мы добавим название и организацию нашего проекта. Для этого проекта я оставлю это как "Mail-integration-Demo". Затем мы нажмем кнопку "Создать", чтобы продолжить
Далее, в боковой панели навигации, мы получим "API и службы". В этом разделе есть подменю для включения API и служб. Щелкните его, чтобы продолжить.
Далее мы включим API, который будем использовать в этом проекте, т. е. API Google Calender.
После этого мы перейдем на экран согласия OAuth. Здесь мы выберем тип пользователя как Внешний. И нажмем кнопку Создать, чтобы продолжить.
Затем мы перейдем на страницу регистрации приложения. Здесь мы добавим больше информации о нашем приложении. Начнем с добавления названия нашего приложения и адреса электронной почты для поддержки пользователей.
Этот проект я назову «Интеграция почты Ариндама» и буду использовать свой собственный адрес электронной почты для поддержки.
Далее нам необходимо определить сферу применения Приложения.
В разделе «Области действия» мы добавим необходимые разрешения, такие как userinfo.email
и userinfo.profile
для этого проекта.
После этого мы добавим в наше приложение одного тестового пользователя.
Вот и все. Наше приложение зарегистрировано на платформе.
Теперь мы создадим наш секретный идентификатор клиента OAuth. Для этого перейдем к части Create Credential.
Здесь мы добавим тип нашего приложения и его имя. Для этого проекта это веб-приложение, и его имя — Arindam's Mail Demo.
Также мы добавили один URL перенаправления. Для этого проекта это будет http://localhost:8000/auth/redirect
.
И затем мы получим учетные данные OAuth.
Далее мы создадим ключи API.
После этого мы обновим наш файл .env
, добавив в него ключи API и учетные данные OAuth, которые мы сгенерировали ранее.
Итак, мы настроили нашу консоль Google Cloud для этого проекта, теперь перейдем к следующему разделу.
До сих пор мы выполнили базовую настройку проекта. Теперь мы интегрируем аутентификацию 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!
Для начала мы инициализируем клиент 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 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
.
После успешной аутентификации пользователя мы перейдем по маршруту http://localhost:8000/create-event, чтобы запланировать событие.
Круто! Это значит, что наше мероприятие создано с помощью ссылки Google Meet.
Чтобы убедиться, что процесс создания событий работает правильно, давайте проверим наш Google Календарь.
Удивительно! Наше событие создано, что означает, что маршрут создания событий работает отлично! И мы также получили письмо с приглашением:
Отлично! Наше приложение работает отлично!
С этим мы интегрировали Google Calendar в наше приложение Node.js. В следующих статьях мы рассмотрим больше вариантов использования Google Calendar.
До тех пор оставайтесь с нами!
Если вы нашли этот пост в блоге полезным, пожалуйста, рассмотрите возможность поделиться им с другими, кому он может быть полезен. Вы также можете подписаться на меня, чтобы получать больше контента по Javascript, React и другим темам веб-разработки.
Для платного сотрудничества пишите мне на адрес: [email protected]
Свяжитесь со мной в Twitter , LinkedIn , YouTube и GitHub .
Спасибо за чтение :)