当前位置: 首页 > 知识库问答 >
问题:

使用Google Cloud PubSub不断收到“向Cloud PubSub发送测试消息错误”

蓝昊天
2023-03-14

我正在尝试设置谷歌的push PubSub到我的服务器来接收Gmail推送通知。

我正在获取以下作用域:

它可以创建一个主题,订阅该主题,授予访问该主题的Gmail API的权限,但当我试图查看收件箱时,它失败了。我遵循了以下指南:https://developers.google.com/gmail/api/guides/push,这是我用来执行上述步骤的代码:

var rp = require('request-promise');

// Step 1. Create a topic
rp({
   url: 'https://pubsub.googleapis.com/v1/projects/projectId/topics/mailSync',
   method: 'PUT',
   headers: {
     Authorization: 'Bearer accessToken'
   }
 }).then(function(response) {
   console.log(response);
   res.send(response);
 })
 .catch(function(error) {
   console.log(error.message);
   res.send(error.message);
 });

// Step 2. Create a subscription:
rp({
   url: 'https://pubsub.googleapis.com/v1/projects/projectId/subscriptions/mailSync',
   method: 'PUT',
   headers: {
     Authorization: 'Bearer accessToken'
   },
   json: {
     topic: 'projects/projectId/topics/mailSync',
     pushConfig: {
       pushEndpoint: 'https://developers.example.com/mailSyncHandler'
     }
   }
 }).then(function(response) {
   console.log(response);
   res.send(response);
 })
 .catch(function(err) {
   console.error(err);
   res.status(err.statusCode).send(err.error.error.message);
 });

// Step 3. Grant the Gmail API publish rights on our topic
rp({
   url: "https://pubsub.googleapis.com/v1beta2/projects/projectId/topics/mailSync:setIamPolicy",
   method: 'POST',
   headers: {
     Authorization: 'Bearer accessToken'
   },
   data: {
     policy: {
       bindings: [{
         role: "roles/pubsub.publisher",
         members: ["serviceAccount:gmail-api-push@system.gserviceaccount.com"]
       }]
     }
   },
   json: true
 }).then(function(response) {
   console.log(response);
   res.send(response);
 })
 .catch(function(error) {
   console.log(error.message);
   res.send(error.message);
 });

// Step 4. Watch my Inbox
rp({
  url: "https://www.googleapis.com/gmail/v1/users/me/watch",
  method: "POST",
  headers: {
    Authorization: 'Bearer accessToken'
  },
  json: {
    topicName: "projects/projectId/topics/mailSync",
    labelIds: ["INBOX"]
  }
}).then(function(response) {
  console.log(response);
  res.send(response);
})
.catch(function(error) {
  console.error(error);
  res.send(error.message);
});

共有1个答案

龙宣
2023-03-14

我找到了为什么会出现错误,这是因为在第4步中我没有以JSON的形式发送数据。

步骤4中正确的代码是(注意,我在第8行使用json:而不是body:):

// Step 4. Watch my Inbox
rp({
  url: "https://www.googleapis.com/gmail/v1/users/me/watch",
  method: "POST",
  headers: {
    Authorization: 'Bearer accessToken'
  },
  json: {     <-----
    topicName: "projects/projectId/topics/mailSync",
    labelIds: ["INBOX"]
  }
}).then(function(response) {
  console.log(response);
  res.send(response);
})
.catch(function(error) {
  console.error(error);
  res.send(error.message);
});
 类似资料:
  • 我试图写示例Android应用程序,允许使用JavaOSC库发送和接收OSC消息。在这个例子中,我们发送的是一个简单的Android eekBar的当前值与OSC消息。 日志说: 这是我的示例代码,不幸的是它不起作用(似乎我有一个例外,而试图发送消息)。也许有人知道这里出了什么问题? 我是全新的Android开发,感谢所有的建议... UPD:OSCMessage构造函数已被弃用,但在我为有效构造

  • 我正在用GCM实现一个推送通知服务器。我用从Google API控制台获得的发送者ID(应用程序密钥)和从GCM服务获得的注册ID发送一个post请求。 发布的JSON包括一个注册ID。我总是得到相同的响应: 可能是什么问题?我做错了什么?

  • null 谁能给我一个向RabbitMQ发送消息的标准程序的例子。我正在使用Spring Boot,也可以使用它的特性。

  • 我已经创建了下面这段代码,我想使用骆驼HTTP4将相同的JSON主体发送到多个endpoint,而不仅仅是一个endpoint。endpoint的数量可能会随着时间的推移而变化。 我试图找出在这种情况下配置和使用多个endpoint的最佳方法。 我已经查看了多播EIP,但看起来我必须事先知道endpoint的数量。 非常感谢您的任何想法!

  • 我正在使用spring-cloud-stream:1.3.0.发行版、spring-cloud-stream-binder-kafka:1.3.0.发行版开发spring引导应用程序。我使用spring integration dsl拆分文件中的行,使用beanio将行转换为json,要求将成功的json消息写入一个kafka主题,并将错误消息写入不同的kafka主题。下面是application

  • 如标题所述,我想使用RabbitMQ向Websocket发送消息。使用AngularJS前端,我想从Websocket读取RabbitMQ消息,并将它们打印到控制台。原则上,我的代码似乎是可行的,尽管我不知道如何获得消息的实际(字符串)内容? 后端:为了创建Websocket并执行路由,我使用Spring Boot和Apache Camel:http://camel.Apache.org/Spri