суббота, 19 ноября 2016 г.

Электронная запись на прием

После того, как я стал вести блог, ко мне уже неоднократно обращались читатели с вопросом как автоматизировать запись мероприятий по времени для внешних клиентов. Это может быть полезно для предпринимателей, оказывающих услуги (стоматологам, юристам), внутри компаний, например, для бронирования переговорных комнат, иных ресурсов или постановки задач по времени сотрудникам. Сейчас я приведу пример как это можно сделать.

Я уже неоднократно отмечал в своем блоге, что одно из главных преимуществ облачных технологий Google в том, что это конструктор, кубиками в котором являются широко используемые бизнес-приложения (Почта, Календарь, Таблицы, Карты, Диск и так далее). Связывая их скриптами, можно автоматизировать различные бизнес-процессы. Для планирования мероприятий по времени в экосистеме Google есть приложение Календарь. Штатные средства позволяют реализовать широкий спектр бизнес-потребностей. Можно планировать свой день а также различные групповые мероприятия. Однако когда в бизнес-процесс оказываются вовлечены внешние пользователи и мы не хотим ограничивать их число наличием у них аккаунта Google, то одного Календаря недостаточно. Например, в случае с записью к стоматологу мы должны дать клиенту возможность просматривать календарь записи к врачу и бронировать свободное время, но при этом надо исключить возможность передвигать уже назначенные мероприятия и бронировать занятое время. Для этого мы берем еще один инструмент из экосистемы Google - Форму. Это штатный инструмент для передачи данных от внешнего пользователя в аккаунт Google.

Итак, создаем новый Календарь - “Запись на прием”. Заходим в настройки календаря и на вкладке “Открыть общий доступ к календарю” включаем режим доступа “Просматривать только информацию о свободном и занятом времени (скрыть подробности)”. Теперь этот календарь доступен для просмотра всем, у кого есть ссылка. Владельцы аккаунтов Google могут добавить его в своем приложении Календарь. Для анонимных пользователей нужно выложить календарь где-нибудь на сайте. Код для этого есть в настройках календаря на вкладке “Данные календаря”.

Теперь создаем новую Форму (клик правой кнопкой на свободном поле Google Диска, “Еще->Google Формы”). Добавляем на Форму вопросы “Дата”, “Время”, “Электронная почта”, “Примечание”. Должно получиться так

Запустить Форму в работу можно различными способами: рассылать в почте, опубликовать в Интернете (Google присвоит ей общедоступную ссылку, по которой Ваши пользователи смогут зайти на нее и отправить свои данные) либо встроить в свой сайт (код для встраивания можно взять нажав кнопку “Отправить” и выбрав вкладку “<>”). Ответы присланные пользователями будут сохраняться в самой Форме, также Вы можете прикрепить к Форме Таблицу и ответы будут автоматически сохраняться туда.  
  
Теперь осталось связать Форму и Календарь. Для этого надо в редакторе скриптов Формы установить триггер onSubmitForm(e). Эта функция будет вызываться при каждом полученном ответе. Код функции можно посмотреть здесь. Она записывает данные в Таблицу, проверяет свободно ли выбранное время и, если свободно, создает новое мероприятие в Календаре и отправляет пользователю на емейл уведомление о бронировании выбранного им времени. В примере осуществляется запись только часовых мероприятий. Минуты, введенные пользователем в расчет не берутся. В данном случае я не воспользовался штатным средством Google, а завел отдельную Таблицу поскольку мне надо записывать туда еще дополнительную служебную информацию: результат проверки календаря и результат отправки по указанному электронному адресу. Выглядит Таблица записей примерно так.


В качестве сегодняшнего лайфхака скажу, что Google в каждом аккаунте создает по умолчанию календарь “Праздники РФ”, в котором отмечены мероприятиями все праздничные дни в России. В приведенном коде есть функция isDateHoliday(date), которая для любой даты возвращает является ли она рабочим, праздничным или выходным днем. Можете скопировать ее себе, однако будьте внимательны, у Вас может быть иной ID календаря “Праздники РФ”. У меня во всех аккаунтах он одинаковый, но я не нашел информации какой он должен быть. Здесь на сайте можно посмотреть пример как все это работает. Конечно, в плане эргономики оно уступает специализированным веб-приложениям, однако это бюджетное решение "на коленке", безусловно, серьезно сэкономит время тем, кто до сих пор ведет запись вручную.   


5 комментариев:

  1. Доброго дня, Кирилл! Очень интересное и полезное решение! У меня вопрос возник, каким образом разместить Гугл календарь и форму на одной странице? Я понял, что нужно нечто развернуть как web приложение, однако в программировании не силен.

    ОтветитьУдалить
    Ответы
    1. Добрый день!

      Во-первых, Вы можете разместить их на любой странице своего какого-либо уже рабочего сайта. Для этого надо в HTML-код страницы вставить HTML-код формы и календаря. Его можно взять в настройках, в разделе код для сайта.

      Во-вторых, Вы можете разместить в HTMLService публикуемого скрипта. Видимо, то что Вы имеет ввиду под web приложением

      Удалить
  2. Кирилл, Доброго дня!
    Подскажите, каким образом написать учет минут?
    Вот что получилось у меня:
    var minutes=Number(itemResponses[1].getResponse().substring(0, 2))-0;
    Однако данное выражение отображает то же самое, что и в часах.

    ОтветитьУдалить
    Ответы
    1. Немного не понял суть вопроса. А преобразовать в дату и вырвать минуты date.getMinutes() пробовали?

      Удалить
  3. Добрый день. Это то что нужно. Но у меня не работает. Скопировал скрипт и вставил. Что в нём нужно прописывать своё кроме id календаря и формы.

    ОтветитьУдалить