@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
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
@bixnel
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\"}"
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы