Прием и исключение из сообщества через 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 можете воспользоваться этим приложением.

Важно! Приложение не хранит ваш ключ оно просто отправляет запрос и ВК само генерирует вам ключ в браузере.

Для приема, исключения нужны только права groups и оffilne
Для приема, исключения нужны только права groups и оffilne

Предупреждение! Сгенерированный ключ доступа сообщества имеет доступ ко всем сообществам. где вы админ, поэтому будьте внимательны.

В итоге вы получаете ссылку вида:

 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) Событие: «Оплатил/сделал перевод»

Прием и исключение из сообщества через Google Script, image #4
Важно! Если какой-то блок у Вас уже есть, то просто находим нужный блок, нажав на кнопку «Найти в каталоге», либо копируем номер из нужной команды и вставляем в поле ввода.

2) Добавляем условие «есть клиент» (на скринах «есть клиент из ВК»):
Числовая переменная %vk_id% больше 0

Прием и исключение из сообщества через Google Script, image #5

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

Прием и исключение из сообщества через Google Script, image #6

4) Опционально: нажимаем «добавить секцию»и добавляем событие «Получил сообщение от админа» с текстом Принимаю в группу

Важно! Перед использованием события обязательно прочитайте инструкцию. Этот блок позволяет отправлять ссылку клиенту, если вдруг автоматика подвела, либо интеграция слетела.

Действия:

1) После оплаты добавляем действием: «Добавлен в список»629642и устанавливаем уровень равным 1т.е. клиент купил курс.

Прием и исключение из сообщества через Google Script, image #7

2) Отправляем сообщение клиентам с текстом:

Спасибо за оплату, %first_name%!

Теперь переходите по ссылке в сообщество: (ссылка на  закрытое сообщество)
Прием и исключение из сообщества через Google Script, image #8

Команда «КУРС - Подал заявку после оплаты»

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

События:

1) Событие: «Вступает в сообщество» с переключателем «Подал заявку»

Прием и исключение из сообщества через Google Script, image #9
Важно! Если какой-то блок у Вас уже есть, то просто находим нужный блок, нажав на кнопку «Найти в каталоге», либо копируем номер из нужной команды и вставляем в поле ввода.

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%

Сохраняем ответ через JSON.PATH
Сохраняем ответ через JSON.PATH

3 ) Опционально: действием «Отправить сообщение» сотруднику с текстом:

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

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

  • числовая переменная %resp% = 1
Дальнейшие действия выполняются только если пользователя приняло в сообщество, т.е. метод вернул 1
Дальнейшие действия выполняются только если пользователя приняло в сообщество, т.е. метод вернул 1
Важно! Обязательно приветствуем вновь вступившего игрока от нашего основного сообщества, с которым уже у пользователя был диалог.

4) Добавляем действие «Отправить сообщение» от основного сообщества с текстом:

Приветствую, %first_name%! Ваша заявка в закрытое сообщество одобрена.
Подписывайся на рассылку курса тут
Прием и исключение из сообщества через Google Script, image #15

2) Добавляем действие «Отправить сообщение» от «закрытого сообщества» администраторам (и ставим на паузу) с текстом:

#Попытка входа
Кто: %vk_link%
Дата: {date}%F %X{/date}
Находится в списке клиентов: {level}629642{/level}
Прием и исключение из сообщества через Google Script, image #16

Берем номер этого действия и вставляем в поле «реакция на невыполнение» условия.

То есть, если кто-то подаст заявку не купив продукт, Админы об этом узнают, а дальше дело ваше.

Команда «КУРС - Исключить за хамство»

Важно! В примере мы будем исключать клиента за хамство, написанное в сообщество.

Событие:

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
Дальнейшие действия выполняются только если пользователя приняло в сообщество, т.е. метод вернул 1
Дальнейшие действия выполняются только если пользователя приняло в сообщество, т.е. метод вернул 1

4) Добавляем действие «Отправить сообщение» от закрытого сообщества с текстом:

%first_name%, вы были исключены за хамство. Прощайте.
Пример сообщения
Пример сообщения

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

Убираем из списка клиентов
Убираем из списка клиентов

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

Вылетаем из сообщества
Вылетаем из сообщества
Выкинуло хама
Выкинуло хама
Сообщение админу
Сообщение админу

Шаблоны команд 1

Шаблоны команд 2

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

918 views·32 shares