首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >users.watch (在google中)是如何监听通知的?

users.watch (在google中)是如何监听通知的?
EN

Stack Overflow用户
提问于 2022-04-19 11:24:18
回答 1查看 982关注 0票数 2

对于如何实现gmail中的监视功能以在推送通知脚本中接收node.js,我感到困惑。我是否应该在无限循环中调用该方法,这样它就不会在调用之后停止监听一次电子邮件通知?

下面是我用node.js编写的示例代码:

代码语言:javascript
运行
复制
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`);
    }
})

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-19 15:26:03

摘要

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

如Push 订阅文件中所述

  1. Pub/Sub服务器将每条消息作为HTTPS请求发送到预配置端点的订阅者应用程序。
  2. 端点通过返回HTTP成功状态代码来确认消息。一个不成功的响应表示消息应该被憎恨。

设置一个监视通知的通道,可以在以下步骤中进行总结(您所指的文献资料指示它们):

  1. 选择/创建Google控制台中的一个项目。
  2. 创建一个新的酒吧/分主题
  3. 为该主题创建一个订阅(推送)
  4. 添加必要权限,在本例中将gmail-api-push@system.gserviceaccount.com添加为Pub/Sub Publisher
  5. 通过Users.watch()方法指出您希望它侦听的邮件类型(这是您在脚本中要做的)。

示例

我给出了一个使用Apps脚本的示例(可视化它是一种简单的方法,但这可以通过任何类型的WEB应用程序实现,因为您正在使用Node.js --我想您已经熟悉了Express.js或相关框架)。

首先,我创建了一个新的Google脚本项目,这将是我的网络钩子。基本上,我希望它能够记录我之前创建的Google中的所有HTTP/POST请求。为此,我在Express中使用等于app.post()app.post()。如果您想了解更多关于Apps脚本如何工作的信息,可以访问此链接),但这不是主要的主题。

Code.gs

代码语言:javascript
运行
复制
const doPost = (e) => {
  const doc = DocumentApp.openById(<DOC_ID>)
  doc.getBody().appendParagraph(JSON.stringify(e, null, 2))
}

后来我做了一个作为Web应用程序的新实现,在这里我说任何人都可以访问它,我写下了以后的网址。这将类似于将您的Node.js应用程序部署到internet。

我在云控制台中选择一个项目,如云Pub/Sub的先决条件中所示。

在这个项目中,我创建了一个名为新话题GmailAPIPush。然后,在Add Main中单击(在Topics部分的右栏)并添加带有Pub/Sub Publisher角色的gmail-api-push@system.gserviceaccount.com。这是一个要求,它授予Gmail发布通知的权限。

在同一个项目中,我创建一个订阅。我告诉它是推送类型,并添加我之前创建的Web应用程序的URL。

这是最关键的部分,它决定了您希望您的应用程序如何工作。如果您想知道哪种类型的订阅最适合您的需要(推或拉),您有一个详细文件,它将帮助您在这两种类型之间进行选择。

最后,剩下最简单的部分,配置Gmail帐户以在邮箱上发送更新。我将通过Apps脚本来完成这个任务,但是它和Node完全一样。

代码语言:javascript
运行
复制
const watchUserGmail = () => {
  const request = {
    'labelIds': ['INBOX'],
    'topicName': 'projects/my_project_name/topics/GmailAPIPush'
  }
  Gmail.Users.watch(request, 'me')
}

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

回到你揭露的案例,我将尝试用一个比喻来解释它。想象一下,你有一个邮箱,而你在等待一封非常重要的信。由于你很紧张,你每5分钟去检查一次信是否到了(就像你用setInterval提议的那样),这使得大多数时候你去检查邮箱,没有什么新的东西。然而,每次邮递员来的时候,你都会训练你的狗叫(推送通知),所以只有当你知道你有新的信件时,你才去检查你的邮箱。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71924157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档