Формы google - простой, доступный инструмент для создания различных опросников. Конечно и он не лишён недостатков, я нашёл один существенный - нет возможности встраивать <iframe> в саму форму. Сколько возможностей открылось бы для простого обывателя.
Представим себе что Вы мастер своего дела, хотя что я пишу Вы и есть мастер своего дела. К Вам выстраиваются очереди из жаждущих клиентов, желающих дать Вам возможность заработать. Но настаёт такой момент, когда Вам не удаётся управлять своим расписанием и кажется что вот-вот придётся начать оплачивать работу личного секретаря.
Вы управляете небольшой компанией, которая занимается очень хорошим делом. Клиенты идут к Вам, не обращая внимания на конкурентов. Ввиду чрезмерной занятости, Вам не удаётся правильно организовать работу с клиентами, так как очередь к Вам выстроилась на месяц вперёд.
Каким образом выстроить работу чтобы и клиенты знали когда к Вам можно обратиться, и не оплачивать работу секретаря. Можно создать google форму, в которой клиенту можно предложить заполнить желаемый день и время.
Например, такую.
Но проблема в том что клиент даже приблизительно не может себе представить Вашу загруженность.
Можно предоставить клиенту ссылку на один из Ваших рабочих календарей google. Но это скорее всего только запутает человека, да и в календарях может содержаться конфиденциальная информация (потому что это удобно для Вас).
Нужно объединить форму с календарём на странице одного из Ваших сайтов. Почему сайта - да потому что так проще встроить нужные Вам <iframe>. В настройках каждого google календаря, а их может быть больше чем один, можно получить html-код для размещения календаря на страницах сайта.
Например, такой
Остаётся дело за малым - прочитать статью о кастомизации google форм и создать свою
Представим себе что Вы мастер своего дела, хотя что я пишу Вы и есть мастер своего дела. К Вам выстраиваются очереди из жаждущих клиентов, желающих дать Вам возможность заработать. Но настаёт такой момент, когда Вам не удаётся управлять своим расписанием и кажется что вот-вот придётся начать оплачивать работу личного секретаря.
Вы управляете небольшой компанией, которая занимается очень хорошим делом. Клиенты идут к Вам, не обращая внимания на конкурентов. Ввиду чрезмерной занятости, Вам не удаётся правильно организовать работу с клиентами, так как очередь к Вам выстроилась на месяц вперёд.
Каким образом выстроить работу чтобы и клиенты знали когда к Вам можно обратиться, и не оплачивать работу секретаря. Можно создать google форму, в которой клиенту можно предложить заполнить желаемый день и время.
Например, такую.
Но проблема в том что клиент даже приблизительно не может себе представить Вашу загруженность.
Можно предоставить клиенту ссылку на один из Ваших рабочих календарей google. Но это скорее всего только запутает человека, да и в календарях может содержаться конфиденциальная информация (потому что это удобно для Вас).
Нужно объединить форму с календарём на странице одного из Ваших сайтов. Почему сайта - да потому что так проще встроить нужные Вам <iframe>. В настройках каждого google календаря, а их может быть больше чем один, можно получить html-код для размещения календаря на страницах сайта.
Например, такой
<iframe frameborder="0" height="600" scrolling="no" src="https://calendar.google.com/calendar/embed?height=600&wkst=1&bgcolor=%23ffffff&ctz=Europe%2FMoscow&src=dGJnOWE0bWxpbnVkZzEwYWJnczMxbWFjNzRAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ&src=cnUub3J0aG9kb3hfY2hyaXN0aWFuaXR5I2hvbGlkYXlAZ3JvdXAudi5jYWxlbmRhci5nb29nbGUuY29t&src=cnUucnVzc2lhbiNob2xpZGF5QGdyb3VwLnYuY2FsZW5kYXIuZ29vZ2xlLmNvbQ&color=%23EF6C00&color=%230B8043&color=%23009688&showNav=1&showPrint=0&showCalendars=0&title=%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D1%8C%20%D0%BA%20%D0%BC%D0%B0%D1%81%D1%82%D0%B5%D1%80%D1%83" style="border-width: 0;" width="800"></iframe>
Остаётся дело за малым - прочитать статью о кастомизации google форм и создать свою
Исходный код
<iframe src="https://calendar.google.com/calendar/embed?height=600&wkst=1&bgcolor=%23ffffff&ctz=Europe%2FMoscow&src=dGJnOWE0bWxpbnVkZzEwYWJnczMxbWFjNzRAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ&src=cnUub3J0aG9kb3hfY2hyaXN0aWFuaXR5I2hvbGlkYXlAZ3JvdXAudi5jYWxlbmRhci5nb29nbGUuY29t&src=cnUucnVzc2lhbiNob2xpZGF5QGdyb3VwLnYuY2FsZW5kYXIuZ29vZ2xlLmNvbQ&color=%23EF6C00&color=%230B8043&color=%23009688&showPrint=0&showTabs=1&showCalendars=1&showTz=1&showDate=1" style="border-width:0" width="800" height="600" frameborder="0" scrolling="no"></iframe>
<form action="https://docs.google.com/forms/d/e/1FAIpQLScc8eCnb6vQtOgV_DUHx1ojBI6zSLzCs6dAmoLox73B5u87hQ/formResponse" class="form">
<label>Ваше имя</label>
<input name="entry.588593630" type="text" />
<label>Email</label>
<input name="entry.739575401" required="" type="email" />
<label>№ телефона</label>
<input name="entry.1270724335" required="" />
<label> Желаемый день записи</label>
<input name="entry.1782723370" required="" type="date" />
<label> Желаемое время записи</label>
<input name="entry.884475298" required="" type="time" />
<input type="submit" value="Записаться" />
</form>
При нажатии на кнопку Записаться будет вызываться отправка google формы с данными из этой.
Преимущество такого подхода заключается в том, что теперь при отправке формы можно запускать скрипт который будет обрабатывать поступающие данные в таблицу и создавать мероприятия в нужных календарях. В тот который здесь будет поступать только информация о занятости, в личный календарь будут приходить приглашения на мероприятия со всей нужной информацией, в календарь клиента - приглашение на мероприятие.
function myOnFormSubmit(e) {
var answers=e.values;
var day=Date.parse(answers[4]+'T'+answers[5]);
var calendar;
var calendars=CalendarApp.getCalendarsByName('Моя занятость');
if (calendars.length==0){
calendar=CalendarApp.createCalendar('Моя занятость');
}
else{
calendar=calendars[0];
}
var event=calendar.createEvent('Занят', new Date(day),new Date(day+1*1000*60*60))
var event2=CalendarApp.getDefaultCalendar().createEvent(answers[1], new Date(day),new Date(day+1*1000*60*60)).setDescription(answers[2]+'\n'+answers[3]).addGuest(answers[3])
}
Этот скрипт помещается в таблицу с ответами из формы, устанавливается триггер на функцию myOnFormSubmit на отправку формы. По умолчанию считается одно мероприятие - 1 час. Можно было бы добавить время окончания, но это уже мелочи. :)
Надеюсь кому-нибудь будет полезна статья.
Добрый день! Воспользовался вашим скриптом, но мне выдает ошибку на этой строчке (var answers=e.values;) следующего содержания:
ОтветитьУдалить"TypeError: Не удается прочитать свойство "values" объекта undefined. (строка 2, файл Код)".
Не подскажите, в чем может быть проблема?
Здравствуйте.
УдалитьЗапускать скрипт из редактора скриптов, в данном случае - бесполезное занятие.
Необходимо устанавливать триггер на отправку формы.
Спасибо большое! Все получилось!
УдалитьЗдравствуйте. Почему может не связывается форма к с календарем? Делали один в один, как указано. Благодарю.
ОтветитьУдалитьДоброго.
УдалитьОдин в один делать бесполезно.
https://blog.webjeda.com/google-form-customize/ читали?
Возможно про триггер забыли?
Большое спасибо! Все получилось!
УдалитьТакже в журналах Stackdriver Google Aps при отправке формы появляться ошибка (в данном поле, как и вас номер телефона):
УдалитьНедействительный аргумент: 927927927
at myOnFormSubmit(Код:13)
Помогите пожалуйста решить проблему. Благодарю.
Доброго.
УдалитьЧто то напутали с прописыванием полей формы, а точнее с номерами id формы. Нет у вас в форме input name=entry.927927927.
Ошибку удалось убрать. Содержалась в скрипте function myOnFormSubmit(e):
УдалитьУдалить параметр: .addGuest(answers[3]
Да, проблема возникает если не вводится email.
УдалитьПриветствую! Есть такая проблема
ОтветитьУдалитьfunction myFunction(e) {
var answers=e.values;
var title_event = answers[1];
var start_ = answers[2];
var end_ = answers[3];
//var title_event = 'Обед';
//var start_ = '18 April 2020 11:11:00';
//var end_ = '18 April 2020 11:12:00';
var event = CalendarApp.getDefaultCalendar().createEvent(title_event, new Date(start_), new Date (end_))
}
Если раскоментить то все работает нормально, как я понимаю передается из формы неверный формат даты (18.04.2020 11:11:00). Как решить эту проблему?
Доброго времени суток.
УдалитьВ моей форме и скрипте строчка
var day=Date.parse(answers[4]+'T'+answers[5]);
отвечает как раз за то чтобы получить правильную дату со временем в формате js.
Здравствуйте. Я не до конца понял как скрипт настроить под себя. Хотел бы попросить у вас помощи, где я именно сделал ошибку и не добавил что-то важное.
ОтветитьУдалитьПрисылаю скрины через диск https://drive.google.com/drive/folders/1uBWAfR_9lA7tmpvqs_geFsFDOdARWEA-?usp=sharing
Ошибок форма не выдаёт, но и не добавляет мероприятие в гугл календарь.
УдалитьА id "entry." так и не нашёл через обзор кода. Почему-то там такого нет. При попытке занести в поля на сайте, выкидывает в гугл-форму с чистыми полями. И сама форма, заносить данные в таблицу может, а вот в календарь тишина. Помогите, пожалуйста, тупню. В мануалах пробую разобраться, но такой уровень программирования мне пока не по зубам =/
Доброго.
УдалитьВами не правильно определены entry для формы. Попробуйте перечитать статью которую указал по ссылке. У вас всё получится.
А в скрипте таблицы всё в порядке получается?
УдалитьВ моём скрипте, в моей таблице всё в порядке.)
УдалитьДобейтесь для начала отсылку ответов в таблицу, а для этого поправьте entry.
Я имел в виду в своём) "entry" найти не могу =/ Как по скринам видно такого показателя на странице гугл-формы у меня нет. Поменял браузеры, всеравно не появляется. В статье написано что он скрыт, и нужно заполнить поля, но и это не помогает. Пока ищу "entry"...
УдалитьУра! Нашёл все "entry" через создание ссылки. Кроме времени =/
УдалитьЧто-то упустили, значит. Кто ищет тот всегда найдёт.
УдалитьВ общем в гугл-форме есть возможность к дате прикручивать время. По вашему коду он не прописывается. Пришлось создать отдельные поля, чтобы скрипт сработал.
УдалитьВ итоге: При заполнении формы на сайте и нажатии на клавишу "Записаться" переходит на гугл-форму, уже заполненную которую я заполнял на сайте, и.. автоматически не отправляет...а просто висит с моими заполненными данными. Отправляются только после нажатия клавиши "отправить". Помнится у вас автоматически она "нажимается".
Абсолютно верно. Всё отправляется автоматически - только что записался к себе на 30 сентября в 13:03.
УдалитьА "function myOnFormSubmit(e)" нужно прописывать в гугл-форму, или в таблицу?
УдалитьВ таблицу.
Удалитьfunction myOnFormSubmit(e) {
Удалитьvar answers=e.values;
var day=Date.parse(answers[2]+'T'+answers[6]);
var calendar;
var calendars=CalendarApp.getCalendarsByName('Учреждения мероприятия');
if (calendars.length==0){
calendar=CalendarApp.createCalendar('Учреждения мероприятия');
}
else{
calendar=calendars[0];
}
var event=calendar.createEvent('Занят', new Date(day),new Date(day+1*1000*60*60))
var event2=CalendarApp.getDefaultCalendar().createEvent(answers[1], new Date(day),new Date(day+1*1000*60*60)).setDescription(answers[4]+answers[5])
}
Вот то что записано в скрипте. Триггеру дано добро. Но гугл-форма автоматически не отправляет в таблицу, только через отправить. И если отправить, то ничего в гугл-календарь не попадает.
форма на сайте связана с таблицей только посредством entries - пока форма не будет отправлена в таблице ничего не произойдёт. Возможно вы что-то упустили из виду важное.
УдалитьНасчёт ошибок скрипта, которые могут возникать при появлении ответов в таблице, вам необходимо смотреть в редакторе скриптов в Выполнениях.
В таблицу записи вносятся, а вот в календарь нет. В чём может быть причина?
УдалитьВыше в сообщении написал уже где и что смотреть.)
УдалитьЗдравствуйте. Я так и не могу разобраться с кодом. Есть ли возможность на платной основе, чтобы вы мне помогли наладить код, чтобы скрипты работали и мероприятия попадали в календарь?
УдалитьДоброго. Мой майл - igro83@gmail.com.
Удалить