@andrey_levushkin

Почему кнопки не отправляются вертикальным списком?

Создаю объект клавиатуры и отправляю её пользователю
def get_button(label, color, payload=""):
    return {
        "action": {
            "type": "text",
            "payload": json.dumps(payload),
            "label": label
        },
        "color": color
    }


keyboard = {
    "one_time": False,
    "buttons": [
        [
            get_button(label="Кнопка 1", color="positive"),
            get_button(label="Кнопка 2", color="negative"),
            get_button(label="Кнопка 3", color="primary"),
            get_button(label="Кнопка 4", color="negative")
        ]
    ]
}
id = "id получателя"
vk.method("messages.send", {"peer_id": id, "message": "Открыто меню!", "keyboard": keyboard,
                            "random_id": random.randint(1, 2147483647)})

Всё отправляется нормально, приходит горизонтальное меню
5d281810d07e5984454484.png
Пытаюсь отправить это же меню вертикально *(каждую кнопку на отдельной строке), изменив сам объект клавиатуры таким образом:
keyboard = {
    "one_time": False,
    "buttons": [
        [
            [get_button(label="Кнопка 1", color="positive")],
            [get_button(label="Кнопка 2", color="negative")],
            [get_button(label="Кнопка 3", color="primary")],
            [get_button(label="Кнопка 4", color="negative")]
        ]
    ]
}

Но вылетает ошибка:
vk_api.exceptions.ApiError: [911] Keyboard format is invalid: button [0][3] has invalid action
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
@trofimovdev
Python
Не нужно оборачивать кнопки в еще один массив. Правильная структура:
keyboard = {
    'one_time': False,
    'buttons': [
                [get_button(label="Кнопка 1", color="positive")],
                [get_button(label="Кнопка 2", color="negative")],
                [get_button(label="Кнопка 3", color="primary")],
                [get_button(label="Кнопка 4", color="negative")]
    ]
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AlerX
В функции get_button() указан payload как json.dumps(payload),
чтобы отправить вертикальное меню достаточно изменить этот параметр на "{\"button\": \"1\"}"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
СБК Москва
от 140 000 до 160 000 ₽
EQWILE Казань
от 80 000 до 110 000 ₽
AGIMA Москва
от 180 000 ₽
28 февр. 2020, в 11:17
1000 руб./за проект
28 февр. 2020, в 11:08
30000 руб./за проект
28 февр. 2020, в 10:29
1000 руб./за проект