Messenger每次用户输入都会发送多个发帖请求

时间:2018-07-04 05:14:31

标签: python-3.x rest flask http-post facebook-messenger-bot

我正在使用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

1 个答案:

答案 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