Как реагировать на комментарии только в постах с нужным хэштегом
Приступим сразу к делу. Суть решения: Автопилот первой командой будет запоминать ID созданных постов и записывать их в ресурсы, а второй командой проверять есть ли в этих ресурсах ID поста, который комментирует подписчик.
Если есть, значит коммент под постом, содержащим нужный хэштег. Это, к слову, позволяет настроить даже разные реакции на разные хэштеги.
Кстати, вместо тегов аналогично будет работать любое слово или фраза. Конечно же из тех, которые вы пропишите в настройках :)
Команда 1 - Запоминаем посты
Важно! В примере ниже реакция будет на публикацию всех постов, а если необходимо, то вы в событии прописывайте нужный хештег, например, #Автопилот
или несколько (через запятую).
Событие:
1) Для реакции на создание поста добавляем событие «Создан пост» с текстом содержащим ничего, для реакции на создание любого поста.
2) Для того, чтобы реагировать только на опубликованные посты, а не все, которые вам предлагают подписчики добавляем условие:
переменная %post_type%
совпадает с post

Действие:
1) Для того, чтобы Автопилот «запомнил» ID поста (он меняется при публикации) его необходимо записать в ресурс действием «Создать / изменить ресурс» с названием Посты Автопилота
и в содержимое добавить элементы массива, т.е. переменную %object_id%, которая будет содержать в себе ID вышедшего поста.

Расшифровка команды: Если пользователь создал пост с любым текстом (хоть тегом #автопилот
), то будет изменен (или создан) ресурс с названием «Посты Автопилота» (название конечно же может быть любое) в содержимое которого будет записан ID созданного поста (переменная %object_id%
) как дополнительный элемент массива. Напоминаю, что «массив» — это список ID через запятую.
Другими словами: мы создаем список через запятую (массив) постов с определенными хэштегами. Для возможности в дальнейшем проверять номера (ID) этих постов. Делается это по той причине, что ВК уведомлении о новом комментарии не присылает текст поста. Только в уведомлении о новом посте.
Команда 2 - Реагируем на коммент
Важно! В этом навороченном примере мы будем проверять, под правильным ли постом пользователь написал комментарий, ограничивать количество выполнений команды до 1 раза, и позволять редактировать комментарий 1 раз (если есть необходимость). Не забываем про создание ключа для комментариев.
Событие:
1) Для реакции на комментарий пользователя добавляем событие «Написал комментарий» под постом (убираем ID поста) с текстом содержащим ничего. Это все делается специально, для того, чтобы Автопилот реагировал на комментарий под любым постом.

Условия:
2) Условие Числовая переменная равна. Здесь переменная непростая, поэтому на нем остановимся поподробнее. Во-первых, из статьи про переменные понятно что ID поста, к которому написан комментарий содержится в переменной %id_1%
.
Наша задача понять находится ли этот ID в содержимом ресурса, созданного ранее. У нас это ресурс с названием «Посты Автопилота».
Специальной функцией получаем содержимое этого ресурса: {get}Посты Автопилота|name|body{/get}
. Расшифровка: найти ресурс (get) с названием (name) равным «Посты Автопилота» и получить его содержимое (body).
Но это еще не все. Надеюсь, вы еще помните, что содержимое там в виде массива. Поэтому для обработки массива воспользуемся другой динамической переменной — {array}.
В примерах находим возможность получить номер элемента массива по значению этого элемента: {array}%array%|Элемент массива|num{/array}
. А также то, что итоговое значение номера «0» — это то же самое, что «номер не найден»
Вместо Элемент массива
вставим ID поста — %id_1%
. Вместо %array%
вставим массив айдишек постов. А это, как помните, переменная: {get}Посты Автопилота|name|body{/get}
.
В итоге получится:
{array}{get}Посты Автопилота|name|body{/get}|%id_1%|num{/array}
Именно это я и вставил в условие числовая переменная. Оно должно быть больше 0
, т.е. ID поста есть в ресурсе.
На этапе тестирования, рекомендую добавить «реакцию на невыполнение» в условие. Которая будет срабатывать если условие не выполнилось. И писать вам об этом в личку от имени вашего сообщества. Рекомендую также туда прописать переменную. Чтобы сразу понимать ее значение. А лучше как-то так
Номер поста: %id_1%
Содержимое ресурса: {get}Посты Автопилота|name|body{/get}
Номер элемента массива: {array}{get}Посты Автопилота|name|body{/get}|%id_1%|num{/array}

3) Для реакции на комментарий только один раз необходимо добавить условие
переменная {json}%player.post%|%id_1%{/json}
содержит not found
Поясню: здесь с помощью функции {json} мы проверяем, что поле игрока %player.post%
не содержит %id_1%
, т.е. игрок еще не писал комментарий под нужным постом. Как работать с функцией {json} можно смотреть тут

Опционально: Если необходимо реагировать на изменение комментария дублируем секцию, нажав на Еще → Дублировать секцию.
Открепляем событие «Написал комментарий» добавляем событие «Исправил комментарий»
Открепляем условие (или заменяем копией) и создаем условие:
числовая переменная {json}%player.post%|%id_1%{/json}
равна 1
Т.е. мы будем позволять исправлять комментарий один раз, если надо больше, то просто измените значение.


Действия:
Важно! ОБЯЗАТЕЛЬНО ПРОЧТИТЕ ИНСТРУКЦИЮ ПРО НАПИСАНИЕ КОММЕНТАРИЕВ! ИНАЧЕ ДЕЙСТВИЕ РАБОТАТЬ НЕ БУДЕТ!!!
1) Дальнейшие действия могут быть любыми. Дальше осталось добавить действие. Им может быть например действие Написать комментарий. Которое сразу в комментариях ответит человеку на его слова.
В действии ID поста оставьте в значении %post_id%
. В «Еще → Больше опций блока» впишите переменную %object_id%
в поле «Ответить на комментарий».
Текст может быть любым. У нас для примера:
Ура, %first_name%, все работает.

2) Чтобы не позволить пользователю написать еще раз комментарий, поле профиля игрока post.%id_1%
увеличиваем на 1
Как работать с полями игрока прочитайте пожалуйста в этой инструкции.

Думаем о будущем
Тонкость этой схемы в том, что содержимое ресурса умещает только 64000 символов. Поэтому если у вас очень много таких постов, все могут не влезть в какой-то момент. Поэтому спустя несколько сотен постов, стоит сменить название ресурса в командах на новое. Например «Посты Автопилота 2».
Думаем о нюансах
Особенности редактирования поста
Вполне вероятно, что админ может забыть добавить хэштег в пост при создании. И опубликовать его без хэштега. А потом отредактирует и вставит.
Конечно же на такой пост АП не будет реагировать. Ибо событие то уже произошло! И также никак это не обыграть, ибо в ВК нет события «Отредактирован пост».
Но выход конечно же есть. К тому же элементарный. В таком случае админу достаточно прописать айди нового поста в ресурс в конец после запятой. Да, просто руками. Если не знали, в ссылке на пост ID поста — это последнее число. Например, в ссылке: vk.com/wall-41103148_4556
ID поста 4556
.
Тестировать обязательно!
Обязательно делаем несколько постов которые должны сработать (2-3 минимум), а также несколько, которые не должны (хотя бы 1).

Комменты успешно сработали. Проверим что у нас с ресурсом:

Все отлично. В ресурсе несколько айдишек постов через запятую.
Статью при поддержке Олександра написал Андрей Горячих
Если у вас остались вопросы, можете писать в комментариях к этому посту. Или поставить там 💙 лайк, если все супер.
Вернуться на главную страницу инструкций