Как исправить ошибку "One of the parameters specified was missing or invalid: random_id is a required parameter" при написании бота для ВК?

Вот ошибка:

Traceback (most recent call last):
  File "F:/python/CODE3.py", line 31, in <module>
    write_msg(event.user_id, "Здарова!")
  File "F:/python/CODE3.py", line 8, in write_msg
    vk.method('messages.send', {'user_id': user_id, 'message': message})
  File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\site- 
packages\vk_api\vk_api.py", line 668, in method
    raise error
vk_api.exceptions.ApiError: [100] One of the parameters specified was 
missing or invalid: random_id is a required parameter

Вот код:

import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType

my_code = "2fdcbe5d74215a5f8d32e52c604ac790149007dedd2335db4f2fe44b7519231a7fed6c166f2fbf5e35bd0"


def write_msg(user_id, message):
    vk.method('messages.send', {'user_id': user_id, 'message': message})

# Авторизуемся как сообщество
vk = vk_api.VkApi(token=my_code)

# Работа с сообщениями
longpoll = VkLongPoll(vk)

# Основной цикл
for event in longpoll.listen():

    # Если пришло новое сообщение
    if event.type == VkEventType.MESSAGE_NEW:
    
        # Если оно имеет метку для меня( то есть бота)
        if event.to_me:
        
            # Сообщение от пользователя
            request = event.text
            
            # Каменная логика ответа
            if request == "привет":
                write_msg(event.user_id, "Здарова!")
            elif request == "пока":
                write_msg(event.user_id, "Досвидули!")
            else:
                write_msg(event.user_id, "Не понял 0_0")

Запускаю через cmd, через IDLE, такая же проблема.


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

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

Сначала нужно понять в чём ошибка. Смотрим в сообщение об ошибки. Можно сразу в последние строки.

Traceback (most recent call last):
  File "F:/python/CODE3.py", line 31, in <module>
    write_msg(event.user_id, "Здарова!")
  File "F:/python/CODE3.py", line 8, in write_msg
    vk.method('messages.send', {'user_id': user_id, 'message': message})
  File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\site- 
packages\vk_api\vk_api.py", line 668, in method
    raise error
vk_api.exceptions.ApiError: [100] One of the parameters specified was 
missing or invalid: random_id is a required parameter

Видим эти куски:

line 8, in write_msg
    vk.method('messages.send', {'user_id': user_id, 'message': message})
...
One of the parameters specified was 
missing or invalid: random_id is a required parameter

Тут следовало бы ознакомиться с документацией VK (https://vk.com/dev/messages.send), но писать там о необходимости random_id никто не стал...

Так или иначе из текста ошибки теперь ясно в какой функции, на какой строке и что не так.

# В начало
from vk_api.utils import get_random_id

# Изменить функцию
def write_msg(user_id, message):
    vk.method('messages.send', {
        'user_id': user_id,
        'message': message,
        'random_id': get_random_id()
    })
→ Ссылка