Vk api получить id сообщения

При отправке сообщения ботом пользователю, крашится с ошибкой: vk_api.exceptions.ApiError: [901] Can’t send messages for users without permission, у бота имеются все нужные разрешение в настройках.

При отправке сообщения ботом пользователю, крашится с ошибкой: vk_api.exceptions.ApiError: [901] Can’t send messages for users without permission , у бота имеются все нужные разрешение в настройках, так же у пользователя нет запрета на сообщения.

import vk_api from vk_api.utils import get_random_id from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType vk_session = vk_api.VkApi(token=»Тут ваш токен») vk = vk_session.get_api() longpoll = VkBotLongPoll(vk_session, «Айди сообщества (Не кастомное) пример: 94124211») for event in longpoll.listen(): if event.obj.text != «»: if event.from_user: vk.messages.send( user_id=event.obj.from_id, random_id=get_random_id(), message=event.obj.text)

задан 6 окт 2019 в 4:48

Сам встретился с этой ошибкой, проблема оказалась в том, что мой бот пытался ответить на своё же сообщение, т.е. getFromId и getText на проблемном сообщении показал ответ сервера и минусовой id, вместо ожидаемого сообщения пользователя

Как скачать список ID всех пользователей из диалогов сообщества VK

Как сообщение бота попадает в пачку сообщений от вк пока разбираюсь.

ответ дан 11 мая 2020 в 4:55

Переписка с сообществом может быть инициирована только самим пользователем. Написать от имени группы людям, которые не переписывались с ним, не получится. Однако, когда переписка инициирована, сообщество сможет отправлять сообщения без ограничений по времени или количеству. Это будет продолжаться до тех пор, пока пользователь не запретит сообществу себе писать.

Пользователь может инициировать переписку:

  • отправив сообществу сообщение со страницы сообщества;
  • с помощью кнопки «Разрешить сообщения» на странице сообщества;
  • отправив сообществу сообщение с помощью виджета «Сообщения
    сообщества», размещённого на сайте сообщества;
  • разрешив отправлять ему личные сообщения с помощью виджета
    «Разрешить писать
    сообществу» или
    метода API VK в стороннем
    приложении
    (отправлять сообщение для этого не требуется).
Еще по теме:  Как Вконтакте запретить доступ к фотографиям

Источник: Сообщения сообщества.

ответ дан 6 окт 2019 в 7:40

18k 5 золотых знаков 21 серебряный знак 45 бронзовых знаков

901 — Пользователь запретил отправку сообщений от имени сообщества. Это значит, либо пользователь запретил получать сообщения от группы, либо ещё не писал в неё. Если, пользователь ВКонтакте не написал сообщение в группу, значит он и не может получать их, так как это скорее всего как анти-спам.

ответ дан 13 янв 2021 в 12:23

Скорее всего проблема в ID пользователя.
Можно использовать:
event.user_id

ответ дан 26 июл 2021 в 12:26

35 3 бронзовых знака

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
import vk_api from vk_api.utils import get_random_id from random import * from vk_api import VkUpload from vk_api.keyboard import VkKeyboard, VkKeyboardColor from vk_api.

bot_longpoll import VkBotLongPoll, VkBotEventType keyboard=VkKeyboard(one_time=True) keyboard.add_button(‘Первая кнопка’, color=VkKeyboardColor.PRIMARY) keyboard.add_line() keyboard.add_button(‘Вторая кнопка’, color=VkKeyboardColor.POSITIVE) keyboard.add_line() keyboard.

Получение API id и API hash от Telegram | Приложение Телеграм

add_button(‘Третья кнопка’, color=VkKeyboardColor.NEGATIVE) def write_message(sender, message): authorize.method(‘messages.send’, ‘peer_id’:sender, ‘chat_id’: sender, ‘message’: message, «random_id»: get_random_id()>) token = » def sticker(sender): authorize.

method(‘messages.send’,’peer_id’: sender, ‘chat_id’: sender, ‘sticker_id’: 71, «random_id»: get_random_id()>) def clava(sender): authorize.method(‘messages.send’, ‘peer_id’: sender, ‘chat_id’: sender, ‘message’: ‘держи’, «random_id»: get_random_id(), ‘keyboard’:keyboard.

get_keyboard()>) def smile(sender, message): authorize.method(‘messages.send’,’peer_id’: sender, ‘chat_id’: sender, ‘message’: message, «random_id»: get_random_id()>) def picture(sender): authorize.

method(‘messages.send’, ‘peer_id’:sender, ‘chat_id’: sender, ‘message’: ‘держи’, «random_id»: get_random_id(), ‘attachment’:’,’.join(attachments)>) authorize = vk_api.

VkApi(token=token) longpoll = VkBotLongPoll(authorize, group_id=202585633) list_of_users=[] image=»C:/Users/Виктор/PycharmProjects/vkbot/1594262844_preview_В ПАЛАТУ ЖИВО.jpg» upload=VkUpload(authorize) for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW and event.

from_chat and event.message.get(‘text’) != «»: received_message = event.message.get(‘text’) sender = event.chat_id attachments=[] upload_image = upload.photo_messages(photos=image)[0] attachments.append(‘photo<>_<>’.

Еще по теме:  Рейтинг авторов и групп ВК

format(upload_image[‘owner_id’], upload_image[‘id’])) if received_message == «Привет» or received_message== «привет»: write_message(sender, «привет») sticker(sender) if list_of_users.count(sender) ==0: list_of_users.append(sender) elif received_message == «Пикча» or received_message== «пикча»: picture(sender) elif received_message == «Клава» or received_message== «клава»: clava(sender) elif received_message == «рассылка» or received_message== «Рассылка» and sender == 454303468: for user in list_of_users: write_message(user, ‘Рассылка! Если тебе дошло это сообщение, значит рассылка работает!’) else: write_message(sender, ‘я вас не понимаю. ������’)

return (query, tip)

I hope this helps you solve the problem.

Источник: oshibkam.ru

Как получить message_id vk api?

5e5abfb3ddf7a396883719.png

как получить id сообщения, вк апи, в запросе который прилетает от сервера, есть id в объекте message, но он равен нулю, почему так?

  • Вопрос задан более трёх лет назад
  • 1747 просмотров

Решения вопроса 0

Ответы на вопрос 1

Меня невозможно остановить, если я смогу начать.

Если это сообщение от бота, то никак.
Обсуждалось тут Как переслать сообщение в беседу? (см. комменты к первому ответу)
и тут https://github.com/negezor/vk-io/issues/127

если у вас message.id = 0 то никак это сообщение вы дальше использовать не сможете (переслать и тд по id)

Ответ написан более трёх лет назад

Нравится 1 Комментировать

Ваш ответ на вопрос

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

javascript

  • JavaScript
  • +2 ещё

Как сохранить функцию php при срабатывании скрипта js?

  • 2 подписчика
  • 10 часов назад
  • 85 просмотров

Источник: qna.habr.com

Курсы javascript

Здравствуйте. Имеется ли процедура для execute, с помощью которой можно получать комментарии к посту, чей ID явно не указан? То есть, по номеру поста со стены? К примеру, по этому принципу работает следующий код (из Ответа отсюда), но выяснилось, что он возвращает лишь первую сотню комментариев —

// [url]https://ru.stackoverflow.com/questions/604524/[/url] var owner_id = Args.owner_id; var user_id = Args.user_id; var offset = Args.offset; var post_count = Args.post_count; if (post_count == null) post_count = 1; // количество обрабатываемых постов // Получаем список постов var posts = API.wall.get(< «owner_id»: owner_id, «offset»: offset, «count» : 100, >); var i = 0; var userComments = <>; while(i < posts.items.length i < post_count) < var post_id = posts.items[i].id; var comments = API.wall.getComments(< «owner_id»: owner_id, «post_id»: post_id, «count» : 100, >); var j = 0; while(j < comments.items.length) < if (user_id == null || comments.items[j].from_id == user_id) userComments.push(comments.items[j]); j = j + 1; >i = i + 1; > return userComments;

Еще по теме:  Как подключиться к сети Вконтакте

А вот этот код (отсюда), возвращающий 2500 комментариев, требует явного указания идентификатора поста:

// [url]https://ru.stackoverflow.com/questions/780304/[/url] // count —> 2500 / по умолчанию —> 10 // offset —> 0, 2500, 5000, 7500 и тд var owner_id = Args.owner_id; var post_id = Args.post_id; var offset = Args.offset; var count = Args.count; if(post_id == null || owner_id == null)< return ; // Если параметры не заданы, возвращаем пустой массив > if(count == null) < count = 10; // Значение по умолчанию >if(offset == null) < offset = 0; // Значение по умолчанию >var i = 0; var items = []; while(i < 25 count >items.length) < var cur_count = count — items.length; if(cur_count >100) < cur_count = 100; >items = items + API.wall.getComments()[«items»]; i = i + 1; > return ;

Вопрос заключается в совмещении функционала из обоих кодов, чтобы вызывать процедуру можно было с указанием смещения offset, а не с указанием номера поста. Может быть, для этого в первый код (настроенный на обработку одного поста за один раз) достаточно будет добавить последовательный вызов методов со смещением, как в следующем коде, получающем за раз 500 постов? —

var owner_id = Args.owner_id; var offset = Args.offset; return API.wall.get(< «owner_id» : owner_id, «count» : 100, «filter» : «owner», «offset» : parseInt(offset) + 0 * 100 >).items + API.wall.get(< «owner_id» : owner_id, «count» : 100, «filter» : «owner», «offset» : parseInt(offset) + 1 * 100 >).items + API.wall.get(< «owner_id» : owner_id, «count» : 100, «filter» : «owner», «offset» : parseInt(offset) + 2 * 100 >).items + API.wall.get(< «owner_id» : owner_id, «count» : 100, «filter» : «owner», «offset» : parseInt(offset) + 3 * 100 >).items + API.wall.get(< «owner_id» : owner_id, «count» : 100, «filter» : «owner», «offset» : parseInt(offset) + 4 * 100 >).items;

Источник: javascript.ru

Рейтинг
( Пока оценок нет )
Загрузка ...