Создание нового события в Google Calendar с помощью Nodul
%252520(1).png&w=3840&q=75)
После создания задачи на встречу или собрание, нужно вручную создавать это событие в специальном календаре? Можно упростить эту задачу если ваша TMS не поддерживает из коробки подобные интеграции. Настроив так чтобы после создания этой задачи, в Google Calendar
создавалось событие на нужную дату, время и остальной важной информацией.
Для этого воспользуемся Google Sheet Api и через Nodul настроим сценарий который позволит при вызове добавлять новое событие в отдельный Google календарь, в который будут добавлены все нужные люди которые будут участвовать в этом событии.
Подготовка
Сперва обязательно получим токен по инструкции в нашей статье, только в списке серверов выбрать "Google Calendar Api v...", а в scope "www.googleapis.com/auth/calendar ";
Создание
Далее создадим в Calendar новый календарь, можно назвать его например "NodulTest";
Подготовим запрос для нашего rest клиента;
REQ01: Запрос для rest клиента
curl --request POST --url 'https://webhook.nodul.ru/00/dev/some_hash'
--header 'Accept: application/json'
--header 'Content-Type: application/x-www-form-urlencoded'
--data 'token=[Замените квадратные скобки с содержимым на ваш токен]'
--data 'summary=Событие созданное из Nodul'
--data 'location=https://app.nodul.ru'
--data 'description=Добавление события в календарь из Nodul с помощью API'
--data 'startDate=2022-12-21T09:00:00-07:00 Поменяйте на ближайшую дату'
--data 'startTZ=Europe/Moscow'
--data 'endDate=2022-12-22T09:00:00-07:00 Поменяйте на ближайшую дату'
--data 'endTZ=Europe/Moscow'
Подставим полученный из шага в начале наш токен;

Поменяем даты начала "startDate" и конца "endDate" на ближайшее, так же можно поменять часовой пояс если он не подходит это startTZ и endTZ;

Создадим узел "Webhook": "+ Добавить узел" => "Http" => "Webhook";
Скопируем адрес Webhook и вставим его в адресную строку rest клиента;


Далее добавим другой узел "JavaScrtipt": "+ Добавить узел" => "Code" => "JavaScrtipt";
Сохраняем изменения;
Свяжем узлы вместе;
Запустим и вызовем цепочку для передачи данных между узлами;
Скопируем в него содержимое:
const apiURL = "https://www.googleapis.com/calendar/v3";
const bToken = "Bearer " + data["{{1.body.token}}"];
const event = {
'summary': data["{{1.body.summary}}"],
'location': data["{{1.body.location}}"],
'description': data["{{1.body.description}}"],
'start': {
'dateTime': data["{{1.body.startDate}}"],
'timeZone': data["{{1.body.startTZ}}"]
},
'end': {
'dateTime': data["{{1.body.endDate}}"],
'timeZone': data["{{1.body.endTZ}}"]
},
'reminders': {
'useDefault': false,
'overrides': [
{'method': 'email', 'minutes': 24 * 60},
{'method': 'popup', 'minutes': 10}
]
}
};
return {
apiURL, bToken, event
}
Проверим во всех конструкциях вида "data["{{1.body.name}}"]" что номер Webhook соответствует от которого получаем данные, если нет заменим на нужные(напомню что 1 это номер узла который написан сразу под узлом над названием типа узла, далее если это запрос то выбирается поле объекта отвечающее за тип переданных/полученных данных - body для форм или query для query параметров);

Сохраняем;
Создадим узел "HTTP request": "+ Добавить узел" => "Http" => "HTTP request";
Сохраняем изменения;
Свяжем узлы вместе;
Запустим и вызовем цепочку для передачи данных между узлами;
В поле "Url" в начало подставим переменную "apiURL" из "JavaScrtipt" и после неё укажем: /users/me/calendarList ;
Убедимся что метод выбран по умолчанию "Get";
Добавим заголовок "Autorization" и в его значение переменную "bToken" из "JavaScrtipt";
Нажмём "Сохранить";

Создадим ещё один узел "JavaScrtipt": "+ Добавить узел" => "Code" => "JavaScrtipt";
Сохраняем изменения;
Свяжем узлы вместе;
Запустим и вызовем цепочку для передачи данных между узлами;
Скопируем в него содержимое, для поиска нужного календаря из полученного списка из предыдущего запроса:
const tempCalendarsList = JSON.parse(data["{{3.body.items}}"]); // Проверьте что информация подставляется из правильного узла от запроса списка календарей
const targetCalendar = tempCalendarsList.find((calendar) => calendar.summary === "NodulTest"); // Здесь заместо "NodulTest" можете написать название нужного календаря
return {
targetCalendar
}
Проверим данные которые указанны в комментариях к коду;
Cохраняем
Создадим узел "HTTP request": "+ Добавить узел" => "Http" => "HTTP request";
Сохраняем изменения;
Свяжем узлы вместе;
Запустим и вызовем цепочку для передачи данных между узлами;
В поле "Url" в начало подставим переменную "apiURL" из первого "JavaScrtipt" узла, после неё допишем: /calendars/, после подставим ещё переменную "targetCalendar.id" из "JavaScrtipt" с обработкой списка календаря, и в конце: /events;
Меняем метод на метод "Post";
В тело "raw": подставим переменную содержащую объект с новым событием из первого из первого "JavaScrtipt" узла;
Добавим заголовок "Autorization" и в его значение переменную "bToken" из первого узла "JavaScrtipt";
Нажмём "Сохранить";

Свяжем узлы вместе;
Запустим и вызовем цепочку для передачи данных между узлами;
После этого в календаре должно появиться новое событие;

В конце вся цепочка в Nodul будет выглядеть так:

До встречи в следующих статьях;
Ссылки:
Основные:
Nodul
Google OAuth 2.0 Playground
Информация:
Google Calendar API
Google Calendar API CalendarList: list
Google Calendar API Event: insert