Одна из недавних задач, которые мне приходилось решать, это передача сведений о заполнении формы Google на GetCourse. Я покажу как работать с формами Google без внешних серверов и php-скриптов.
Для того, что бы получить ключ API Вам необходимо иметь возможность настраивать аккаунт либо обратится к владельцу/старшему тех.спецу, что бы получить ключ.
Сначала не много логики
Первое, что пришло мне в голову, это каким-либо образом ловить событие onSubmit для формы, а затем через API GetCourse в доп.поле выставлять значение, что форму заполнили. В дальнейшем можно сформировать сегмент, для просмотра пользователей которые ответили на вопросы в форме и даже уведомлять ответственного учителя или менеджера о новом ответе.
Инструментарий
Первым делом мы будем использовать дополнительные поля в GetCourse. Так-же воспользуемся публичным API GC, а промежуточный обработчик напишем на Google Apps Scripts. В общем поехали.
Создаем доп.поле и тестируем API.
Выбираем тип да/нет и заполняем название, убедитесь, что в конце названия случайно не был проставлен пробел. Это важно для дальнейшего функционирования скрипта.
Следующим шагом нам нужно используя средства публичного API GetCourse как-то менять значение этого поля. По причине того, что так просто протестировать ничего не получится из-за специфической структуры самих API-запросов, то тестировать изменение этого поля мы будем уже используя Google Apps Script.
Работаем с Google
Первым шагом создаем обычную форму Google и заполняем её необходимым содержимым. Обязательно в форме первым полем должно быть указан сбор email.
Обращаю Ваше внимание на то, что в связке с GetCourse нельзя использовать стандартный пункт в настройках формы «Разрешить собирать email».
Далее необходимо создать новый скрипт. Для этого возле Вашей аватарки Google нажмите на три вертикальных точки и выберите там «Редактор скриптов» как на скрине ниже.
После этого у Вас откроется редактор и будет создана первая функция myFuncion { }, её необходимо сразу удалить.
Далее перейдите по адресу https://адрес_школы/saas/account/api и скопируйте ключ, если ключа еще нет, то просто нажмите на кнопку «Сгенерировать ключ».
Пишем тестовый код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
const uri = 'https://адрес_школы/pl/api/users'; const getcourseApiKey = 'kCAKOlLd...'; //Ключ API function PushDataToGetCourse(mail='email администратора') { let user = {}; user.email = mail; user.addfields = {'Название поля':'1'}; let system = {refresh_if_exists: 1}; let getcourse = {user: user, system: system}; let data = JSON.stringify(getcourse); var encoded = Utilities.base64Encode(data, Utilities.Charset.UTF_8); var options = { 'method': 'post', 'headers': { 'Content-Type': 'application/x-www-form-urlencoded' }, payload: { action: 'add', key: getcourseApiKey, params: encoded } } var response = UrlFetchApp.fetch(uri, options); Logger.log(response); } |
В листинге кода приведённом выше замените адрес_школы на свой, также укажите ваш ключ API, впишите свой email в поле «email администратора» и укажите название Вашего поля в фигурных скобках.
Также учтите, что если Вы или пользователь укажет email которого в базе GetCourse нет, то в этом случае платформа создаст нового пользователя с указанной почтой и типом регистрации api
Работаем с событием onSubmit
Для того, что бы наш скрипт мог получать информацию об отправке формы, а так же считывать информацию с полей самой формы (а я напоминаю, что нам нужно получать значение первого поля в котором пользователь оставляет свой email) мы создадим функцию onFormSubmit и создадим новый триггер (условие по которому должна запустится та или иная функция) и укажем в качестве параметра созданную нами функцию.
Добавляем новый триггер
Далее необходимо указать условия запуска:
1. В блоке «Выберите функцию» указываем нашу onFormSubmit
2. Развертывание оставляем как есть, должно быть «основное развертывание»
3. «Выберите источник мероприятия» устанавливаем в положение «Из формы»
4. «Выберите тип события» устанавливаете в положение «При отправке формы»
Далее могут выскакивать окошко с просьбой авторизоваться в аккаунте. Это нормально.
Блок авторизации в Google нужный для работы с триггером.
Теперь наладим сбор данных с формы, получение почты пользователя и передачу этой почты в функцию которая отмечает галочку в анкете пользователя.
Что-бы всё заработало корректно, Вам необходимо убрать всё лишнее с аргументов функции в 4й строке, там должно остаться только mail. В 36й строчке нужно в одинарных кавычках указать id формы с которой данные должны подгружаться. Взять этот id можно в адресной строке браузера когда Google форма открыта.
И наконец проверьте, что бы в 46й строке был корректно указан вызов «геткурсной» функции.
Создаем развёртывание
Перейдите в редактор кода Google Apps Script и нажмите на кнопку «Начать развертывание» и в выпадающем меню выберите «Новое развертывание».
В появившемся окне напротив подписи «Выберите тип» нажмите на иконку шестеренки и в меню выберите Веб-приложение.
На следующем шаге введите любое описание, желательно понятное Вам, возможно таких анкет и развертываний к ним у вас будет много и желательно каждому давать осмысленные названия. Доступ оставляете «Только у меня» и «Запуск от имени» так же оставляете по умолчанию (От моего имени) и нажимаете кнопку «Начать развертывание».
Финальный листинг кода и тестирование
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
const uri = 'https://..../pl/api/users'; // <= Укажите здесь адрес школы const getcourseApiKey = '...'; // <= Укажите ключ API function PushDataToGetCourse(mail) { let user = {}; user.email = mail; user.addfields = {'Заполнил анкету?':'1'}; // <= Укажите здесь название поля в GetCourse let system = {refresh_if_exists: 1}; let getcourse = {user: user, system: system}; let data = JSON.stringify(getcourse); var encoded = Utilities.base64Encode(data, Utilities.Charset.UTF_8); var options = { 'method': 'post', 'headers': { 'Content-Type': 'application/x-www-form-urlencoded' }, payload: { action: 'add', key: getcourseApiKey, params: encoded } } var response = UrlFetchApp.fetch(uri, options); Logger.log(response); } //Функция которая вызывается когда форма отправлена function onFromSubmit() { var app = FormApp.openById('....'); // <= Укажите здесь ID Google-формы var formResponses = app.getResponses(); //Получаем все ответы var latest = formResponses[formResponses.length - 1]; //Получаем последний var itemResponses = latest.getItemResponses(); //Получаем массив ответов const now = new Date(); const email = itemResponses[0].getResponse(); PushDataToGetCourse(email); } |
Не забудьте заменить(указать) все необходимые для кода значения, а так же в самой форме Google сделать первое поле, текстовое, обязательное и спрашивать в этом поле Email пользователя.