Примеры настройки — Рулетка в комментариях
Предупреждение — ЧИТАТЬ ВСЕМ
Статья приведена лишь для демонстрации возможностей Автопилота и потенциальных применений в будущем.
Если у вас большое сообщество ВКонтакте (от 1000 человек) —эта инструкция не для вас. Просто закройте её крестиком.
НЕ ПЫТАЙТЕСЬ настраивать «рулетку» у себя в комментариях.
Мы предупредили.
Ниже причины, почему это может отрицательно повлиять на ваше сообщество и продвижение в целом.
На данный момент у ВКонтакте есть ограничения (лимиты), сколько раз в секунду могут вызвать команду все пользователи. Если число вызовов превысит некую цифру (её знает только ВК) — то VK API вернёт ошибку и не будет выполнять вашу команду. Ни сейчас, ни в будущем. Кроме этого, если ВК сочтёт комменты вашего бота однотипными, то будет возвращать ошибку для всех подписчиков.
То есть люди не получат ответа на коммент. И будут писать вам в ЛС сообщества и ругать вас: «Почему раздача призов не работает???? ИСПРАВЬТЕ!!!11».
Также эта механика относится к разряду ресурсоёмких. И тут появляются ещё и ограничения со стороны Автопилота. Очень большое число событий в секунду может замедлить работу сервиса. И опять, как следствие, вы получите недовольных подписчиков. Вам оно надо?
В будущих версиях Автопилота капризы ВК будут обходиться самым гуманным для вас способом (чтобы не платить за выделенные сервера или сторонние сервисы). Следите за новостями.
Подробное видео с демонстрацией (настройка на ходу)
Советую смотреть на скорость 1,5x. Старался объяснять многие моменты по несколько раз. Более компактная инструкция со скринами находится ниже.
Условие задачи
Новички и заказчики, обратите внимание!
Вот так должна выглядеть раскладка всей автоматизации перед тем, как вы начинаете её делать в Автопилоте. Особенно это касается заказчиков, которые пишут пожелания по игре технарю. Считайте, что это пример идеального (почти) технического задания. Чем подробнее напишете — тем больше вероятность, что ваши «хотелки» будут реализованы (а не проигнорированы).
(1) Подписчик пишет слово ИГРАТЬ в комментариях к посту.
Высылаем ему ответный комментарий с картинкой с 3 окошками. В окошках находится один из призов. Разберём ситуацию с тремя призами (их количество ограничено только вашей фантазией: «скидка 10%», «скидка 15%, «скидка 20%».
(2) Те, кто получают 10-10-10, 15-15-15, 20-20-20 — выиграли. Им предлагаем написать в ЛС сообщение РЕКВИЗИТЫ и оплатить товар со скидкой. Либо продолжить игру в комментариях.
(3) Если человек выиграл приз (скидку) и пишет в ЛС слово РЕКВИЗИТЫ:
- Мы высылаем ссылку на оплату товара, в которой учтена скидка
- Мы блокируем возможность играть в комментариях. При попытке написать ИГРАТЬ бот напишет подписчику коммент с текстом: «Вы уже забрали ссылку на оплату со скидкой»
(4) Если человек выиграл приз (скидку) и снова пишет ИГРАТЬ:
- Мы не даём ему заказать товар с этой скидкой по ключевому слову РЕКВИЗИТЫ в ЛС сообщества. Будет отправлена ссылка на оплату товара по полной цене (без скидки).
- Мы не даём ему выиграть тот же приз. Только другие, если он их ещё не выигрывал.
(5) Разумно ограничить игру — например, не чаще, чем раз в 30 минут. Если между первым и вторым комментом подписчика пройдёт меньше, чем X минут, то ему будет написан ответный комментарий: «Приходите позже»
Позже введём возможность новичкам поиграть до 5 раз подряд, а потом попытки будут добавляться по одному разу в сутки.
Подготовка
Отрисовка картинок
Вам нужно вручную нарисовать (в Photoshop или Canva) все необходимые варианты распределения призов в окошках. Примеры картинок ниже:


Число всех возможных картинок считается по формуле: число призов ^ число окошек
(^
— знак возведения в степень). Например, в нашем случае (3 приза и 3 окошка) максимальное число картинок составит 3³ = 27
. Список ниже:
1) 10 10 10
2) 10 10 15
3) 10 10 20
4) 10 15 10
5) 10 15 15
6) 10 15 20
7) 10 20 10
8) 10 20 15
9) 10 20 20
10) 15 10 10
11) 15 10 15
12) 15 10 20
13) 15 15 10
14) 15 15 15
15) 15 15 20
16) 15 20 10
17) 15 20 15
18) 15 20 20
19) 20 10 10
20) 20 10 15
21) 20 10 20
22) 20 15 10
23) 20 15 15
24) 20 15 20
25) 20 20 10
26) 20 20 15
27) 20 20 20
При этом необязательно рисовать все картинки, а можно только необходимые. Кстати, в настройках команды будет учтено, чтобы можно было легко добавлять и удалять картинки, выдаваемые подписчику.
Загрузка картинок
Для картинок создал фотоальбом в сообществе и загрузил картинки в него (тогда будут видны всем подписчикам). Если хочется большей скрытности — есть 2 варианта:
1) Можно создать фотоальбом в другом сообществе, которое никто не знает, и выложить картинки в него. Его найдут только ну очень внимательные подписчики.
2) Можно сделать альбом в основном сообществе, затем скрыть весь раздел «Фотографии» в настройках сообщества. Единственный минус: подписчики не будут видеть ни один фотоальбом (но фотографии из него будут доступны по ссылкам).
Далее копируем ссылки вида photo-XXXXX_YYYYY
из строки браузера.
Картинки я решил размещать в разделе «Ресурсы». Создал по ресурсу для каждой из ситуаций: «Не выиграл», «Выиграл 10%», «Выиграл 15%», «Выиграл 20%». Ссылки на картинки вставляю в соответствующие ресурсы.
Заказчик нарисовал всего 15 картинок из 27 возможных. Так получилось, что:
- Ресурс «Не выиграл» содержит 12 картинок — то есть это массив типа
col
, содержащий 12 элементов, каждый элемент — с новой строки. То есть если человек не выиграл, мы можем показать ему случайную 1 из 12 картинок. - Ресурсы с выигрышами — по одной картинке.
Зато команды получатся простые и универсальные.

Запоминаю номера ресурсов — пригодятся.
Расчёт вероятности
Главная задача маркетолога — сделать такую движуху в комментариях, чтобы люди не выигрывали сразу же после второго-пятого коммента. То есть у людей должен быть интерес играть ещё, ну а вы не потеряете все призы за первые минуты розыгрыша и не уйдёте в минус. (;
Поэтому важно заложить правильные вероятности выпадения «выигрышных» случаев. Рассмотрим наш пример с 3 призами и 3 окошками.
Первый случай. Что, если не настраивать вероятность специально, а сделать все картинки равновероятными. То есть будем генерировать случайное число от 1 до 27, причём такое число соответствует номеру картинки. В этом случае вероятность выигрыша хоть какого-то приза составит 3/27 (то есть 1/9 или 11,1%), а вероятность проигрыша составит 24/27 (то есть 88,9%).
Второй случай. Что, если привязать свою вероятность к каждому из вариантов. Так, самый «редкий» приз «20%» может выпадать не 1 / 27 раз (3,7%), а реже — скажем, 1%. Остальные чуть чаще.
В общем, расстановка вероятностей зависит от ваших маркетинговых целей. Экспериментируйте или обратитесь за консультацией к специалистам.
Для теста ниже я взял слишком добрую систему (которая слишком поощряет клиентов и делает беднее меня):
- генерируем рандомное число от 1 до 1000
- любой невыигрышный результат будет соответствовать числу от 1 до 600 (т.е. во время каждой раскрутки рулетки вероятность проиграть = 600/1000 = 60% — это очень много)
- выигрыш 10-10-10 соответствует числу от 601 до 850 (вероятность 25%)
- выигрыш 15-15-15 — числу от 851 до 950 (вероятность 10%)
- выигрыш 20-20-20 — числу от 951 до 1000 (вероятность 5%)
Структура команды
Сначала я выписал в файл, что должно быть в команде, чтобы работали пункты (1) и (2). Потом начал дополнять ограничениями, чтобы учесть (3), (4) и (5).
Если команда кажется сложной — возможно, так и должно быть. Прочитайте инструкцию до конца, потом вернитесь к началу. Тогда будет понятно, откуда взялись те или иные ограничения.
Команда сделана именно так, чтобы:
- при эксплуатации в платном Автопилоте она тратила по 1 миле на каждый комментарий (работала экономно)
- можно было легко добавить новые картинки
Команда 1: Архив списков
Сделаем 4 списка (по научному — 4 синих события «В списке подписчиков»):
- для тех, кто уже выиграл приз «10%» (человек будет находиться в этом списке, даже если отказался от приза, то есть продолжает крутить рулетку дальше)
- для тех, кто уже выиграл приз «15%»
- для тех, кто уже выиграл приз «20%»
- для тех, кто оплатил и отказался играть дальше
Эта команда не запускается. Она должна быть выключенной.
Запоминаем или записываем номера списков.
ВНИМАНИЕ! У вас будут другие номера списков, событий и действий. Не копируйте их бездумно из скриншотов.

Команда 2: Собственно розыгрыш
Событие
Обычное событие «Написал комментарий». Ссылку на пост вставляем в первое поле в самый последний момент (когда всё остальное уже настроено)

Условия, разрешающие выполнять команды
(1) Запрещаем играть тем людям, которые выиграли, а потом написали в ЛС ключевик РЕКВИЗИТЫ. В следующих командах будем добавлять этих людей в список Забрал приз
(у меня его номер 115985
, у вас свой).
Добавляем условие «Уровень списка / количество выполнений». Мы разрешаем данную команду для розыгрыша тем, кого нет в этом списке (у них уровень списка равен 0) и запрещаем тем, кто есть в списке (у них уровень списка 1 или больше, но точно не 0).

(2) Запрещаем играть тем людям, которые пишут второй комментарий чаще, чем раз в XX минут / часов. (В реальной рулетке можно поставить и больше.)
Условие «После выполнения прошло». Для теста поставил переключатель «не меньше» и 30 секунд. То есть команда запустится, если второй раз написал через 30, 31, 32… или более секунд после первого раза. А если менее 30 секунд — то подписчик получит ответный комментарий с ругачкой «Приходите позже»
Отслеживаю не выполнение события (писать могут как угодно часто), а выполнение данной команды. В первом поле прописал её номер.

Определяем один из четырёх исходов (“блок вероятности”)
(1) Генерируем рандомное число от 1 до 1000 => {rand_range}1-1000{/rand_range}
=> записываем в переменную %rand_num%

(2) В зависимости от значения %rand_num%
указываем номер ресурса, откуда будем вызывать одну из картинок => записываем в условную переменную %res_num%
Значения условной переменной следующие:
Номер ресурса для 20%
(у меня16746
), если:
— числовая переменная%rand_num%
от951
до1000
,
— а также подписчик не в спискеВыиграл 20%
(у меня115982
)Номер ресурса для 15%
(у меня16745
), если:
— числовая переменная%rand_num%
от851
до950
,
— а также подписчик не в спискеВыиграл 15%
(у меня115981
)Номер ресурса для 10%
(у меня16744
), если:
— числовая переменная%rand_num%
от601
до850
,
— а также подписчик не в спискеВыиграл 10%
(у меня115980
)Номер ресурса для проигрыша
(у меня16743
) — во всех остальных случаях. А это случаи:
а) либо когда выпало число невыигрышное от1
до600
(нет выигрыша)
б) либо когда выпало число выигрышное от601
до1000
, но подписчик уже есть в списке (ранее выигрывал этот приз, но отказался от него, т.к. продолжает играть)

В пакетах условий использовали условия: «Числовая переменная…» и «Уровень списка».
Начинаем проверку именно с главного приза, т.к. если человек выиграл его — то вряд ли откажется от него и продолжит играть для получения менее важных призов.
Такая структура переменной очень удобна. Прописали вероятности только в одном месте — здесь. Далее будем ссылаться только на номера ресурсов, в которых лежат картинки для выигрыша или для проигрыша.
Достаём из ресурса случайную строку — ссылку на картинку
(3) Вызываем ресурс по номеру и получаем основное поле («тело») ресурса => {get}%res_num%{/get}
=> записываем в переменную %res%

(4) Определяем число строк в ресурсе => {array}%res%|0|count|col{/array}
=> записываем в переменную %res_strings%

(5) Генерируем рандомное число от 1
до %res_strings%
(выбираем случайным образом любую строку ресурса) => {rand_range}1-%res_strings%{/rand_range}
=> записываем в переменную %string_num%

(6) Вызываем переменную %res%
(теперь это массив строк), запрашиваем номер строки и получаем значение строки => {array}%res%|%string_num%|val|col{/array}
=> записываем в переменную %string_val%

Формируем текст сообщения
(7) В зависимости от значения %res_num%
указываем текст => записываем в условную переменную %text%
Значение переменной сформируем так:
— Текст с поздравлением — если договорились, что тащим картинку из ресурса для одного из выигрышей, то есть числовая переменная %res_num%
принимает значения от Номер ресурса для 10%
до Номер ресурса для 20%
:
@id%subs_id% (%first_name%), вы выиграли!<br>Пишите РЕКВИЗИТЫ в ЛС, чтобы получить ссылку на оплату со скидкой.<br>Если вы отказываетесь от выигранной скидки и хотите выиграть больше -- пишите ИГРАТЬ в новом комментарии
— Текст с огорчением — во всех остальных случаях:
@id%subs_id% (%first_name%), вы не выиграли, попробуйте ещё

(8) Отправляем ответный комментарий с текстом из переменной%text%
и вложением из переменной %string_val%

Добавляем человека в список тех, кто уже выигрывал этот приз
Сначала определим в условной переменной, в какой список будем записывать человека (в зависимости от условий).
А потом запишем в список с номером, взятым из этой переменной.
(9) В зависимости от ситуации, то есть значения ресурса %res_num%
указываем номер списка победителей => записываем в условную переменную %win_list%

(10) Добавляем человека в список с номером %win_list% и ставим уровень 1

(11) Чтобы отладить команду (проверить, что всё работает как надо), я отправляю себе отладочное сообщение:

Команда 3: Заказ товара со скидкой через ЛС ВК
Событие
1) Событие «Написал сообщение» с текстом равным реквизиты

Рекомендую добавить условие:
- уровень списка
115982
равен0
- уровень списка
115983
равен0
- уровень списка
115984
равен0
Нажать «Если не», затем «Еще» и в реакции на невыполнение ввести текст, например:
Оплатить по полной стоимости можно тут:
{payment_link}0|0|t=Оформление слона&s=10000{/payment_link}
Вы пока не выиграли скидку. Чтобы её получить, примите участие в розыгрыше в этом посте:
Ссылка на Ваш пост с игрой.

Это условие дает вариант игроку, который не участвует в розыгрыше, купить товар сразу.
Действия
1) В зависимости от уровня списка формируем цену со скидкой и записываем в условную переменную %price%

2) Отправляем сообщение игроку со текстом и ссылкой. Например,
Вот ваша ссылка, спешите оформить заказ (а то в течение 24 часов ваш слон убежит)
{payment_link}+24 hour|0|t=Оформление слона&s=%price%&exps=10000{/payment_link}

3) Добавляем игрока в список 115985
и устанавливаем значение 1
. Т.е. устанавливаем флаг, что игрок уже получил приз.

4) Отправляем сообщение администратору со хештегом и ссылкой на игрока. Например,
#РУЛЕТКА_ЗАКАЗ_ТОВАРА
Кто: %vk_link%
Какой заказ: %price%

Задать вопрос, оставить замечание или пожелание (или просто лайкнуть инструкцию) можно в этом посте.
Вернуться на главную страницу инструкций