【问题标题】:Messenger Platform Limit Error (#613) Calls to this api have exceeded the rate limitMessenger 平台限制错误 (#613) 调用此 api 已超过速率限制
【发布时间】:2017-06-13 11:50:03
【问题描述】:

我在使用 Messenger 平台对我的应用进行压力测试时遇到了问题,无法在短时间内向多个用户发送相同的消息。我收到限制错误:(#613) Calls to this api have exceeded the rate limit.

目前我正在通过向同一个用户(我)多次发送相同的消息来测试这一点;在现实世界的场景中,当然会向多个不同的用户发送相同的消息。

另外,我正在使用实时应用的测试应用程序来执行这些测试。这应该在实时应用中得到显着改善吗?

我真的需要一个很好的吞吐量广播消息,所以目前我的设置有几个线程产生 (50) 并行发送消息,其中一些已经达到这个限制并出错。 另外,我尝试了 Batch Requests 来提高交付过程的速度,到那时真的变得难以忍受,成功率不到 50%。

我已阅读有关一般 Graph API 速率限制 (https://developers.facebook.com/docs/graph-api/advanced/rate-limiting) 的信息,并且要发送消息,您需要提供页面访问令牌,因此我希望我的应用属于“页面级速率限制”类别,如果我发送的消息太多。但是,在错误响应中没有 X-Page-Usage 标头(顺便说一下,X-App-Usage 也没有)。

在 Messenger 平台文档 (https://developers.facebook.com/docs/messenger-platform/send-api-reference#limits) 中声明如下:

Messenger 平台支持对 Send API 的高调用率。

但是,您应该构建您的系统,以便随着时间的推移分配任何突然的大量负载,并且在您达到我们的速率限制时能够控制您的吞吐量。

设置了速率限制以防止恶意行为和糟糕的用户体验。

请务必捕获发送 API 返回的任何错误,包括指示您已达到速率限制的错误。

这些也不是特别有用,因为它们没有明确引用通用 Graph API 限制,也没有指定允许执行的不同请求数量。

有什么我可能遗漏的吗?

【问题讨论】:

  • “您应该构建您的系统,以便随着时间的推移分配任何突然的大量负载,并且在您达到我们的速率限制时能够控制您的吞吐量” - 究竟是什么有问题吗?您意识到您正在达到极限,因为 API 正在返回此错误消息...所以是时候在您的应用程序中设置 $slowThisShitDown 标志了。
  • 是的,但这仍然很模糊。我提到的标头完全到位,以便您的应用程序可以根据 Facebook 用来限制您的 Graph API 请求的滑动窗口的当前使用情况进行自我调整。因此,如果发送 API 不提供它,您将无法根据实际使用情况很好地分配工作负载。恐怕这个 API 没有使用相同的速率限制概念,但如果有一个“高调用率”以外的值就好了。
  • 您可以随时提交文档错误,并要求他们澄清是否有不清楚或缺失的地方。我不确定 Send API 是否也应该发送这些响应标头,但我同意这只会有意义。所以我会问他们是否应该这样做,如果不是,文档至少应该明确提到这一点。 developers.facebook.com/bugs
  • 是的,同时也是这样做的。我认为要么限制应该是公共的,要么应该根据 Graph API 的剩余端点提供标头。谢谢。
  • 即使我已经每 3 分钟将机器人消息分发给 500 个用户,我也会遇到此错误。我每天早上都会向订阅用户发送一篇文章,但由于此限制,一些用户无法收到该文章。我也找不到一个特定的数字来满足这个限制(例如 10 个请求/秒)。这个简单的数字解释就可以了。

标签: facebook facebook-graph-api facebook-send-api


【解决方案1】:

Facebook 的最新文档清楚地列出了每秒 250 次 SendAPI 调用。

Send API 没有固定的速率限制,但您可以安全地每秒发送 250 个请求。

更多信息在这里:https://developers.facebook.com/docs/messenger-platform/send-messages#limits

【讨论】:

    【解决方案2】:

    回答您的问题,“这应该在实时应用中大幅改进吗?”

    不,在这种情况下,测试应用和实时应用之间没有区别。我的应用程序已经上线,我也遇到了这个错误。

    我同意我们的案例应该属于“页面级速率限制”,因为我们使用的是页面访问令牌。但是,我没有收到任何与页面级别限制相关的错误。而且我的应用仪表板也没有显示 API 限制命中。所以这只是 613 - 自定义级别限制,这就是我所拥有的,FB 只是说“联系你的合作伙伴经理”

    ================================================ ============================

    我已经解决了这个问题。根据 FB 支持人员所说的“您因调用发送 API 太快而受到速率限制”,我使用 setTimeout() 将发送 API 请求的延迟设置为 200 毫秒。以每秒 10 条消息的速度,我不再达到限制。根本没有错误613。由于 Facebook 不会正式记录它,我会逐渐提高这个速度以找到理想的场景。将随时向您发布实验。

    【讨论】:

    • 实际上,从最初的帖子开始,我在 Facebook 的问题跟踪器中打开了一个错误:developers.facebook.com/bugs/379288625806177。从那里添加的信息不多。但是,我们现在有一些具有大页面(约 1000 万个赞)的实时客户端,并且现在机器人用户少于 1 万,我们能够每秒发送大约 100 条消息。所以我敢说参与度百分比也会影响这种自定义级别限制。
    • 我们的页面有 1500 万个赞和 9 万个订阅者。 100 条消息/秒已达到极限。我知道这是基于页面参与的用户,我相信我们对此有很高的了解。
    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多