gpt4 book ai didi

google-api - Gmail API users.watch - 没有 HistoryId 的详细信息

转载 作者:行者123 更新时间:2023-12-02 03:02:05 35 4
gpt4 key购买 nike

我已成功设置 Google Pub/Sub 以使用 Gmail API Watch 功能,如下所述:https://developers.google.com/gmail/api/guides/push查看我的 Gmail 帐户中的 INBOX 标签。

一旦有新消息到达,我会立即收到有效格式的推送通知,例如:

{ message: 
{ data: '.......',
attributes: {},
message_id: '1248700053943' },
subscription: '.....' }

在对数据进行 Base64 解码后,我收到电子邮件和历史 ID。然后,按照建议,我请求 gmail.users.history.list API(通过 API 控制台),并将 startHistoryId 设置为推送通知中的 HistoryId。然后得到没有任何细节的空响应:

GET https://www.googleapis.com/gmail/v1/users/me/history?startHistoryId=4658879&key={YOUR_API_KEY}
200 OK
- Show headers
{
"historyId": "4658894"
}

因此通知中的historyId 似乎无效。Gmail users.watch API 似乎无法正常工作,并且发送了错误的历史记录 ID,或者我只是丢失了某些内容?

最佳答案

看起来我误解了 users.history.list 的工作原理,流程应该如下所述:

  1. 记住users.watch请求响应中的historyId。

  2. 在推送通知中调用 users.history.list,使用之前记住的 historyId 作为 startHistoryId,而不是通知中的新历史记录,并获取最近更改的列表。

  3. 记住通知中的historyId,然后转到2。

如果我们查看对 users.history.list 的任何调用的响应,historyId 始终存在,它是最新历史记录更改的标记。推送通知带来最新的历史记录,所以如果我们用它请求 users.history.list (如问题中所示),我们会得到空的历史记录数组,并且服务器从响应中删除这个空的“历史记录”字段,这就是我们得到这个的原因:

{
"historyId": "4658894"
}

但不是这个:

{
"history": [ ],
"historyId": "4658894"
}

同步指南中提供了更多详细信息:https://developers.google.com/gmail/api/guides/sync#partial

所以我们无法轻易地从推送通知中获取到达INBOX的新消息的详细信息,需要进行历史挖掘和同步来查找它。

关于google-api - Gmail API users.watch - 没有 HistoryId 的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797416/

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