ruby - FB Messenger API - 接收双重请求
问题描述
我有一个使用 Ruby 构建的工作 FB Bot,它允许玩家进行寻宝游戏。
但有时,当我在一个团队中有多名球员时,FB 会两次向我发送球员“答案”网络钩子。我已经研究过了,起初认为这与 20 秒超时有关,如果 FB 没有得到 200 OK 响应(Docs here)。不过,在检查日志后,我仅在 14 秒后从 FB 收到了第二个 webhook。见下文:
# Webhook #1
{"object"=>"page", "entry"=>[{"id"=>"252445748474312", "time"=>1532153642358, "messaging"=>[{"sender"=>{"id"=>"1709242109154907"}, "recipient"=>{"id"=>"252445748474312"}, "timestamp"=>1532153641935, "message"=>{"mid"=>"0FeOChulGjuPgg3YJqEgajNsY8kMfNRt_bpIdeegEeE54h-KB8szcd-EQ-UHUT3850RwHgH4TxVYFkoFwxqhtg", "seq"=>402953, "text"=>"Larrikins"}}]}]}
# Webhook #2 (14 seconds later)
{"object"=>"page", "entry"=>[{"id"=>"252445748474312", "time"=>1532153656901, "messaging"=>[{"sender"=>{"id"=>"1709242109154907"}, "recipient"=>{"id"=>"252445748474312"}, "timestamp"=>1532153641935, "message"=>{"mid"=>"0FeOChulGjuPgg3YJqEgajNsY8kMfNRt_bpIdeegEeE54h-KB8szcd-EQ-UHUT3850RwHgH4TxVYFkoFwxqhtg", "seq"=>402953, "text"=>"Larrikins"}}]}]}
请注意,除了第一个“时间”属性(14 秒后)之外,两者都完全相同。
由于我在收到第一个 webhook 后处理了许多方法和调用,因此只有在我完成发送消息作为响应后,才会将 200 OK 响应发送回 FB(因此延迟了 14 秒)。
所以我有两个问题:
14 秒的延迟是否太长,这就是 FB 重新发送的原因?如果是这样,我怎样才能立即发送 200OK 响应(
head :ok
)?这完全是另一个问题吗?
解决方案
推荐阅读
- rust - 是否有更短的方法来编写接受和返回闭包的函数签名?
- java - onRequestPermission / onActivityResult Android Studio 出错
- javascript - 使用 Ajax 和 vanilla JS 调用特定的 php 函数
- windows-10 - Windows 10 更改强调色开始菜单和应用程序背景
- android - 如何将滚动视图布局划分为多个固定大小的视图,以便在 Android 中创建多页 PDF
- c# - TypeDescriptor ConvertFromInvariantString 抛出异常?
- neo4j - Neo4J (Cypher) 查询以查找所有不遵循模式的路径
- c# - 在 ASP.NET Core 3.0 MVC 中通过 ViewData 多选发送数据
- java - 用一个循环 foreach 两个不同的对象
- javascript - 用 Node Js、Socket.Io 制作机器人