Обработайте действие кнопки Slack для запроса POST в Python - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь сделать кнопку подтверждения слабой во время выполнения команды косой черты. например Я запускаю команду slash (/test), она отправляет запрос POST моему приложению python, которое отправляет назад 2 кнопки (Подтвердить, Отмена). Пользователь нажимает одну из кнопок Slack запускает действие и отправляет еще один запрос POST в мое приложение. Перед этим шагом все работает нормально - я не могу правильно обработать данные из 2-го запроса POST.

В документации Slack я нашел это:

Когда вызывается действие, запрос будет отправлен на URL запроса приложения, как настроено выше; тело запроса будет содержать параметр полезной нагрузки, который ваше приложение должно проанализировать для JSON.

Когда я делаю

data=json.loads(request.form["payload"])
return jsonify(data)

Я получаю

{
 "action_ts": "XXXX",
 "actions": [
   {
     "name": "confirm",
     "type": "button",
     "value": "confirm"
   }
 ],
 "attachment_id": "X",
 "callback_id": "XXXX",
 "channel": {
   "id": "XXXX",
   "name": "XXXX"
 },
 "is_app_unfurl": false,
 "message_ts": "XXXX",
 "response_url": "XXXX",
 "team": {
   "domain": "XXXX",
   "id": "XXXX"
 },
 "token": "XXXX",
 "trigger_id": "XXXX",
 "type": "interactive_message",
 "user": {
   "id": "XXXX",
   "name": "XXXX"
 }
}

После того, как я позвоню

data=json.loads(request.form["payload"]) 
action=data["actions"]
return jsonify(action)

Я получаю

[
    {
        "name": "confirm",
        "type": "button",
        "value": "confirm"
    }
]

Теперь, когда я пытаюсь получить значение "name" с action["name"], я получаю ошибку

TypeError: индексы списка должны быть целыми или кусочками, а не str

Я пытался json.dumps(action) и json.dumps(action["name"]), ни один из них не работал. Как читать эти значения? Мне нужно проверить значение name, а затем сделать все остальное.

1 Ответ

0 голосов
/ 28 июня 2018
[
{
"name": "confirm",
"type": "button",
"value": "confirm"
}
]

- список, содержащий один элемент - словарь. Доступ к имени, как data["actions"][0]["name"]

...