Как правильно отправить клавиатуру ВК?

Задача: отправить inline-клавиатуру по вызову команды. Клавиатура должна содержать одну кнопку с ссылкой.

Реализация:

if event.text == '!command':
   keyboard_new_send = VkKeyboard(**settings)
   keyboard_new_send.add_openlink_button(label='Open url', link=f"{download_url}, payload=None")
   
   vk.messages.send(
               user_id=event.user_id,
               random_id=get_random_id(),
               message=f'Custom message',
               keyboard=keyboard_new_send
   )

Выходные данные:

Traceback (most recent call last):
  File "C:\Users\1\Desktop\python-bots\vk_exc_bot\bot.py", line 371, in <module>
    main()
  File "C:\Users\1\Desktop\python-bots\vk_exc_bot\bot.py", line 362, in main
    vk.messages.send(
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\vk_api\vk_api.py", line 696, in __call__
    return self._vk.method(self._method, kwargs)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\vk_api\vk_api.py", line 656, in method
    raise error
vk_api.exceptions.ApiError: [100] One of the parameters specified was missing or invalid: keyboard contains incorrect JSON

Вопрос: каким образом можно избавиться от этой ошибки и отправить клавиатуру? Заранее благодарю за ответ.


Ответы (1 шт):

Автор решения: finally

исходя из документации, метод add_openlink_button должен выглядеть так:

add_openlink_button(label, link, payload=None):
    Добавить кнопку с ссылкой
    Максимальное количество кнопок на строке - MAX_BUTTONS_ON_LINE
    Parameters: 
    label (str) – Надпись на кнопке
    link (str) – ссылка, которую необходимо открыть по нажатию на кнопку
    payload (str or list or dict) – Параметр для callback api

откуда можно понять, что кварг payload=None вы "упустили"

→ Ссылка