我正在使用Facebook Messenger及其发送API。我还使用ngrok作为服务器来处理流量。我的聊天机器人几天前运行良好,但现在经过一些调试后,Messenger似乎在用户的每次输入后都很快地发送了多个发帖请求。我曾想过是否可能是延迟问题,因为响应的聊天机器人确实需要一段时间才能处理。由于所有请求,我的聊天机器人都花了很长时间,但过了一会儿,它确实设法以200响应回答了所有请求。如果是这样,如何使Messenger不发送多个Post请求并淹没我的ngrok Webhook?如果还有其他问题,我该如何处理?
这是侦听请求的代码:
@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
答案 0 :(得分:0)
您可以阅读有关Webhooks here的信息。您似乎无法更改超时期限。
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
如果这给您带来了共享范围或Flask本身的问题,请考虑改用multiprocessing
。为此,只需切换到
from multiprocessing import Process as Sub