![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
自疫情爆发以来,我的日程表上排满了站立会议、团队会议和客户电话。
然而,安排活动和邀请客人是一件无聊的事情。一个星期五,在这些事情上花了太多时间后,我想——
我为什么要在这上面花这么多时间?
因此,我有了创建一个事件调度程序来简化我的工作的想法!
在本文中,我将向您展示如何创建一个 Nodejs 应用程序,该应用程序可以创建事件并自动发送带有 Google Meet 链接的电子邮件邀请。
兴奋吗?我也是。
所以,不要再拖延了!
让我们开始吧!
要启动我们的项目,我们需要设置一个 Node.js 环境。因此,让我们创建一个节点项目。在终端中运行以下命令。
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
文件访问 PORT 号。
在项目的顶部,我们使用dotenv.config()
加载环境变量,以使其在整个文件中可访问。
首先,我们将进入Google Cloud Console 。
然后我们将获得这个仪表板。(我之前已经创建了一个项目,这就是我获得它的原因,您可能会获得其他东西)。
现在,我们点击“新项目”按钮来开始一个新项目。
接下来,我们将得到类似这样的结果。在这里,我们将添加项目的名称和组织。对于这个项目,我将其保留为“Mail-integration-Demo”。然后我们将单击创建按钮继续
接下来,在侧面导航栏中,我们会看到“API 和服务”。在此部分中,有一个子菜单用于启用 API 和服务。我们点击它继续。
接下来,我们将启用在此项目中使用的 API,即 Google Calender API。
之后,我们将进入 OAuth 同意屏幕。在这里,我们将选择用户类型为外部。然后我们将按创建按钮继续。
然后,我们将进入应用程序注册页面。在这里,我们将添加有关应用程序的更多信息。我们首先添加应用程序的名称和用户支持的电子邮件地址。
对于这个项目,我将其命名为“Arindam 的邮件集成”,并使用我自己的电子邮件地址来提供支持。
接下来,我们必须定义应用程序的范围。
在范围中,我们将为该项目添加必要的权限,例如userinfo.email
和userinfo.profile
。
之后,我们将向我们的应用程序添加一个测试用户。
就这样,我们的应用程序就注册到平台上了。
现在,我们将创建 OAuth 客户端 ID 密钥。为此,我们将转到“创建凭据”部分。
在这里,我们将添加应用程序的类型及其名称。对于这个项目,它是一个 Web 应用程序,其名称为 Arindam's Mail Demo。
此外,我们添加了一个重定向 URL。对于本项目,它将是http://localhost:8000/auth/redirect
。
然后我们将获得 OAuth 凭证。
接下来,我们将创建 API 密钥。
完成所有这些操作后,我们将使用之前生成的 API 密钥和 OAuth 凭据更新我们的.env
文件。
这样,我们就为这个项目设置了 Google Cloud 控制台,现在让我们进入下一部分
到目前为止,我们已经完成了基本的项目设置。现在,我们将把 OAuth2 身份验证集成到我们的项目中。这使我们的应用程序能够安全地与 Google 服务交互。为此,首先,我们将所需的包导入index.js
文件。
const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv');
然后我们将定义 Google 日历 API 所需的访问范围。
const scopes = ['https://www.googleapis.com/auth/calendar'];
接下来,我们将使用存储在.env
文件中的凭据配置 OAuth 2 客户端。
// 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
中。这些凭据将帮助我们向 Google 日历 API 发出请求。
以下是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 日历上安排活动!
首先,我们将初始化 Google 日历 API 客户端。
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 日历上创建一个简单的活动。在本节中,我们将探索如何将 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 });
所以,我们的项目几乎已经完成了,只剩下最后的润色。到目前为止,我们的项目将直接将活动添加到受邀嘉宾的日历中。
但是,为了通知他们这些事件,我们必须发送一封邮件。为此,我们必须在事件创建部分添加一个参数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/路由来验证用户身份。它将把我们重定向到如下位置:
它将为应用程序请求一些权限。
它将使用code
查询参数重定向到/auth/redirect
路由。
成功验证用户后,我们将转到http://localhost:8000/create-event路由来安排事件。
太棒了!这意味着我们的活动是使用 Google Meet 链接创建的。
为了验证事件创建过程是否正常运行,让我们检查一下 Google 日历
太棒了!我们的活动创建成功了,这意味着活动创建路线运行正常!我们还收到了一封邀请邮件:
太棒了!我们的应用程序运行完美!
这样,我们就将 Google 日历集成到了我们的 Node.js 应用中。在接下来的文章中,我们将探索更多使用 Google 日历的案例。
至此,敬请关注!
如果您发现这篇博文有用,请考虑与可能受益的其他人分享。您也可以关注我,了解有关 Javascript、React 和其他 Web 开发主题的更多内容。
对于付费合作,请发邮件至: [email protected]
通过Twitter 、 LinkedIn 、 YouTube和GitHub与我联系。
感谢您的阅读:)