Автоматизация записи участников в Google Calendar

Привет! Это статья будет лайфхаком для компаний, которые регулярно организовывают ивенты и мероприятия, на которые участники записываются самостоятельно и получают приглашения в Google Calendar.
Наверное, данная схема подойдет и для других календарей, типа Outlook , если они поддерживают возможность работы со скриптами и настройки триггеров на определенные события или временные промежутки.

О задаче:

Каждый месяц в компании мы организовываем тренинги и обучения для развития личных и профессиональных навыков у команды. В компании ВсеИнструменты.ру на январь 2024 года работает более 11000 командных игроков, чтобы у каждого желающего расти и развиваться через очные тренинги была такая возможность существует отдельный проект " Конструктор обучений".
Это более 10 тем по работе с системами и процессами, Soft Skills, управленческими навыки для более 1000 человек в очном или онлайн формате каждый месяц. Сейчас команда географически расширилась, поэтому преимущественно это онлайн - тренинги на платформе Google Meet или ZOOM.
Участники заходят на сайт, на котором мы каждую неделю обновляем информацию по доступным тренингам и обучениям, ребята сами выбирают то, что ближе к их текущему запросу. Сейчас в месяц в проекте участвует около 400 не уникальных пользователей, но мы планируем активное расширение в 2024 году и популяризацию проекта внутри компании. Учиться можно бесплатно вне зависимости от должности и стажа работы.
У нас есть LMS система и корпоративный портал, но мы пока что только определяем для себя формат для приглашений участников и их записи, эксперементируем с темами и условиями участия, поэтому прописывать БТ по сырой бизнес-процесс с дорогим ресурсом IT не целесообразно, но и время на развитие проекта хочется больше, чем на выполнение механизированных задач, таких как ручное приглашение участника.
Важно учесть, что запись может происходить в любое время суток, и постоянно проверять таблицу со списком записавшихся участников, настраивать фильтрацию по событию, заходить в календарь и там отправлять им приглашение вещь не только трудозатратная, но и порядком изматывающая.
В декабре, когда мы полностью решили, что продолжим в 2024 эксперментировать в рамках проекта с формами и форматами встреч вне наших основных ресурсов проблема обозначилась еще точнее. Около 20 часов в месяц уходило на то, чтобы своевременно пригласить команду на запланированные обучения. Нужно было срочно автоматизировать процесс записи участников.

Chat GPT спешит на помощь

Поискав в интернетах мне не удалось найти готовых решений. Я решил попробовать обратиться к версии CHAT GPT 3.5 и спросил у него про возможность автоматизации данного процесса.
Спустя 3 дня у нас получилось совместно написать скрипт, который автоматически по триггеру времени каждую минуту проверяет событие и приглашает в него только новых участников, отправляет им письмо с приглашением и еще и сохраняет статус текущих участников, которые подтвердили или отклонили участие во встрече!
Вот текст самого скрипта:

functioninviteParticipantsFromSheet() {// Замените на идентификатор вашей таблицыvarsheetId = '1L7ygWwztwpbvrpjwhSfhNNYncVYIquTZpCIJJBBTZlI';// Получаем данные из таблицыvarsheet = SpreadsheetApp.openById(sheetId).getActiveSheet();vardata = sheet.getDataRange().getValues();// Замените на идентификатор вашего календаряvarcalendarId = '[email protected]';// Проходим по каждой строке в таблице (начиная с второй строки, так как первая содержит заголовки)for (vari = 1; i < data.length; i++) {vareventName = data[i][0];vareventStartTime = newDate(data[i][2]); // Преобразуем строку с датой в объект DatevarparticipantEmails = data[i][5].split(',');// Приглашаем участников на мероприятиеinviteParticipantsByNameAndTime(calendarId, eventName, eventStartTime, participantEmails); }functioninviteParticipantsByNameAndTime(calendarId, eventName, eventStartTime, participantEmails) {try {// Получаем календарьvarcalendar = CalendarApp.getCalendarById(calendarId);// Проверяем существование календаряif (!calendar) {Logger.log('Календарь с идентификатором ' + calendarId + ' не найден.');return; }// Получаем все события из календаряvarevents = calendar.getEventsForDay(eventStartTime);// Ищем событие с нужным названием и временем началаvarevent = events.find(function (event) {returnevent.getTitle() === eventName && event.getStartTime().getTime() === eventStartTime.getTime(); });// Проверяем существование событияif (!event) {Logger.log('Событие с именем ' + eventName + ' и временем начала ' + eventStartTime + ' не найдено.');return; }// Получаем текущих участников события и их статусvarcurrentGuests = event.getGuestList().map(function (guest) {return {email: guest.getEmail(),status: guest.getGuestStatus() }; });// Фильтруем только новых участников, которых еще нет в событииvarnewParticipants = participantEmails.filter(function (email) {return !currentGuests.some(function (guest) {returnguest.email === email.trim(); }); });// Приглашаем новых участниковif (newParticipants.length > 0) {newParticipants.forEach(function (email) {event.addGuest(email.trim());Logger.log('Участник ' + email.trim() + ' успешно приглашен на мероприятие с именем: ' + eventName);// Отправляем приглашение по электронной почтеsendInvitationEmail(email.trim(), eventName, eventStartTime); }); } else {Logger.log('Новые участники отсутствуют для события с именем: ' + eventName); }// Выводим статус текущих участниковcurrentGuests.forEach(function (guest) {Logger.log('Участник ' + guest.email + ' имеет статус: ' + guest.status); }); } catch (error) {Logger.log('Произошла ошибка при приглашении участников: ' + error.toString()); } }functionsendInvitationEmail(email, eventName, eventStartTime) {try {varsubject = 'Приглашение на мероприятие: ' + eventName;varbody = 'Вы приглашены на мероприятие "' + eventName + '"\nДата и время: ' + eventStartTime;// Замените на вашу электронную почту, если нужно отправлять письма от вашего аккаунтаvarsenderEmail = '[email protected]';GmailApp.sendEmail(email, subject, body, { from: senderEmail });Logger.log('Письмо успешно отправлено на ' + email); } catch (error) {Logger.log('Произошла ошибка при отправке электронного письма: ' + error.toString()); } }}

Скрипт подразумевает, что у вас есть google таблица, данные надо заполнить по принципу

Автоматизация записи участников в Google Calendar

В скрипте надо поменять ID таблицы на актуальный ваш ID

Автоматизация записи участников в Google Calendar

ID календаря на ваш календарь ID , обычно он совпадает с адресом электронной почты гугл, если вы используете привязанный, а не созданный отдельно календарь
Для почты [email protected] Calendar ID - [email protected]

Куда вставлять сам скрипт?

Экосистема Google супер дружелюбна и продумана. У них есть вкладка для разработчиков

Переходите по ссылке, создаете проект, предоставляете доступ к календарю перед запуском проекта и все готово.
Чтобы точно все заработало как часы, добавьте сервисы на странице Google Script

Автоматизация записи участников в Google Calendar

Дальше остается только настроить триггерное событие для запуска скрипта, у меня это триггер по времени на каждую минуту

Автоматизация записи участников в Google Calendar

Где применить этот скрипт?

Если у вас любой вид бизнеса, в котором вы ведете учет записей в Google Calendar, это может быть маникюрный салон, медицинская клинка, вебинары и семинары, то настроив его можно автоматизировать запись клиентов на ваши услуги, это облегчит работу администраторам и врачам или консультантам/тренерам. Уверен, каждый найдет для себя удобный способ применения.
Если у вас возникнут вопросы или уточнения, трудности с внедрением - задавайте вопросы в комментариях, попробуем вместе разобраться в проблеме и найти ее решение.
Спасибо за просмотр! До новых встреч в эфире!

8181 показ
6161 открытие
1 комментарий

Это гениально!

Ответить