いくつかの仕事をするフラスコアプリを作成し(最大3時間持続する可能性があります)、その後、slackの着信Webhookを介してslackに応答を送信します。アプリケーションがスラック スラッシュ コマンドを介して呼び出されているため、3000 ミリ秒以内に応答する必要があります。そうしないと、タイムアウト エラーがスローされます。response_url
30分後に応答を送信できないため、Webhookを使用してジョブが完了した後に応答を送信しました。(スラック スラッシュ コマンド)
from flask import Flask, request, Response, jsonify
import webbrowser
import os
import time
import json
import requests
...
some functions here
...
app = Flask(__name__)
@app.route('/tests', methods=['POST'])
def test():
if "text" in request.form:
if not request.form["text"]:
return slackCommandResponse("No parameters provided. Please run /run-tests <url> <test_ID>")
else:
params = request.form["text"]
user_id = request.form["user_id"]
payload = {'token': ''+token+'', 'user': user_id }
user_req = requests.get('https://slack.com/api/users.info', params=payload)
user_data = user_req.json()
real_name = user_data['user']['real_name']
user_email = user_data['user']['profile']['email']
if len(params.split()) > 2:
return slackCommandResponse("More parameters are provided than needed. Please run /run-tests <url> <test_ID>")
else:
baseUrl = params.split(" ")[0]
if not len(params.split()) > 1:
# here is the response need to be send
return slackCommandResponse("No test ID provided. Running all tests. You will be notified upon progress.")
# code part starting from here need to be executed after response above
for file in files(path):
file_full_path = os.path.join(path, file)
ID = file[:-4]
url=baseUrl+"&respondentid="+ID
apiUrl=apibase+"&respondentid="+ID
test_answer = 5
webbrowser.get(chrome_path).open(url)
openFile(file_full_path)
time.sleep(5)
checkAppIsRunning("AmcEngine.exe")
responseContent = requests.get(apiUrl)
respjson = responseContent.json()
test_result = (respjson["questions"][0]["qResponseData"]["basketContent"][0]["quantity"])
if test_result == test_answer:
slackResponse("Test "+ID+" passed")
else:
slackResponse("Test "+ID+" failed")
else:
return slackCommandResponse("Cannot run single test yet")
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
主な問題は、200 応答を 3000 ミリ秒以内に送信すると、コードの残りの部分が機能しないことです。これを使用しようとしましたが、機能しません。私はそのようなことを初めてやろうとしていたので、これに問題があるかどうかはわかりません。どんな助けでも感謝します。