Невозможно увеличить время ожидания по умолчанию с команд Slack до sla sh. Это всегда 3 секунды. Но можно отправить отложенный ответ на срок до 30 минут.
Для этого вам необходимо сначала ответить в течение 3 секунд, чтобы подтвердить первоначальный запрос, отправив обратно HTTP 200 OK. Поскольку для этого требуется выполнить текущий запрос и завершить работу основного сценария, необходимо параллельно запустить функцию для отложенного ответа. Это может быть в процессе, потоке, при вызове задачи сельдерея или любых других средств, которые позволяют вам запустить параллельную запущенную функцию python.
Параллельная функция может затем ответить на Slack, отправив сообщение URL, предоставленный в response_url
из запроса Slack.
Вот пример реализации, использующей потоки:
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