Прием и исключение из сообщества через 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.ru/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(список клиентов у вас будет другой).
Все! Тестируем.
Как мы видим, все отлично работает. Творческих взлётов!
