Бот должен пересылать личное сообщение от одного пользователя другому. Простое сообщение отправляется без каких-либо ошибок.
А вот ошибка заключается, в том, что сервер не отправляет приложение к сообщению (в моем случае это фотография). Примечательно, что это зависит от того, с какой страницы отправляется запрос — если это та страница, с которой был выдан ключ-доступа к сообщениям, то все нормально работает и картинка пересылается, а вот со всех остальных страниц — нет. То есть проблема вряд ли должна быть связана с кодом, скорее всего с какими-то правами. API используется последнее, самое актуальное. Вот код ошибки целиком
- One of the parameters specified was missing or invalid: message is empty or invalid. request_params = {‘v’:
‘5.103’, ‘method’: ‘messages.send’, ‘oauth’: ‘1’, ‘random_id’: ‘0’, ‘attachment’:
‘photo582248194_457239051_63093a408ca6ab8d48’, ‘user_id’: ‘мой айди’}
message = str(data['message']['text'])
if data['message']['attachments']==[]:
attachment = []
else:
attach = data['message']['attachments'][0]
attach_type = attach['type']
attachment = "{0}{1}_{2}_{3}".format(
attach_type,
attach[attach_type]['owner_id'],
attach[attach_type]['id'],
attach[attach_type]['access_key']
)
# Отправка
vkapi.send_message(user_id, token, message, attachment)
Может быть у кого-то была похожая проблема? Поддержка вк не отвечает нормально)
Спасибо заранее!
What did you do?
async function uploadPhoto(title, urlList) { const photoList = urlList.map(link=> { return {value: link}; }); const response = await vk.upload.photoAlbum({ album_id: (await Album.getAlbums()).find(a=>a.title.startsWith(title)).id, source: { values: photoList } }); return response; }; uploadPhoto('albumName', ['img url'])
What did you expect to happen?
Загрузка фотографии в альбом
What was the actual result?
Пустое значение { key: 'photos_list', value: '' }
APIError: Code №100 - One of the parameters specified was missing or invalid: photos_list is invalid at SequentialWorker.execute (D:devvknode_modulesvk-iolibindex.js:1440:39) at processTicksAndRejections (internal/process/task_queues.js:97:5) { code: 100, params: [ { key: 'method', value: 'photos.save' }, { key: 'oauth', value: '1' }, { key: 'v', value: '5.122' }, { key: 'album_id', value: '276855811' }, { key: 'server', value: '856316' }, { key: 'photos_list', value: '' }, { key: 'aid', value: '276855811' }, { key: 'hash', value: 'e00ad5dbaa6dbf172e4da706518ec17d' } ] }
Additional Info
photoList содержит
[ { value: 'https://sun9-59.userapi.com/impf/ПРАВИЛЬНУЮ__ССЫЛКУ.jpg' } ]
Versions
package | version |
---|---|
vk-io |
4.0.2 |
node |
12.18.3 |
npm |
6.14.6 |
Перейти к содержанию
VK API Error Code – Коды ошибок Вконтакте
Код ошибки | Описание |
---|---|
1 | Произошла неизвестная ошибка. Попробуйте повторить запрос позднее. |
2 | Приложение выключено. Нужно включить приложение в настройках https://vk.com/editapp?id={Ваш API_ID} или воспользоваться тестовым режимом (test_mode=1) |
3 | Передан неизвестный метод. Нужно проверить указано ли название вызываемого метода: https://vk.com/dev/methods. |
4 | Неверная подпись. |
5 | Авторизация пользователя не удалась. Следует убедиться, что используется верная схема авторизации. |
6 | Слишком много запросов в секунду. Нужно задать больший интервал между запросами или использовать метод execute. Узнать подробнее об ограничениях на частоту вызовов можно тут: https://vk.com/dev/api_requests. |
7 | Нет прав для выполнения этого действия. Следует проверить, получены ли необходимые права доступа при авторизации. Сделать это можно с помощью метода account.getAppPermissions. |
8 | Неверный запрос. Нужно проверить синтаксис запроса и список параметров, которые используются. |
9 | Слишком много однотипных действий. Нужно уменьшить число однотипных обращений. Для оптимизации работы можно использовать execute или JSONP. |
10 | Произошла внутренняя ошибка сервера. Попробуйте повторить запрос позже. |
11 | В тестовом режиме приложение должно быть выключено или пользователь должен быть залогинен. Следует выключить приложение в настройках https://vk.com/editapp?id={Ваш API_ID} |
14 | Требуется ввод кода с картинки (Captcha). Процесс обработки этой ошибки подробно описан на странице. |
15 | Доступ запрещён. Следует убедиться, что используются верные идентификаторы, а также, что доступ к запрашиваемому контенту для текущего пользователя есть в полной версии сайта. |
16 | Требуется выполнение запросов по протоколу HTTPS, т.к. пользователь включил настройку, требующую работу через безопасное соединение. Во избежание возникновения этой ошибки, в Standalone-приложении можно предварительно проверять состояние этой настройки у пользователя методом account.getInfo. |
17 | Требуется валидация пользователя. Действие требует подтверждения — нужно перенаправить пользователя на служебную страницу для валидации. |
18 | Страница удалена или заблокирована. Страница пользователя была удалена или заблокирована |
20 | Данное действие запрещено для не Standalone приложений. Если ошибка появляется несмотря на то, что приложение имеет тип Standalone, следует убедиться, что при авторизации было использовано redirect_uri=https://oauth.vk.com/blank.html. Подробнее на странице: https://vk.com/dev/auth_mobile. |
21 | Данное действие разрешено только для Standalone и Open API приложений. |
23 | Метод был выключен. Ознакомиться со всеми актуальными методами ВК API, доступными в настоящий момент можно тут: https://vk.com/dev/methods. |
24 | Требуется подтверждение со стороны пользователя. |
27 | Ключ доступа сообщества недействителен. |
28 | Ключ доступа приложения недействителен. |
29 | Достигнут количественный лимит на вызов метода. Узнать подробнее об ограничениях на количество вызовов можно тут: https://vk.com/dev/data_limits |
30 | Профиль является приватным. Информация, которая запрашивается о профиле, недоступна с используемым ключом доступа |
33 | Еще не реализовано. |
100 | Один из необходимых параметров был не передан или неверен. Следует проверить список требуемых параметров и их формат на странице с описанием метода. |
101 | Неверный API ID приложения. Нужно найти приложение в списке администрируемых на странице, и указать в запросе правильный API_ID (идентификатор приложения). |
113 | Неверный идентификатор пользователя. Следует убедиться, что используется правильный идентификатор. Получить ID по короткому имени можно методом utils.resolveScreenName. |
150 | Неверный timestamp (метка времени). Актуальное значение можно получить методом utils.getServerTime. |
200 | Доступ к альбому запрещён. Нужно убедиться, что используются верные идентификаторы (для пользователей owner_id — положительный, для сообществ — отрицательный), и доступ к контенту, которые запрашивается, для текущего пользователя есть в полной версии сайта. |
201 | Доступ к аудио запрещён. Нужно убедиться, что используются верные идентификаторы (для пользователей owner_id — положительный, для сообществ — отрицательный), и доступ к контенту, которые запрашивается, для текущего пользователя есть в полной версии сайта. |
203 | Доступ к группе запрещён. Нужно убедиться, что текущий пользователь является участником или руководителем группы (для закрытых и частных групп и встреч). |
300 | Альбом переполнен. Перед продолжением работы нужно удалить лишние объекты из альбома или использовать другой альбом. |
500 | Действие запрещено. Вы должны включить переводы голосов в настройках приложения. Следует проверить настройки приложения: https://vk.com/editapp?id={Ваш API_ID}§ion=payments |
600 | Нет прав на выполнение данных операций с рекламным кабинетом. |
603 | Произошла ошибка при работе с рекламным кабинетом. |
3300 | Требуется рекапча. |
3301 | Требуется подтверждение телефона. |
3302 | Требуется подтверждение пароля. |
3303 | Требуется проверка приложения Otp. |
3304 | Требуется подтверждение по электронной почте. |
3305 | Требуется утвердить голоса. |
KvaksManYT 1 / 0 / 1 Регистрация: 07.08.2018 Сообщений: 80 |
||||
1 |
||||
18.11.2019, 20:44. Показов 16912. Ответов 3 Метки python, web api (Все метки)
писал бота для ВК
выдаёт ошибку: Код привет Traceback (most recent call last): File "H:/Users/Admin/Desktop/del/python/vk_bot/vk_bot.py", line 33, in <module> write_msg(event.user_id, "Хай") File "H:/Users/Admin/Desktop/del/python/vk_bot/vk_bot.py", line 5, in write_msg vk.method('messages.send', {'user_id': user_id, 'message': message}) File "F:Pythonlibsite-packagesvk_apivk_api.py", line 646, in method raise error vk_api.exceptions.ApiError: [100] One of the parameters specified was missing or invalid: random_id is a required parameter
__________________
0 |
Бьюсь о грабли, не пойму где они
Выдает такой документ:
Код: Выделить всё
This XML file does not appear to have any style information associated with it. The document tree is shown below.<error><error_code>100</error_code><error_msg>One of the parameters specified was missing or invalid: photos_list is invalid</error_msg><request_params list="true"><param><key>oauth</key><value>1</value></param><param><key>method</key><value>photos.save.xml</value></param><param><key>server</key><value>316216</value></param><param><key>gid</key><value>57370658</value></param><param><key>aid</key><value>178554524</value></param><param><key>photo</key><value>[{"photo":"673fc968ed:z","sizes":[["s","316216621","b074","tr4_U3VYzlQ",75,56],["m","316216621","b075","kLkenyFHMPI",130,97],["x","316216621","b076","3jEY5QIrhy0",604,453],["y","316216621","b077","b2S2YXSwR8o",807,605],["z","316216621","b078","m8SUuO-1ZBo",1024,768],["o","316216621","b079","SvlNfBygyHw",130,98],["p","316216621","b07a","ND9l4SOlN0c",200,150],["q","316216621","b07b","ZVKsY1e44Yw",320,240],["r","316216621","b07c","AVHLE3Q-7Ns",510,383]],"kid":"774d4453523eced272351d755b64ae29"}]</value></param><param><key>hash</key><value>*****</value></param><param><key>access_token</key><value>******</value></param></request_params></error>
Сам код на c#:
Код: Выделить всё
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; System.Net.WebRequest post_request2 = System.Net.WebRequest.Create("https://api.vkontakte.ru/method/photos.getUploadServer?gid=57370658&aid=178554524&access_token=" + Settings1.Default.token); System.Net.WebResponse post_request_response2 = post_request2.GetResponse(); System.IO.Stream post_request_stream2 = post_request_response2.GetResponseStream(); System.IO.StreamReader post_request_stream_reader2 = new System.IO.StreamReader(post_request_stream2); string post_request_answer2 = post_request_stream_reader2.ReadToEnd(); string[] words_empty = post_request_answer2.Split('"'); string s = words_empty[5]; s = s.Replace("\/", "/"); s = s.Replace("\/", "/"); s = s.Replace("\/", "/"); //отправка файла на полученый сервер NameValueCollection nvc = new NameValueCollection(); //nvc.Add("user", "user"); //nvc.Add("passwd", "passwd"); string s9; s9 = HttpUploadFile(s, @"C:1.jpg", "photo", "image/jpeg", nvc); char[] delimiterChars = { ':', ',' }; string[] parameters = s9.Split(delimiterChars); string server = parameters[1]; char[] delimiterChars2 = { ':' }; string[] parameters2 = s9.Split(delimiterChars2); string hash = parameters2[8]; char[] delimiterChars3 = { '"' }; string[] parameters3 = hash.Split(delimiterChars3); hash = parameters3[1]; string photo = s9.Substring(s9.IndexOf("photo") + 14, s9.IndexOf("aid") - s9.IndexOf("photo") - 17); MessageBox.Show(photo); photo = photo.Replace("\"", """); //сохранение фотографии на сервере string url3 = "https://api.vk.com/method/photos.save.xml?server=" + server + "&gid=57370658" + "&aid=178554524" + "&photo=" + HttpUtility.UrlEncode(photo) + "&hash=" + hash + "&access_token=" + Settings1.Default.token; textBox3.Text = textBox3.Text + " ---------- " + url3; System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; System.Net.WebRequest post_request3 = System.Net.WebRequest.Create(url3); System.Net.WebResponse post_request_response3 = post_request3.GetResponse(); System.IO.Stream post_request_stream3 = post_request_response3.GetResponseStream(); System.IO.StreamReader post_request_stream_reader3 = new System.IO.StreamReader(post_request_stream3); string post_request_answer3 = post_request_stream_reader3.ReadToEnd();
функция отправки файла:
Код: Выделить всё
public static string HttpUploadFile(string url, string file, string paramName, string contentType, NameValueCollection nvc) { Console.WriteLine(string.Format("Uploading {0} to {1}", file, url)); string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("rn--" + boundary + "rn"); HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url); //wr.ContentType = "multipart/form-data; boundary=" + boundary; wr.ContentType = "multipart/form-data; boundary=" + boundary; wr.Method = "POST"; wr.KeepAlive = true; wr.Credentials = System.Net.CredentialCache.DefaultCredentials; Stream rs = wr.GetRequestStream(); string formdataTemplate = "Content-Disposition: form-data; name="{0}"rnrn{1}"; foreach (string key in nvc.Keys) { rs.Write(boundarybytes, 0, boundarybytes.Length); string formitem = string.Format(formdataTemplate, key, nvc[key]); byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem); rs.Write(formitembytes, 0, formitembytes.Length); } rs.Write(boundarybytes, 0, boundarybytes.Length); string headerTemplate = "Content-Disposition: form-data; name="{0}"; filename="{1}"rnContent-Type: {2}rnrn"; string header = string.Format(headerTemplate, paramName, file, contentType); byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header); rs.Write(headerbytes, 0, headerbytes.Length); FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read); byte[] buffer = new byte[4096]; int bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) { rs.Write(buffer, 0, bytesRead); } fileStream.Close(); byte[] trailer = System.Text.Encoding.ASCII.GetBytes("rn--" + boundary + "--rn"); rs.Write(trailer, 0, trailer.Length); rs.Close(); WebResponse wresp = null; try { wresp = wr.GetResponse(); Stream stream2 = wresp.GetResponseStream(); StreamReader reader2 = new StreamReader(stream2); //Form Form1 = new Form1(); //Form //textBox6.Text = reader2.ReadToEnd(); //MessageBox.Show(s3); //Console.WriteLine(string.Format("File uploaded, server response is: {0}", reader2.ReadToEnd())); string s3 = reader2.ReadToEnd(); return s3; } catch (Exception ex) { Console.WriteLine("Error uploading file", ex); if (wresp != null) { wresp.Close(); wresp = null; } wresp = wr.GetResponse(); Stream stream2 = wresp.GetResponseStream(); StreamReader reader2 = new StreamReader(stream2); string s3 = reader2.ReadToEnd(); return s3; } finally { wr = null; } }