Как наилучшим образом направить несколько слабых взаимодействий через один URL? - PullRequest
1 голос
/ 10 июля 2019

Я разрабатываю 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

Словарь функций, которые у меня есть сейчас, выходит из-под контроля, когда я добавляю больше функций.Какую организацию я должен использовать для анализа и получения правильной функции?

...