Random id vk api что это
Random id vk api что это
Каждое сообщение имеет флаг — значение, полученное суммированием любых из следующих параметров.
+1 | UNREAD | сообщение не прочитано |
+2 | OUTBOX | исходящее сообщение |
+4 | REPLIED | на сообщение был создан ответ |
+8 | IMPORTANT | помеченное сообщение |
+16 | CHAT | сообщение отправлено через чат. Обратите внимание, этот флаг устаревший и вскоре перестанет поддерживаться. |
+32 | FRIENDS | сообщение отправлено другом. Не применяется для сообщений из групповых бесед. |
+64 | SPAM | сообщение помечено как «Спам» |
+128 | DELЕTЕD | сообщение удалено (в корзине) |
+256 | FIXED | сообщение проверено пользователем на спам. Обратите внимание, этот флаг устаревший и вскоре перестанет поддерживаться. |
+512 | MEDIA | сообщение содержит медиаконтент. Обратите внимание, этот флаг устаревший и вскоре перестанет поддерживаться. |
+65536 | HIDDEN | приветственное сообщение от сообщества. Диалог с таким сообщением не нужно поднимать в списке (отображать его только при открытии диалога напрямую). Флаг недоступен для версий <2. |
+131072 | DELETE_FOR_ALL | сообщение удалено для всех получателей. Флаг недоступен для версий <3. |
+262144 | NOT_DELIVERED | входящее сообщение не доставлено. Присылается сброс этого флага в случае доставки входящего сообщения у которого был TTL. |
Значения, не представленные в таблице, следует игнорировать и не пытаться каким-либо образом обработать.
Каждый диалог имеет флаги — значение, полученное суммированием любых из следующих параметров. Флаги назначаются только для диалогов сообщества.
Почему random_id в вк api отказывается работать нормально?
Простой 7 комментариев
бот отправляет одно сообщение несколько раз, причиной тому стал параметр random_id, который должен быть каждый раз уникальным, а у меня был ‘random_id’ => 0.
Нет, бот отправлял сообщение несколько раз потому что несколько раз вызывался метод `messages.send`
пытаюсь сделать генерацию random_id, но почему-то бот все равно отправляет несколько сообщений.
Потому что проблема не решена несколько раз подряд вызывается `messages.send`
Если у вас бот работает через Callback API то надо проверить что вы всегда отвечаете ОК в ответ, сейчас в вашем когде есть `var_dump($random_id);` который тоже ломает это и Callback API будет присылать запросы повторно.
Посмотреть есть ли повторы в Callback API можно у Управлении сообществом > Работа с API
Попробуй уменьшить количество девяток, чтобы получилось что-то вроде:
Сталкивался с таким, не могу профессионально описать, почему так, но это работает.
В любом случае пробуй удалять по девятке, пока не получится.
Проблема вроде в том, что функция rand не поддерживает числовые типы с большими значениями.
Но попробовать определенно стоит, ведь я в отличии от вас предложил хоть какой-то, но вариант.
Как отправить сообщение через API ВК на Node.js Редактировано: 28.08.2020 в 04:45
Знакомство с методом messages.send
Если вы уже знакомы с тем, как использовать API ВКонтакте, то скорее всего вы захотели сделать первый шаг в работе с ним. Лично я начал свое погружение в VK API именно с секции сообщений. Сначала это была просто тестовая отправка сообщения.
И так, для того, чтобы отправлять сообщения, в VK API есть метод messages.send
Чтобы обращаться к VK API на Node.js, я всегда использую модуль easyvk. Есть и другие варианты, например, vk-io или node-vk-bot-api. Что использовать, решать вам. Но писать статьи я решил с примерами использования easyvk, так как эта библиотека мне знакома больше, чем любая другая, хотябы потому что я ее автор 🙂
На сайте-документации модуля написано подробно о том, как его установить и использовать.
Примеры
Чтобы эта и другие мои статьи о VK API не получились как все типичные статьи из интернета, я буду меньше говорить, и больше показывать.
Отправка сообщения от лица пользователя
Хотелось бы напомнить, что Messages API официально закрыт для аккаунтов ВКонтакте, но это не значит, что им нельзя пользоваться. В библиотеке easyvk, для получения доступа, авторизация происходит по данным официальных клиентов ВКонтакте (Приложение для Android, например), которые уже имеют доступ к секции Messages API. Вам почти ничего не надо делать для успешной отправки первого сообщения.
Если все получилось, вам придет сообщение с текстом Привет!
Отправка сообщения от лица сообщества
Как получить токен сообщества самым простым методом, я описал в этой статье
Чтобы получить доступ к диалогу с пользователем, он должен отправить вам любое сообщение
Параметры все те же.
Если все получилось, сообщество отправило сообщение с текстом Привет!
Отправка сообщения в беседу
Отправка сообщения в беседу от имени сообщества
Чтобы сообщество могло отправлять сообщения в беседу, сначала необходимо это сообщество пригласить в эту самую беседу. Для этого в настройках сообщества надо включить возможности для чат-ботов и открыть специальный сервис для приглашений.
Сервис можно будет найти в меню сообщества
Как отправлять сообщение от имени сообщества после приглашения в беседу
Это мы уже переходим к разработке мини-чат-бота. Но, конечно, это не он.
Сначала включаем Bots LongPoll (пример будет описан на нем, так как его сможет запустить каждый желающий, позже я буду показывать примеры создания чат-ботов с помощью Callback API тоже)
Для этого заходим в настройки сообщества. И включаем все, что касается LongPoll. А именно:
Мы будем отправлять сообщение сразу после того, как сообщество пригласили в беседу. Включим поддержку события входящего сообщения в настройках, так как информация о приглашении придет именно как сообщение.
Теперь сообщество будет кидать всем беседам приветственное сообщение сразу после приглашения.
Отправка стикера
ВКонтакте позволяет отправлять стикеры в сообщениях. Честно говоря, мне доводилось только один раз прибегать к отправке стикера. Это было, когда я писал чат-бота для глобальных бесед. Там надо было как-то реализовать пересылку любого стикера, который бы отправил пользователь. По-моему, у меня не получилось. Точнее, это работало только с бесплатными стикерами. Самое время разобраться в этом вопросе поглубже.
Все тот же messages.send
Если все получилось, то стикер отправился.
Отправка стикера как граффити
Да-да. И такое бывает. Особенно в последнее время. На сколько мне известно, на данный момент ВКонтакте хранит у себя на серверах 19к стикеров (там почти 20). И все они очень разные, прикольные. Некоторые уже нигде не найти. Но они все равно хранятся. Как в общем-то и любая другая информация в ВК. И это если не считать кастомных стикеров, которые люди загружают как граффити. Разберемся, как они это делают.
Для примера возьмем вот такой прикольный стикер https://vk.com/sticker/1-5041-352
Воспользуемся компонентом uploader для загрузки файла.
Вот есть еще такие стикосы
Отправка голосового сообщения
Происходит таким же образом, как и отправка любого документа.
Если вам интересна тема работы с аудио и тем, как я сделал наложение эффектов на голосовое сообщение (реверберация, дисторшн и другие), то можете почитать эту статью
А пока что я покажу простейший пример отправки голосового сообщения
Кстати говоря, отправка аудио сообщений работает и для сообществ! Просто используйте access_token сообщества для настройки под вас.
Отправляем изображение
Оба способа поддерживаются в easyvk, поэтому я покажу оба варианта загрузки.
Для загрузки файла с другого сервера в easyvk есть метод vk.uploader.uploadFetchedFile()
Для загрузки файла с жесткого диска в easyvk есть метод vk.uploader.uploadFile()
На этом все! Спасибо, что дочитали до конца. Надеюсь, что эта статья вам хоть чем-то помогла и вы научились чему-то новому 🙂
Random id vk api что это
Чат-бот общается с пользователями с помощью сообщений сообщества. Вы можете отправлять в сообщениях любые вложения, будь то фотографии, аудиозаписи или видео, документы, аудиосообщения, ссылки.
Сообщения отправляются с помощью запросов к API ВКонтакте. Здесь Вы можете узнать о том, как работают такие запросы.
Для отправки сообщения используйте метод messages.send. Обратите внимание, что с ключом доступа сообщества можно совершать до 20 запросов в секунду. Вы можете сократить число запросов к API, если группировать сообщения с одинаковым текстом (параметр message) для разных получателей — для этого перечислите идентификаторы получателей (до 100) в параметре user_ids. Кроме того, Вы можете группировать вызовы любых методов API, включая messages.send, с помощью execute — до 25 вызовов в одном запросе.
Используйте параметр random_id(int64), чтобы избежать повторной отправки сообщения одному и тому же получателю. Этот параметр должен быть всегда уникальным, поэтому используйте большие случайные числа.
В ответе метод вернёт Вашему серверу id отправленного сообщения или ошибку. Если Вы используете Callback API, в случае удачной отправки будет сгенерировано событие message_reply.
Если Вы хотите обращаться к разным методам API, будет удобнее использовать одну общую функцию для вызова любого метода.
vkApi_messagesSend(494075, ‘Hello world!’);
Параметр conversation_message_id позволяет взаимодействовать боту с сообщениями без использования общего id сообщения, который может отсутствовать в некоторых случаях.
С помощью метода messages.getByConversationMessageId можно получить информацию о сообщении по conversation_message_id. У бота должен быть доступ к переписке.
Вы можете использовать публичные объекты, которые уже были загружены ВКонтакте (прислать фотографию со стены своего сообщества или видеозапись из поиска), или загрузить новое вложение.
Обратите внимание, что после загрузки owner_id фотографии будет равен переданному peer_id, это правильное поведение. Для таких загрузок нет лимита, Вы можете загружать подобным способом фотографии для неограниченного числа пользователей.
Стоит иметь в виду, что каждый раз при указании в attachment фотографии не из сообщества, изображение загружается повторно от имени сообщества. Для таких загрузок существует лимит, стоит рассчитывать не более чем на 7 тысяч загрузок в сутки.
Чтобы загрузить новый документ для отправки, используйте метод docs.getMessagesUploadServer с id получателя в параметре peer_id, а затем действуйте по этой схеме.
Обратите внимание, что после загрузки owner_id документа будет равен переданному peer_id. Такое поведение правильное, это нужно для того, чтобы Ваш бот мог загружать новые документы для неограниченного числа пользователей.
Обходим запрет messages API Вконтакте через Python
Привет, Хабр. В своей предыдущей статье я рассказал о возможности доступа к методам раздела messages через документацию, для чего достаточно было лишь авторизоваться на сайте ВК. Многие тогда заявили, что это не является угрозой личным данным пользователей, а невозможность выкачать свои сообщения — недостаток платформы. Также в комментариях мне оставили ссылку на node.js библиотеку, которая может авторизовываться по логину/паролю и предоставлять доступ к API сообщений, притворяясь официальным приложением.
Статья и весь написанный код создавались только в образовательных и исследовательских целях и никогда не использовались для незаконной деятельности. Автор не призывает вас повторять какие либо описанные здесь действия и не несёт за них никакой ответственности.
Но не все люди знакомы c javascript и node.js, поэтому я и решил написать свою библиотеку на python, которым сейчас пользуются многие, позволяющую через «тестовые запросы» документации предоставить полный функционал messages API. Сразу прошу не злиться на меня в местах, где я буду повторять аспекты прошлого «выступления», потому что я хочу оформить эту статью в виде независимой документации.
Как этим пользоваться?
Сама библиотека находится в репозитории github-a (там же, в папке examples, находятся скрипт с примерами использования из этой статьи). Чтобы установить её на компьютер можно воспользоваться в терминале командой:
Теперь мы можем импортировать из этого пакета главный класс и создать его экземпляр, указав логин, пароль, какой вид авторизации использует данный аккаунт, а также директорию, куда мы хотим сохранить куки-авторизации пользователя. Это необходимо, чтобы пользователям с двухфакторной авторизацией не пришлось при каждом запуске скрипта постоянном вводить код из сообщения.
И по сути, на этом всё. Теперь нам остаётся лишь открыть документацию и использовать интересующие нас методы. Хочу сразу отметить, что такой подход позволяет нам использовать практически любой метод из документации, даже не относящийся к разделу messages:
Также мы можем комбинировать данную библиотеку с другими, к примеру, через vk_api мы можем загрузить фотографии с компьютера (код для этого действия приводится у них в разделе examples), а через vk_messages прикрепить эти вложения к сообщению:
Из любопытства я реализовал классическую функцию, которая в заданной папке создаёт подпапки людей, с которыми общался человек, и пытается выкачать последние сообщения и абсолютные url-ы фотографий. К моему счастью, всё работало как часы, и лишних ошибок не было:
Теперь же я хочу перейти к одной из самых интересных частей этой библиотеки: имея куки авторизации, мы можем выполнять абсолютно любые действия. Приведу свой личный пример, когда для постов группы, в которой я состою, мне нужно было составить таблицу, состоящую из ID поста и его автора. Но в чём была загвоздка: официальный api возвращает только человека, который опубликовал статью. Воспользовавшись сниффером, я увидел, что при наведении на дату публикации поста эти данные подгружаются с сервера. И после этого я написал обёртку, которая позволяла отправлять сколько угодно подобных запросов, используя лишь ссылку поста и куки авторизации, чтобы получать авторов. В примере ниже останется лишь избавиться от ненужных тегов:
Но что доказывает нам верхний кусок кода? Правильно, даже если ВК закроет тестовые запросы на своей документации, мы всегда сможем симулировать действия пользователя и получать нужную информацию. В качестве эксперимента я сделал небольшую функцию, которая через запросы «пролистывания» страницы может получать ссылки на фотографии без использования официального API.
Выглядит ли это громоздко? Да. Работает ли это намного медленнее, чем официальный api? Да. Но если ВК отнимут последнюю возможность доступа к сообщениям, мы всегда сможем найти выход.
Также отмечу, что я постарался добавить во все места библиотеки, где возможны ошибки, исключения с пояснениями, но если вы найдёте какие-то события, к которым не отображается пояснение, то прошу сообщить мне об этом.
Думаю, это довольно очевидно, но я всё-таки должен вас предупредить, что нужно быть осторожнее с сохранением куки, так как они по умолчанию сохраняются в той же папке, откуда был запущен скрипт, так что не бросайте их где попало, ведь именно для этого есть возможность выбрать их место сохранения. Кончено, через некоторое время эти куки сами по себе станут невалидными, но до этого момента они могут являться серьёзной угрозой безопасности вашего аккаунта
Как это работает?
Для тех, кто интересуется, что происходит под капотом данного скрипта, вкратце пройдусь по основным пунктам. При авторизации делаются простые request запросы, симулирующие вход пользователя, которые лишь слегка меняются в зависимости от вида авторизации, а после успешного входа куки сохраняются в pickle файл. При запросе к api через документацию, ко всем настраиваемым параметрам прибавляется «param_», то есть значение offset превратится в param_offset. Также в запросе передаётся hash-код, который содержится в атрибуте data-hash тэга кнопки «Выполнить». Насколько я заметил, это значение для каждого метода постоянно.
Так же отмечу один важный момент: пароль отправляется в кодировке ANSI, где символы русского алфавита разделяются знаком «%», и данного кода достаточно для реализации такого декодирования. Это может стать проблемой для некоторых линукс пользователей, ведь, насколько я помню, эта кодировка не входит по умолчанию в python на этой операционной системе.
Также одной из проблем для меня стало странное поведение некоторых методов. К примеру, если я менял местами параметры, то скрипт мог вернуть ответ в 10 раз меньше запрашиваемого или вообще ничего не вернуть. Для решения этой проблемы я просто решил распарсивать и отправлять параметры в строгом порядке, как они указаны в документации. Возможно это простое совпадение, но после этого проблем подобного рода у меня не возникало: