首页 文章

继续使用Google Cloud PubSub获取'Error sending test message to Cloud PubSub…'

提问于
浏览
3

我正在尝试将Google推送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 回答

  • 1

    弄清楚我收到错误的原因是因为我没有在步骤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);
    });
    

相关问题