gpt4 book ai didi

node.js - users.watch(在 gmail google api 中)如何收听通知?

转载 作者:行者123 更新时间:2023-12-02 01:38:55 24 4
gpt4 key购买 nike

我很困惑应该如何实现 gmail API 中的监视功能来接收 push notificatons在 node.js 脚本中。我是否应该在无限循环或其他方式中调用该方法,以便它在调用后不会停止收听电子邮件通知?

这是我在 node.js 中编写的示例代码:

const getEmailNotification = () => {
return new Promise(async (resolve, reject) => {
try{
let auth = await authenticate();
const gmail = google.gmail({version: 'v1', auth});
await gmail.users.stop({
userId: '<email id>'
});
let watchResponse = await gmail.users.watch({
userId: '<email id>',
labelIds: ['INBOX'],
topicName: 'projects/<projectName>/topics/<topicName>'
})
return resolve(watchResponse);
} catch(err){
return reject(`Some error occurred`);
}
})

谢谢!

最佳答案

总结

要通过 PUB/SUB 接收推送通知,您需要创建一个网络钩子(Hook)来接收它们。这是什么意思?您需要一个 WEB 应用程序或任何类型的服务来公开可以接收通知的 URL。

如推送中所述subscription documentation :

  1. The Pub/Sub server sends each message as an HTTPS request to the subscriber application at a pre-configured endpoint.

  2. The endpoint acknowledges the message by returning an HTTP success status code. A non-success response indicates that the message should be resent.

设置观看通知的 channel 可以概括为以下步骤(the documentation 你指的是它们):

  1. Select/Create Google Cloud Console 中的一个项目.
  2. 创建 new PUB/SUB topic
  3. 创建 subscription (PUSH)为那个主题。
  4. 添加necessary permissions ,在这种情况下,将 gmail-api-push@system.gserviceaccount.com 添加为 Pub/Sub Publisher
  5. 通过Users.watch() 指明您希望它收听什么类型的邮件方法(这是您在脚本中所做的)。

例子

我给你一个使用 Apps Script 的例子(这是一种简单的可视化方法,但这可以从任何类型的 WEB 应用程序实现,因为你使用的是 Node.js 我想你熟悉 Express.js或相关框架)。

首先我创建了一个 new Google Apps Script project ,这将是我的网络 Hook 。基本上我希望它在我之前创建的 Google 文档中记录所有 HTTP/POST 请求。为此,我在 Express 中使用了等于 app.post()doPost()。如果您想进一步了解 Apps Script 的工作原理,可以访问 this link ), 但这不是主题。

代码.gs
const doPost = (e) => {
const doc = DocumentApp.openById(<DOC_ID>)
doc.getBody().appendParagraph(JSON.stringify(e, null, 2))
}

后来我做了一个new implementation as a Web App在我说任何人都可以访问的地方,我记下了 URL 以备后用。这类似于将您的 Node.js 应用程序部署到互联网。

我在 Cloud Console 中选择了一个项目,如 Prerequisites of Cloud Pub/Sub 中所示.

在这个项目中,我创建了一个 new topic我称之为 GmailAPIPush。之后,单击 Add Main(在主题部分的右侧栏中)并添加 gmail-api-push@system.gserviceaccount.comPub/子发布者 角色。这是 requirement授予 Gmail 发布通知的权限。

在同一个项目中,我创建了一个订阅。我将其指定为 Push 类型,并添加我之前创建的 Web App 的 URL。

这是最关键的部分,它决定了您希望应用程序如何工作。如果您想知道哪种类型的订阅最适合您的需求(PUSH 或 PULL),您有一个 detailed documentation这将帮助您在这两种类型之间做出选择。

最后我们剩下最简单的部分,配置 Gmail 帐户以在邮箱上发送更新。我将从 Apps 脚本执行此操作,但它与 Node 完全相同。

const watchUserGmail = () => {
const request = {
'labelIds': ['INBOX'],
'topicName': 'projects/my_project_name/topics/GmailAPIPush'
}
Gmail.Users.watch(request, 'me')
}

函数执行后,我发送一条测试消息,瞧,通知出现在我的文档中。

回到你所揭露的案例,我将尝试用一个比喻来解释。想象一下,您有一个邮箱,正在等待一封非常重要的信件。因为你很紧张,你每 5 分钟检查一次信件是否到达(类似于你用 setInterval 提出的建议),这使得你大部分时间去检查你的邮箱,那里不是什么新鲜事。但是,每次 postman 来时,您都会训练您的狗吠叫(推送通知),因此您只有在知道有新信件时才去检查邮箱。

关于node.js - users.watch(在 gmail google api 中)如何收听通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71924157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com