Gmail API 错误 400 - 前提条件检查失败的情况不一致

问题描述 投票:0回答:1

我正在努力解决 Gmail API 问题。需要开始的一些事情:

  • 使用OAuth2
  • 我的帐户已启用 GSuite
  • 范围包括修改
  • 我的程序是用 GoLang 编写的

我的程序正在代表经过授权的用户发送电子邮件。几乎所有 Gmail API 功能都可以完美运行 - 我能够创建草稿、在不创建草稿的情况下发送电子邮件、对标签进行操作等。

此问题似乎仅在我尝试使用

users.drafts.send
方法发送草稿对象时才会发生:https://developers.google.com/gmail/api/reference/rest/v1/users.drafts/send

当我创建草稿消息,然后触发发送消息的请求时,我不一致地返回错误 400

Precondition check failed.

这是对端点的 POST 请求 https://gmail.googleapis.com/gmail/v1/users/me/drafts/send?uploadType=multipart

让我完全困惑的奇怪部分是,半秒后我可以使用相同的 OAuth 访问令牌针对不同的草稿消息 ID 发出相同的请求,并且效果完美。

此请求失败 - 时间戳 2022-01-04T19:43:50.278Z

Method:POST URL:https://gmail.googleapis.com/gmail/v1/users/me/drafts/send?uploadType=multipart Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Authorization:[Bearer ya29.a0ARrdaM9mREDACTED] Content-Type:[application/json]] Body:{Reader:0xc0004e7dd0} GetBody:0x7198e0 ContentLength:70 TransferEncoding:[] Close:false Host:gmail.googleapis.com Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr: RequestURI: TLS:<nil> Cancel:<nil> Response:<nil> ctx:0xc000044060

身体对象:

{"id":"r155747228619414494","message":{"threadId":"17e269e7bb12bece"}}

此请求成功 - 时间戳 2022-01-04T19:43:50.230Z

Method:POST URL:https://gmail.googleapis.com/gmail/v1/users/me/drafts/send?uploadType=multipart Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Authorization:[Bearer ya29.a0ARrdaM9mREDACTED] Content-Type:[application/json]] Body:{Reader:0xc00061b920} GetBody:0x7198e0 ContentLength:70 TransferEncoding:[] Close:false Host:gmail.googleapis.com Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr: RequestURI: TLS:<nil> Cancel:<nil> Response:<nil> ctx:0xc000044060

身体对象:

{"id":"r107084306592061046","message":{"threadId":"17e269e82b321030"}}

我正在捕获速率限制等场景的错误 - 所讨论的错误非常具体

Precondition check failed.
,到目前为止我只使用此特定端点看到了它。

我在网上找到的所有内容都表明此错误指向身份验证问题。我已经授权、未授权和重新授权,都没有区别。

我还返回到上面的开发人员页面,并使用 Gmail 测试工具发送相同的请求正文值,并且草稿发送成功,这表明这可能不是损坏的草稿消息。

所有这些背景都可以问两个问题:

  1. 是否有人见过 Gmail 错误,其中错误消息表明我可能没有考虑到某些内容? Gmail 文档中没有关于该错误消息的信息。
  2. 有人知道为什么这种情况与本质上相同的请求不一致吗?

谢谢!

gmail-api
1个回答
0
投票

我们最近开始收到

400
“前提条件检查失败。”不一致从

GET https://gmail.googleapis.com/gmail/v1/users/me/profile

这似乎与我们提出比平常更多的请求的日子一致,所以我目前的理论是,这是某种速率限制。然而,这也可能是谷歌端罕见的内部错误(如果我们更多地查询它们,这种情况也更有可能发生)。 根据评论,这似乎可能发生在几个不同的端点上,例如:

GET https://gmail.googleapis.com/gmail/v1/users/me/profile
GET https://gmail.googleapis.com/gmail/v1/users/{userId}/messages
POST https://gmail.googleapis.com/gmail/v1/users/me/drafts/send

如果这是速率限制,您可能想知道我们可以发送多少个请求。我们的“正常”查询量约为每小时 1000 个 API 请求,而在我们收到此错误的 3 天里,我们的查询量激增至每小时 3000 多个 API 请求。

看起来官方的速率限制在这里 https://developers.google.com/gmail/api/reference/quota 如果我没看错的话,我们的配额是每个用户每秒 250 个“getProfile”请求,我怀疑我们是否达到了这个配额。也许我们不知何故达到了不再指定的每日限额? https://stackoverflow.com/a/76965320/1877508

© www.soinside.com 2019 - 2024. All rights reserved.