要求是将来自Gmail的用户邮件同步到我们的CRM中。现有的系统基于Google Pub/Sub,它会监视用户的收件箱是否有任何更改,并将通知发送到我们的HTTPs端点。有关更多信息,请访问Gmail cloud pub/sub

基于以上过程,我们将更改历史记录进了git。然后,我只对新消息感兴趣,因此,按照this guide,history.getMessage Transactions是首选。我们现在面临的问题是消息的“信息 Collection ”下没有捕获线程的第一个邮件,所有后续的消息都通过了我们的系统。

注意:对于第一封邮件,我们确实得到了Google的推送。但是,当我们尝试添加消息时,结果却是空的。对于该线程的第一封邮件是否需要做任何特殊的事情,还是我错过了一些东西。

最佳答案

我遇到了一个非常相似的问题,我的错误是我使用了推送通知中的historyId,解决方案是将最后一个已知的historyId存储在数据库中,因此,每次收到通知时,都会从我存储的ID,而不是通知中的ID。

就我而言,通知中的historyId甚至都不属于历史记录,可能是由于我的观看限制:labelIds = ['INBOX']

这是Google发布/订阅通知:

{
  message:
  {
    data: {"emailAddress": "[email protected]", "historyId": "9876543210"},
    message_id: "1234567890",
  }

  subscription: "projects/myproject/subscriptions/mysubscription"
}

我正在使用message.data.historyId,这引起了困惑!

message.data作为base64编码的字符串出现,在此示例中,我只是对其进行了解码!

逐步查看收件箱中的新电子邮件:
  • 在google pub/sub中进行所有配置。
  • 开始用所需的过滤器监视用户(docs .: https://developers.google.com/gmail/api/v1/reference/users/watch)
  • 存储在第2步中获得的historyId
  • 收到通知时,使用存储的id作为startHistoryId参数(文档:https://developers.google.com/gmail/api/v1/reference/users/history/list)获取所有事件(历史记录)
  • 在第4步获得的历史记录列表中,查找新消息:history.getMessage Transactions()。
  • 更新数据库中的最后一个已知历史记录ID,因此您无需每次都处理整个历史记录!

  • 希望对您有所帮助。

    10-01 00:47