信使为每个用户输入发送多个帖子请求



我正在使用Facebook Messenger及其send API。我还使用 ngrok 作为服务器来处理流量。几天前我的聊天机器人工作正常,但现在经过一些调试,似乎 Messenger 通过用户的每次输入,都会非常快速地一个接一个地发送多个发布请求。我有一个想法,如果这可能是延迟问题,因为我的聊天机器人响应确实需要一段时间来处理。由于所有请求,我的聊天机器人需要很长时间,但一段时间后,它确实设法以 200 响应回答所有请求。如果是这样,如何使 Messenger 不发送多个 Post 请求并淹没我的 ngrok 网络钩子?如果是其他问题,我该如何处理问题?

这是侦听请求的代码:

@app.route("/webhook", methods=['GET','POST'])
def listen():
"""This is the main function flask uses to
listen at the `/webhook` endpoint"""
if request.method == 'GET':
return verify_webhook(request)

if request.method == 'POST':
payload = request.get_json()
print(payload)
event = payload['entry'][0]['messaging']
for x in event:
if is_user_message(x):
text = x['message']['text']
sender_id = x['sender']['id']
respond(sender_id, text)
return "ok", 200

你可以在这里阅读关于网络钩子的信息。看起来您无法更改超时期限。

网络钩子性能要求

您的 Webhook 应满足以下最低性能标准:

  • 使用 200 OK 响应所有 Webhook 事件。
  • 在 20 秒或更短的时间内响应所有 Webhook 事件。

如果要实现多处理解决方案,它可能如下所示:

from threading import Thread as Sub
@app.route("/webhook", methods=['GET','POST'])
def listen():
"""This is the main function flask uses to
listen at the `/webhook` endpoint"""
if request.method == 'GET':
return verify_webhook(request)

if request.method == 'POST':
payload = request.get_json()
print(payload)
event = payload['entry'][0]['messaging']
for x in event:
if is_user_message(x):
text = x['message']['text']
sender_id = x['sender']['id']
sub = Sub(target=respond, args=[sender_id, text])
sub.start()
return "ok", 200

如果这给您带来了共享范围或烧瓶本身的问题,请考虑改用multiprocessing。为此,只需切换到

from multiprocessing import Process as Sub

最新更新