Google-календарь

Создание сервисного аккаунта

Для этого необходимо зарегистрировать свой аккаунт в сервисах Google (https://console.developers.google.com/cloud-resource-manager).

Переходим по ссылке и создаем проект:

Нажимаем Create и немного ждем, пока создается аккаунт. Переходим в настройки сервисного аккаунта

Переходим во вкладку Service accounts и создаем сервисный аккаунт:

Вводим название и почту сервисного аккаунта:

Далее роль owner (Владелец):

Сохраняем и попадаем в список сервисных аккаунтов. Переходим в настройки ключей и создаем новый:

Сразу после создания ключ автоматически загрузится на ваш компьютер. Далее его нужно загрузить на хостинг или в конструктор Salebot и передавать ссылку на него в параметрах запросов, передавая полученный URL в параметре creds_path.

Далее переходим в настройки апи:

Находим апи календаря и включаем его в этом сервисном аккаунте:

На этом создание сервисного аккаунта завершено.

Загрузка файла ключей

Переходим в проект и загружаем полученный файл в блок, например, вот так:

Нажимаем "Готово" и переходим в тестового бота:

Вводим фразу, которую задали для входа в блок. В примере это 123. В ответ получаем ссылку на файл с ключами:

Внимание! Блок удалять нельзя, иначе файл удалится с сервера и нужно будет заново добавлять.

Не забываем блок сделать Не состояние (чтоб не мешал):

Эту ссылку можно сохранить в переменную или передавать в параметре creds_path как есть.

Идентификатор календаря

Идентификатор существующего календаря можно посмотреть в его настройках

Создать новый календарь

Создать новый календарь можно двумя способами: вручную и через функцию (ниже).

Ручное создание календаря:

Чтобы можно было добавлять записи и редактировать существующий календарь (или созданный вручную), нужно добавить соответствующий доступ сервисному аккаунту. Для этого перейдите в настройки нужного календаря и добавьте email сервисного аккаунта.

Создание календаря с помощью функции.

URL функции: https://store.salebot.pro/function/gcalendar

Тип запроса: POST-json

Параметры:

creds_path - ссылка на ключ доступа сервисного аккаунта к апи календаря (полученный по инструкции выше) command - create name - название календаря description - описание календаря

Дополнительные параметры:

time_zone - Часовой пояс календаря. Идентификатор часового пояса IANA. По умолчанию: Europe/Moscow location - географическое положение календаря в виде текста произвольной формы

Также можно дать доступ другому аккаунту, например своему основному аккаунту: owner_email - емейл аккаунта, который будет добавлен как владелец календаря

По умолчанию календарь создастся в сервисном аккаунте. Чтобы иметь возможность визуального редактирования календаря из своего аккаунта, передавайте свой email в параметре owner_email

Сохраняемые значения из JSON-ответа:

После успешного выполнения функция вернет следующие параметры, которые можно сохранить:

{'kind': 'calendar#calendar', 'etag': '"WgASl9FY_5zrEmCZvrt4Qlh6tGQ"', 'id': '[email protected]', 'summary': 'Название календаря’', 'timeZone': 'UTC'} Сохраним id созданного календаря: id -> calendar_id

Для тестирования вы можете вывести на экран переменную #{custom_answer}.

Если был передан емейл (параметр owner_email), то после успешного запроса необходимо перейти во Входящие и подтвердить добавление календаря в ваш аккаунт:

Информация о календаре

URL функции: https://store.salebot.pro/function/gcalendar

Тип запроса: POST-json

Параметры:

creds_path - ссылка на ключ доступа сервисного аккаунта к апи календаря (полученный по инструкции выше) command - get_calendar calendar_id - идентификатор календаря

Сохраняемые значения из JSON-ответа: После успешного выполнения функция вернет следующие параметры, которые можно сохранить. Пример ответа функции:

{'kind': 'calendar#calendar', 'etag': '"6KN4OTLeoqGGu7Nr5uNIQgCGYsU"', 'id': '[email protected]', 'summary': 'Название календаря', 'timeZone': 'UTC'}

Получить список календарей сервисного аккаунта

URL функции: https://store.salebot.pro/function/gcalendar

Тип запроса: POST-json

Параметры:

creds_path - ссылка на ключ доступа сервисного аккаунта к апи календаря (полученный по инструкции выше) command - calendars_list

Сохраняемые значения из JSON-ответа:

После успешного выполнения функция вернет следующие параметры, которые можно сохранить. Пример ответа функции:

{ 'kind': 'calendar#calendarList', 'etag': '"p32o8pm47rfqf20g"', 'nextSyncToken': 'CLCM2Ifb9PECEi5nc2hlZXRzQGdzaGVldHMtMjU0NzEzLmlhbS5nc2VydmljZWFjY291bnQuY29t', 'items': [ { 'kind': 'calendar#calendarListEntry', 'etag': '"1625235372775000"', 'id': '[email protected]', 'summary': 'AAAAAAAAaa', 'timeZone': 'Asia/Singapore', 'colorId': '17', 'backgroundColor': '#9a9cff', 'foregroundColor': '#000000', 'selected': True, 'accessRole': 'owner', 'defaultReminders': [ ] }, { 'kind': 'calendar#calendarListEntry', 'etag': '"1625235805096000"', 'id': '[email protected]', 'summary': 'AAAAAAAAaa', 'timeZone': 'Asia/Singapore', 'colorId': '21', 'backgroundColor': '#cca6ac', 'foregroundColor': '#000000', 'selected': True, 'accessRole': 'owner', 'defaultReminders': [ ] } ] }

События (мероприятия). Events

Быстрое добавление события (мероприятия)

URL функции: https://store.salebot.pro/function/gcalendar

Тип запроса: POST-json

Параметры:

creds_path - ссылка на ключ доступа сервисного аккаунта к апи календаря (полученный по инструкции выше) command - quick_add_event calendar_id - идентификатор календаря event_name - название события

Пример параметров: {"creds_path": "https://files.salebot.pro/uploads/message/file/30037/calendar-project-320517-c241d9ab0565.json", "calendar_id": "[email protected]", "command": "quick_add_event","event_name": "Супер мероприятие"} Сохраняемые значения из JSON-ответа:

После успешного выполнения функция вернет следующие параметры, которые можно сохранить по своему усмотрению.

Для дальнейшего редактирования созданного события рекомендуется сохранить его идентификатор: id -> event_id

Пример ответа функции:

{'kind': 'calendar#event', 'etag': '"3253879667088000"', 'id': 'ljp7a3ocp8oorbov9u2cq221s0', 'status': 'confirmed', 'htmlLink': 'https://www.google.com/calendar/event?eid=bGpwN2Ezb2NwOG9vcmJvdjl1MmNxMjIxczAgaTlzdmVydHN0dm9vMmZxMW8waThjbjM5YThAZw', 'created': '2021-07-22T07:43:53.000Z', 'updated': '2021-07-22T07:43:53.544Z', 'creator': {'email': '[email protected]'}, 'organizer': {'email': '[email protected]', 'displayName': 'Testov', 'self': True}, 'start': {'dateTime': '2021-07-22T07:43:53Z', 'timeZone': 'UTC'}, 'end': {'dateTime': '2021-07-22T08:43:53Z', 'timeZone': 'UTC'}, 'iCalUID': '[email protected]', 'sequence': 0, 'reminders': {'useDefault': True}, 'eventType': 'default'}

Добавление события (мероприятия)

URL функции: https://store.salebot.pro/function/gcalendar

Тип запроса: POST-json

Параметры:

creds_path - ссылка на ключ доступа сервисного аккаунта к апи календаря (полученный по инструкции выше) command - add_event calendar_id - идентификатор календаря event_name - название события

Также нужно указать один из вариантов: дату или дату и время. Если мероприятие будет проводится весь день, то нужно передать даты:

  1. start_date - дата начала мероприятия в формате дд.мм.гггг (23.07.2021)

  2. end_date - дата завершения мероприятия в формате дд.мм.гггг (24.07.2021)

Если мероприятие в определенное время, то нужно передать дату:

  1. start_datetime - дата и время начала мероприятия в формате дд.мм.гггг чч:мм (23.07.2021 12:00)

  2. end_datetime - дата и время завершения мероприятия в формате дд.мм.гггг чч:мм (24.07.2021 13:00)

  3. time_zone - Часовой пояс события. Идентификатор часового пояса IANA. По умолчанию: Europe/Moscow

Если часовой пояс календаря и события разный, то событие добавится со временем в часовом поясе календаря.

Пример:

Календарь в часовом поясе (чс) Europe/Moscow +3, а событие добавляется с часовым поясом Europe/Berlin +2. Время события 12:00 (чс +2) в календарь добавится на 13:00, так как по московскому времени 13:00 соответствует 12:00 в часовом поясе +2

Дополнительные параметры:

event_description - описание события location - географическое положение мероприятия в виде текста произвольной формы email_minutes и popup_minutes - должны быть указаны оба. Время в минутах: за сколько до начала события отправить уведомление участникам на емейл и во всплывающих уведомлениях.

Пример параметров:

{"creds_path": "https://files.salebot.pro/uploads/message/file/30037/calendar-project-320517-c241d9ab0565.json", "calendar_id": "[email protected]", "command": "add_event", "event_name": "Супер мероприятие", "start_datetime": "27.07.2021 12:00", "end_datetime": "27.07.2021 14:00"} Сохраняемые значения из JSON-ответа:

После успешного выполнения функция вернет следующие параметры, которые можно сохранить.

Для дальнейшего редактирования созданного события рекомендуется сохранить его идентификатор: id -> event_id

Пример ответа функции: {'kind': 'calendar#event', 'etag': '"3254057128970000"', 'id': 'ittr5291ppi7snapn8jbct5krs', 'status': 'confirmed', 'htmlLink': 'https://www.google.com/calendar/event?eid=aXR0cjUyOTFwcGk3c25hcG44amJjdDVrcnMgaTlzdmVydHN0dm9vMmZxMW8waThjbjM5YThAZw', 'created': '2021-07-23T08:22:35.000Z', 'updated': '2021-07-23T08:22:53.109Z', 'summary': 'Новое событие44', 'description': 'Descri xbb xhjxkv', 'location': 'city London', 'creator': {'email': '[email protected]'}, 'organizer': {'email': '[email protected]', 'displayName': 'Testov', 'self': True}, 'start': {'dateTime': '2021-07-23T13:30:00Z', 'timeZone': 'Europe/Moscow'}, 'end': {'dateTime': '2021-07-23T14:00:00Z', 'timeZone': 'Europe/Moscow'}, 'iCalUID': '[email protected]', 'sequence': 0, 'attendees': [{'email': '[email protected]', 'displayName': 'Vasya', 'responseStatus': 'needsAction'}], 'reminders': {'useDefault': False, 'overrides': [{'method': 'email', 'minutes': 10}, {'method': 'popup', 'minutes': 10}]}, 'eventType': 'default'}

Получить список событий (мероприятий)

URL функции: https://store.salebot.pro/function/gcalendar

Тип запроса: POST-json

Параметры:

creds_path - ссылка на ключ доступа сервисного аккаунта к апи календаря (полученный по инструкции выше) command - add_event calendar_id - идентификатор календаря

Если не передавать дополнительные события, то результатом будет список событий за сегодняшний день.

Дополнительные параметры:

start_date - дата от которой искать события в формате дд.мм.гггг (23.07.2021) end_date - дата до которой искать события в формате дд.мм.гггг (24.07.2021)

Пример параметров: Будут найдены события за 23 июля

{"creds_path": "https://files.salebot.pro/uploads/message/file/30037/calendar-project-320517-c241d9ab0565.json", "calendar_id": "[email protected]", "command": "get_event_list", "start_date": "22.07.2021", "end_date": "23.07.2021"}

Сохраняемые значения из JSON-ответа:

После успешного выполнения функция вернет следующие параметры, которые можно сохранить.

Список найденных событий можно сохранить в переменную: items -> event_list

Пример ответа функции:

{'kind': 'calendar#events', 'etag': '"p33odnesrinsv20g"', 'summary': 'Testov', 'description': 'Testov description', 'updated': '2021-07-23T12:13:05.686Z', 'timeZone': 'UTC', 'accessRole': 'owner', 'defaultReminders': [], 'items': [{'kind': 'calendar#event', 'etag': '"3254084771372000"', 'id': '6d8rocb9e2r21ue37jgsa0v06i', 'status': 'confirmed', 'htmlLink': 'https://www.google.com/calendar/event?eid=NmQ4cm9jYjllMnIyMXVlMzdqZ3NhMHYwNmkgaTlzdmVydHN0dm9vMmZxMW8waThjbjM5YThAZw', 'created': '2021-07-23T12:11:13.000Z', 'updated': '2021-07-23T12:13:05.686Z', 'summary': 'DDDDDDDDD', 'creator': {'email': '[email protected]'}, 'organizer': {'email': '[email protected]', 'displayName': 'Testov', 'self': True}, 'start': {'date': '2021-07-20'}, 'end': {'date': '2021-07-21'}, 'transparency': 'transparent', 'iCalUID': '[email protected]', 'sequence': 0, 'reminders': {'useDefault': False}, 'eventType': 'default'}]}

Перемещение события в другой календарь

URL функции: https://store.salebot.pro/function/gcalendar

Тип запроса: POST-json

Параметры:

creds_path - ссылка на ключ доступа сервисного аккаунта к апи календаря (полученный по инструкции выше) command - move_event calendar_id - идентификатор календаря, из которого перемещается событие event_id - идентификатор события destination_calendar_id - идентификатор календаря, в который перемещается событие

Сохраняемые значения из JSON-ответа:

После успешного выполнения функция вернет следующие параметры, которые можно сохранить. Пример ответа функции:

{'kind': 'calendar#event', 'etag': '"3253880350568000"', 'id': 'ljp7a3ocp8oorbov9u2cq221s0', 'status': 'cancelled', 'htmlLink': 'https://www.google.com/calendar/event?eid=bGpwN2Ezb2NwOG9vcmJvdjl1MmNxMjIxczAgaTlzdmVydHN0dm9vMmZxMW8waThjbjM5YThAZw', 'created': '2021-07-22T07:43:53.000Z', 'updated': '2021-07-22T07:49:35.284Z', 'creator': {'email': '[email protected]'}, 'organizer': {'email': '[email protected]', 'displayName': 'Тестовый календарь'}, 'start': {'dateTime': '2021-07-22T07:43:53Z', 'timeZone': 'UTC'}, 'end': {'dateTime': '2021-07-22T08:43:53Z', 'timeZone': 'UTC'}, 'iCalUID': '[email protected]', 'sequence': 0, 'reminders': {'useDefault': True}, 'eventType': 'default'}

Информация о мероприятии

URL функции: https://store.salebot.pro/function/gcalendar

Тип запроса: POST-json

Параметры:

creds_path - ссылка на ключ доступа сервисного аккаунта к апи календаря (полученный по инструкции выше) command - get_event calendar_id - идентификатор календаря event_id - идентификатор события

Сохраняемые значения из JSON-ответа:

После успешного выполнения функция вернет следующие параметры, которые можно сохранить. Пример ответа функции:

{'kind': 'calendar#event', 'etag': '"3254067331414000"', 'id': 'ittr5291ppi7snapn8jbct5krs', 'status': 'confirmed', 'htmlLink': 'https://www.google.com/calendar/event?eid=aXR0cjUyOTFwcGk3c25hcG44amJjdDVrcnMgaTlzdmVydHN0dm9vMmZxMW8waThjbjM5YThAZw', 'created': '2021-07-23T08:22:35.000Z', 'updated': '2021-07-23T11:12:55.553Z', 'summary': 'Новое событие44', 'description': 'Descri xbb xhjxkv', 'location': 'city London', 'creator': {'email': '[email protected]'}, 'organizer': {'email': '[email protected]', 'displayName': 'Testov', 'self': True}, 'start': {'dateTime': '2021-07-23T13:30:00Z', 'timeZone': 'Europe/Moscow'}, 'end': {'dateTime': '2021-07-23T14:00:00Z', 'timeZone': 'Europe/Moscow'}, 'iCalUID': '[email protected]', 'sequence': 0, 'attendees': [{'email': '[email protected]', 'displayName': 'Vasya', 'responseStatus': 'needsAction'}], 'reminders': {'useDefault': False, 'overrides': [{'method': 'email', 'minutes': 10}, {'method': 'popup', 'minutes': 10}]}, 'eventType': 'default'}

Удаление мероприятия

URL функции: https://store.salebot.pro/function/gcalendar

Тип запроса: POST-json

Параметры:

creds_path - ссылка на ключ доступа сервисного аккаунта к апи календаря (полученный по инструкции выше) command - remove_event calendar_id - идентификатор календаря event_id - идентификатор удаляемого события

Сохраняемые значения из JSON-ответа:

После успешного выполнения функция вернет следующие параметры, которые можно сохранить. Пример ответа функции:

{'status': 'ok'}

Добавление участника мероприятия

URL функции: https://store.salebot.pro/function/gcalendar

Тип запроса: POST-json

Параметры:

creds_path - ссылка на ключ доступа сервисного аккаунта к апи календаря (полученный поинструкции выше) command - add_client calendar_id - идентификатор календаря event_id - идентификатор события client_email - электронная почта клиента

Дополнительные параметры:

name - описание события comment - комментарий участника

Пример параметров:

{ "creds_path": "https://files.salebot.pro/uploads/message/file/30037/calendar-project-320517-c241d9ab0565.json", "calendar_id": "[email protected]", "command": "add_client", "event_id": "#{event_id}", "client_email": "[email protected]", "name": "Viktor", "comment": "Буду первым!" }

Сохраняемые значения из JSON-ответа:

Функция всегда возвращает статус добавления add_status. Он может иметь три значения:

ok - клиент добавлен exist - клиент уже записан error - ошибка добавления. (Дополнительно с add_status, будет параметр error_message с текстом ошибки)

Пример ответа функции при успехе:

{'kind': 'calendar#event', 'etag': '"3254059247409000"', 'id': 'ittr5291ppi7snapn8jbct5krs', 'status': 'confirmed', 'htmlLink': 'https://www.google.com/calendar/event?eid=aXR0cjUyOTFwcGk3c25hcG44amJjdDVrcnMgaTlzdmVydHN0dm9vMmZxMW8waThjbjM5YThAZw', 'created': '2021-07-23T08:22:35.000Z', 'updated': '2021-07-23T08:58:11.548Z', 'summary': 'Новое событие44', 'description': 'Descri xbb xhjxkv', 'location': 'city London', 'creator': {'email': '[email protected]'}, 'organizer': {'email': '[email protected]', 'displayName': 'Testov', 'self': True}, 'start': {'dateTime': '2021-07-23T13:30:00Z', 'timeZone': 'Europe/Moscow'}, 'end': {'dateTime': '2021-07-23T14:00:00Z', 'timeZone': 'Europe/Moscow'}, 'iCalUID': '[email protected]', 'sequence': 0, 'attendees': [{'email': '[email protected]', 'displayName': 'Vasya', 'responseStatus': 'needsAction'}, {'email': '[email protected]', 'displayName': 'Vasya', 'responseStatus': 'needsAction'}, {'email': '[email protected]', 'displayName': 'Vasya2', 'responseStatus': 'needsAction'}], 'reminders': {'useDefault': False, 'overrides': [{'method': 'email', 'minutes': 10}, {'method': 'popup', 'minutes': 10}]}, 'eventType': 'default', ‘add_status’: 'ok'}

Удаление участника мероприятия

URL функции: https://store.salebot.pro/function/gcalendar

Тип запроса: POST-json

Параметры:

creds_path - ссылка на ключ доступа сервисного аккаунта к апи календаря (полученный по инструкции выше) command - remove_client calendar_id - идентификатор календаря event_id - идентификатор события client_email - электронная почта клиента

Пример параметров:

{ "creds_path": "https://files.salebot.pro/uploads/message/file/30037/calendar-project-320517-c241d9ab0565.json", "calendar_id": "[email protected]", "command": "remove_client", "event_id": "#{event_id}", "client_email": "[email protected]" }

Сохраняемые значения из JSON-ответа:

Функция всегда возвращает статус добавления remove_status. Он может иметь три значения: 1 - клиент успешно удален 0 - клиент не найден error - ошибка удаления. (Дополнительно с remove_status, будет параметр error_message с текстом ошибки)

Пример ответа функции при успехе:

{'kind': 'calendar#event', 'etag': '"3254059247409000"', 'id': 'ittr5291ppi7snapn8jbct5krs', 'status': 'confirmed', 'htmlLink': 'https://www.google.com/calendar/event?eid=aXR0cjUyOTFwcGk3c25hcG44amJjdDVrcnMgaTlzdmVydHN0dm9vMmZxMW8waThjbjM5YThAZw', 'created': '2021-07-23T08:22:35.000Z', 'updated': '2021-07-23T08:58:11.548Z', 'summary': 'Новое событие44', 'description': 'Descri xbb xhjxkv', 'location': 'city London', 'creator': {'email': '[email protected]'}, 'organizer': {'email': '[email protected]', 'displayName': 'Testov', 'self': True}, 'start': {'dateTime': '2021-07-23T13:30:00Z', 'timeZone': 'Europe/Moscow'}, 'end': {'dateTime': '2021-07-23T14:00:00Z', 'timeZone': 'Europe/Moscow'}, 'iCalUID': '[email protected]', 'sequence': 0, 'attendees': [{'email': '[email protected]', 'displayName': 'Vasya', 'responseStatus': 'needsAction'}, {'email': '[email protected]', 'displayName': 'Vasya', 'responseStatus': 'needsAction'}, {'email': '[email protected]', 'displayName': 'Vasya2', 'responseStatus': 'needsAction'}], 'reminders': {'useDefault': False, 'overrides': [{'method': 'email', 'minutes': 10}, {'method': 'popup', 'minutes': 10}]}, 'eventType': 'default', 'remove_status': '1'}