如何在Python请求中为Slack API的事件请求发送http 200

时间:2019-08-08 17:42:54

标签: python slack slack-api

我需要使用HTTP 2xx响应事件请求。我在Python中使用Request方法。我怎样才能退货?请帮忙。

我当前的问题是,我在本地主机上使用隧道软件。所以要放松:

  

您的应用应在内部用HTTP 2xx响应事件请求   三秒钟。如果没有,我们将考虑事件的交付   尝试失败。失败后,我们将重试3次,然后退出   指数。

我通过此命令响应松弛

resp = requests.post(url,json=payload, headers=headers, cookies=cookies)
data = resp.json()
status = data['status']
send_message = status
slack_client.api_call("chat.postMessage", channel=channel, text=send_message)

现在,由于我没有在3秒内结束任何响应,因此它重试了3次,因此我得到了4条响应。

因此,一旦收到请求,我就需要使用Http2xx进行回复。

1 个答案:

答案 0 :(得分:1)

要使用HTTP 200响应请求,您需要先生成第二个进程或线程以继续执行应用程序,然后终止主线程/进程。

有很多方法可以做到,这是一个完整的线程和Flask示例。

它正在从Slack收到一个斜杠命令请求,并立即以一条短消息响应。然后等待7秒以模拟繁重的处理过程,最后再次响应一条消息。

此示例使用斜杠命令,但该方法也适用于事件。

import threading
from time import sleep
from flask import Flask, json, request
import requests

app = Flask(__name__) #create the Flask app

@app.route('/slash', methods=['POST'])
def slash_response():                
    """endpoint for receiving all slash command requests from Slack"""

    # get the full request from Slack
    slack_request = request.form

    # starting a new thread for doing the actual processing    
    x = threading.Thread(
            target=some_processing,
            args=(slack_request,)
        )
    x.start()

    ## respond to Slack with quick message
    # and end the main thread for this request
    return "Processing information.... please wait"

def some_processing(slack_request):
    """function for doing the actual work in a thread"""

    # lets simulate heavy processing by waiting 7 seconds
    sleep(7)

    # response to Slack after processing is finished
    response_url = slack_request["response_url"]    
    message = {        
        "text": "We found a result!"
    }
    res = requests.post(response_url, json=message)

if __name__ == '__main__':
    app.run(debug=True, port=8000) #run app in debug mode on port 8000