Прием и исключение из сообщества через Google Script
Особая благодарность с помощью в написании скрипта Дмитрию Павличенко.
Подробнее актуальную информацию про ограничения можно прочесть на этой странице документации ВКонтакте (п. 3).
ОФИЦИАЛЬНАЯ ПОЗИЦИЯ Автопилота по поводу Standalone:
Запрещено хранить ключи доступа Standalone в Автопилоте в любом виде.
Вы можете спросить, а как тогда? У нас есть решение через хостинг и скрипт, но некоторым нашим клиентам сложно это все настроить, поэтому держите решение.
Плюсы:
- Ключи доступа Standalone не хранятся в Автопилоте.
- Недоброжелатель (недобросовестный сотрудник) не сможет скопировать ваш ключ и навредить вашей репутации.
- Доступ к скрипту имеете только вы.
Минусы:
- Нужно уметь внимательно читать документацию.
- Ключ доступа Standalone приложения. Это ключ доступа пользователя, но с доступом почти ко всем возможным методам ВК. Используется для таких мудрёных действий как «Одобрить заявку в сообщество» или «Удалить из сообщества» Ограничение — до 3 запросов в секунду.
Особенности ключа накладывают определенные частотные ограничения. Поэтому:
- действие может выполняться не мгновенно. Нормальное время выполнения: от 1 сек до 2 мин.
- ЗАПРЕЩЕНО запускать для большого количества (больше 3-х) подписчиков одновременно!
В общем не используйте это действие для массовых процессов (например, в Геткурсе или добавляя в группу Senler). Потому что вы превысите лимиты по частоте и получите кучу ошибок. Для массового запуска подобных операций есть специальный инструмент.
- Еще одна особенность в том, что ключ привязан к авторизации. Поэтому важно чтобы вы знали заранее, что он периодически слетает! Например при «выходе» из ВК или смене пароля. Это особенности ВКонтакте и с этим ничего не поделать. Просто отслеживайте и когда перестает работать, пересоздайте ключ повторно и он продолжит вам помогать :-)
Наглядные примеры настройки команд будут ниже, но сначала скрипт и немного теории.
Создание скрипта
Идем на сайт https://script.google.com/ и выбираем «Создать проект» — откроется редактор скриптов. Сохранять скрипт можно горячей клавишей Ctrl+S. Название скрипта нам не важно. Для примера мы будем одобрять заявку в закрытое сообщество методом https://vk.com/dev/groups.approveRequest
Что мы имеем два параметра:
group_id
- идентификатор группы, заявку в которую необходимо одобрить.
положительное число, обязательный параметр. Если у вас идентификатор сообщества:-41103148
, то оставляем только число без минуса.user_id
- идентификатор пользователя, заявку которого необходимо одобрить.
положительное число, обязательный параметр.
У вас это будет переменная%vk_id%
Для генерации ключа доступа Standalone можете воспользоваться этим приложением.
Важно! Приложение не хранит ваш ключ оно просто отправляет запрос и ВК само генерирует вам ключ в браузере.

Предупреждение! Сгенерированный ключ доступа сообщества имеет доступ ко всем сообществам. где вы админ, поэтому будьте внимательны.
В итоге вы получаете ссылку вида:
https://oauth.vk.com/blank.html#access_token=your_access_token&expires_in=0&user_id=Ваш ID
Копируете your_access_token и входите в редактор скриптов. Не забудьте скопировать скрипт для запросов в редактор и заменить строчку с токеном.
var report = []; function doPost(e){ var data_array = e.parameter; //Превращаем строку, переданную Автопилотом, в строку-массив. //Для отладки //report["data_array"] = data_array; report = VK_request(data_array); //Завершаем работу скрипта и отправляем ответ SpreadsheetApp.flush(); return ContentService.createTextOutput(report); }
function VK_request(data_array){ // Сюда вставляем ключ Standalone const access_token = 'you_standalone_token'; const api ='https://api.vk.com/method/'; var vk_method = data_array['method']; var v = data_array['v'] || '5.131'; var url = api+vk_method; var data = { ...data_array, 'access_token': access_token, 'v': v, }; var request = { 'method' : 'post', 'payload' : data }; var result = UrlFetchApp.fetch(url,request);; return result.getContentText(); }
Сохраняете, например, скрипт горячей клавишей Ctrl+S и переразворачиваете

и получаете ссылку вида : https://script.google.com/macros/s/Ссылка/exec

Команда «Оплатил курс — получи ссылку»
Данная команда позволяет отправлять ссылку на вступление клиенту после оплаты.
Важно! Для реакции на оплату у вас должна быть настроена интеграция с любой платежной системой. Например, Продамус
События:
1) Событие: «Оплатил/сделал перевод»

Важно! Если какой-то блок у Вас уже есть, то просто находим нужный блок, нажав на кнопку «Найти в каталоге», либо копируем номер из нужной команды и вставляем в поле ввода.
2) Добавляем условие «есть клиент» (на скринах «есть клиент из ВК»):
Числовая переменная %vk_id%
больше 0

3) Опционально (лучше делать в отдельной команде): нажимаем «добавить секцию»
и добавляем событие «Добавлен в список игроков» с названием Клиенты
. Этот список будет хранить в себе список людей, которые приобрели доступ в закрытое сообщество. Событие ставим на паузу, у меня номер списка это 629642

4) Опционально: нажимаем «добавить секцию»
и добавляем событие «Получил сообщение от админа» с текстом Принимаю в группу
Важно! Перед использованием события обязательно прочитайте инструкцию. Этот блок позволяет отправлять ссылку клиенту, если вдруг автоматика подвела, либо интеграция слетела.
Действия:
1) После оплаты добавляем действием: «Добавлен в список»629642
и устанавливаем уровень равным 1
т.е. клиент купил курс.

2) Отправляем сообщение клиентам с текстом:
Спасибо за оплату, %first_name%!
Теперь переходите по ссылке в сообщество: (ссылка на закрытое сообщество)

Команда «КУРС - Подал заявку после оплаты»
Данная команда позволяет принимать клиента после оплаты или оперативно информировать об игроках, которые случайно пытаются войти без оплаты и принять меры.
Важно! В примере «закрытое сообщество» - Android Иваныч - помощник технаря»
События:
1) Событие: «Вступает в сообщество» с переключателем «Подал заявку»

Важно! Если какой-то блок у Вас уже есть, то просто находим нужный блок, нажав на кнопку «Найти в каталоге», либо копируем номер из нужной команды и вставляем в поле ввода.
2) Добавляем условие: Уровень списка 629642
больше 0
В реакции на невыполнение, выполняем действие от закрытого сообщества с действием, которое настроим позднее. Такая настройка позволит приветствовать клиентов и информировать администрацию о несанкционированном входе (+1 миля за реакцию на невыполнение).

Действия:
1) Для приема в сообщество добавляем действие «Отправить GET-POST запрос»
на адрес:
https://script.google.com/macros/s/Ссылка/exec
и добавляем параметры:
group_id
= ID сообщества. В примере переменная%club_id%
user_id
= ID игрока. В примере переменная%vk_id%
method
= название метода. В примере переменнаяgroups.approveRequest

2) Далее сохраняете во временную переменную %resp%
ответ сервера %response.response%

3 ) Опционально: действием «Отправить сообщение» сотруднику с текстом:
#Попытка_приема Кто: %vk_link% Дата: {date}%F %X{/date} Результат приема: %response.response% (если 1, то приняло)

3) Действием «Прервать / продолжить выполнение команды» с переключателем продолжено, только если:
- числовая переменная
%resp%
=1

Важно! Обязательно приветствуем вновь вступившего игрока от нашего основного сообщества, с которым уже у пользователя был диалог.
4) Добавляем действие «Отправить сообщение» от основного сообщества с текстом:
Приветствую, %first_name%! Ваша заявка в закрытое сообщество одобрена.
Подписывайся на рассылку курса тут

2) Добавляем действие «Отправить сообщение» от «закрытого сообщества» администраторам (и ставим на паузу) с текстом:
#Попытка входа
Кто: %vk_link%
Дата: {date}%F %X{/date}
Находится в списке клиентов: {level}629642{/level}

Берем номер этого действия и вставляем в поле «реакция на невыполнение» условия.
То есть, если кто-то подаст заявку не купив продукт, Админы об этом узнают, а дальше дело ваше.
Команда «КУРС - Исключить за хамство»
Важно! В примере мы будем исключать клиента за хамство, написанное в сообщество.
Событие:
1) Для реакции на хамство добавляем событие «Написал сообщение» с текстом равным: дурак

2) Для того, чтобы реагировать только на слова написанные в сообщество, добавляем условие: числовая переменная %is_conv%
= 0

Действия:
1) Для исключения из сообщества добавляем действие «Отправить GET-POST запрос»
на адрес:
https://script.google.com/macros/s/Ссылка/exec
и добавляем параметры:
group_id
= ID сообщества. В примере переменная%club_id%
user_id
= ID игрока. В примере переменная%vk_id%
method
= название метода. В примере переменнаяgroups.removeUser

2) Далее сохраняете во временную переменную %resp%
ответ сервера %response.response%

3) Опционально: действием «Отправить сообщение» сотруднику с текстом:
#Попытка_исключения Кто: %vk_link% Дата: {date}%F %X{/date} Результат приема: %response.response% (если 1, то исключило)

3) Действием «Прервать / продолжить выполнение команды» с переключателем продолжено, только если:
- числовая переменная
%resp%
=1

4) Добавляем действие «Отправить сообщение» от закрытого сообщества с текстом:
%first_name%, вы были исключены за хамство. Прощайте.

5) Для того, чтобы «забрать доступ» у клиента, искользуем действие «Отменить событие / Команду (Удалить из списка)» с номером списка 629642
(список клиентов у вас будет другой).

Все! Тестируем.



Как мы видим, все отлично работает. Творческих взлётов!