Удаление сообщений сообщества в чате другого сообщества
Sergey Klimov·18 Jul 2022
Часто возникает задача: подчищать сообщения сообщества (бота-персонажа) в чате основного сообщества. Но сложность возникает в том, что Автопилот при отправке сообщения в чат не возвращает ничего (просто 0) и поэтому не можем удалить сообщение.
После долгих тестов я нашел решение: нужно отправить сообщение по API и удалить так же по API.
Покажу на примере приветствия в чате. Т.е. при вступлении пользователя в чат сообщество-персонаж будет приветствовать участника и через время удалять свое сообщение. На примере этого сможете использовать уже для своих задач
Событие:
- Для примера буду приветствовать пользователя, для этого в событии
«Добавился в беседу или покинул ее» ставлю переключатель «добавился»
Действия:
- Формирую временную переменную
%text%с текстом приветствия. Здесь@id%vk_id% (%first_name%)— упоминание игрока в беседах. Больше переменных есть в инструкции по шаблонам переменных.
@id%vk_id% (%first_name%), добро пожаловать в чат!
- Для отправки сообщения в чат используем действие
«Отправить запрос» на адрес:
https://api.vk.com/method/messages.send
с параметрами:
v=5.131- версия ВКaccess_token= Ключ доступа сообщества (берем из настроек подключения АП). Я записал в ресурс для удобства, поэтому берем значение из ресурса, например так:{get}285143{/get}У вас номер ресурса будет другойrandom_id={date}%s{/date}{rand_range}1-1000{/rand_range}— рандомное число для предотвращения повторной отправки сообщения. В примере формируете текущее время в юниксе и случайное число от1до1000-
peer_ids=%peer_id%— id беседы. Как получить id беседы, прочитать можно в этой короткой инструкции group_id=%club_id%— id сообщества, от которого отправляем сообщение.message=%text%— текст сообщения из переменной%text%
Важно! Примеры взяты из документации ВК. Ее можно найти тут
- Чтобы получить id отправленного сообщения в беседе с помощью JSON.PATH сохраняем в переменную
%conv_mess_id%следующее значение:
%response.response.0.conversation_message_id%
- Для удаления сообщения через время, действием «Запустить таймер» устанавливаем время, через которое удалить сообщение. В моем случае 5 сек для тестирования.
Важно! Каждый запуск таймера тратит 1 милю, то есть, если у вас в команде 1 таймер, команда израсходует 2 мили (1 таймер + событие). Будьте внимательны.
- Для удаления сообщения используем действие
«Отправить запрос» на адрес:
https://api.vk.com/method/messages.delete
С параметрами:
v = 5.131- версия ВКaccess_token= Ключ доступа сообщества (берем из настроек подключения АП). Я записал в ресурс для удобства, поэтому берем значение из ресурса, например так:{get}285143{/get}У вас номер ресурса будет другой-
peer_id=%peer_id%— id беседы. Как ее получить, можно прочесть в соответствующей инструкции. group_id=%club_id%— id сообщества, от которого отправляем сообщение.cmids=%conv_mess_id%— id сообщения из переменной%conv_mess_id%delete_for_all=1— удалить сообщение для всех
Важно! Примеры взяты из документации ВК. Ее можно найти тут
После пункта 3 и 4 не забывайте сделать для себя отладочное сообщение при тестировании с выводом %response%Важно! После тестирования нужно поставить отладочное сообщение на паузу, иначе %response% будет перезаписан после отправки сообщения
