Я разрабатываю Slack Bot, используя интерактивные компоненты Slack для запроса информации через диалоги.Все интерактивные компоненты (кнопки и диалоги) должны проходить через один URL.Как лучше всего проанализировать POST-запрос, отправленный Slack, и предпринять необходимые действия, которые я определил в другом месте?
Сейчас у меня есть две функции, которые выполняют эту задачу вместе.Сначала я анализирую запрос POST, чтобы получить идентификатор, который служит ключом к определению возможных вызовов функций.
Затем я использую клавишу для индексации в набор функций, которые я предопределил, чтобы определить, какую функцию следует вызывать.Возвращаемое значение True указывает, что функция имеет возвращаемое значение, которое должно быть возвращено в Slack.
def get_action(request):
data = form_json = json.loads(request.form["payload"])
key = None
if data['type'] == 'interactive_message':
key = data['actions'][0]['value']
elif data['type'] == 'dialog_submission':
key = data['callback_id']
elif data['type'] == 'dialog_cancellation':
key = 'cancellation_' + data['callback_id']
return key, data
def get_func(key):
options = {
'issue_dialog': (False, dialog.issue),
'announcement_dialog': (False, dialog.announcement),
'event_dialog': (False, dialog.event),
'travel_dialog': (False, dialog.travel),
'good_news_dialog': (False, dialog.good_news),
'ask_dialog': (False, dialog.ask),
'pulse_dialog': (False, dialog.pulse),
'check_in_dialog': (False, dialog.check_in),
'test_dialog': (False, dialog.test),
'pulse_message': (False, message.pulse),
'cancel': (True, message.cancel),
'issue_submission': (False, submit.issue.delay),
'announcement_submission': (False, submit.announcement.delay),
'event_submission': (True, submit.event),
'travel_submission': (True, submit.travel),
'good_news_submission': (False, submit.good_news.delay),
'check_in_submission': (False, submit.check_in.delay),
'ask_submission': (False, submit.ask),
'pulse_submission': (True, submit.pulse),
'pulse_history': (False, submit.pulse_history.delay),
'test_submission': (False, submit.test.delay),
'cancellation_pulse_submission': (False, submit.cancel_pulse)
}
ret = options[key]
return ret
Словарь функций, которые у меня есть сейчас, выходит из-под контроля, когда я добавляю больше функций.Какую организацию я должен использовать для анализа и получения правильной функции?