Как добавить / изменить события в календаре Google с помощью файла ICS - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь создать файл ICS для добавления событий в календарь Google по электронной почте.В конце концов, календарь будет отправлен нескольким пользователям из настольного приложения.В идеале я хотел бы иметь возможность изменять календарь, если события меняются (только время событий, я игнорирую отмененные события)

Вот мой файл ICS

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//MY COMPANY//Calendar//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
UID:shift-439-emp-128@mycompany.com
DTSTART:20180604T090000
DTEND:20180604T153000
DTSTAMP:20180519T081800
SUMMARY:Morning shfit
LOCATION:Morning Location
DESCRIPTION:Morning shift
END:VEVENT
BEGIN:VEVENT
UID:shift-446-emp-128@mycompany.com
DTSTART:20180605T153000
DTEND:20180605T233000
DTSTAMP:20180519T081800
SUMMARY:Night shift
LOCATION:
DESCRIPTION:Night
END:VEVENT
END:VCALENDAR

Когда яотправьте этот файл в мою учетную запись gmail, и я вижу кнопку «Добавить в календарь Google», которую я могу использовать для добавления событий в мой основной календарь.

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

Вопрос : Как я могу создать новый файл ICS с новым временем, чтобы существующие события были изменены в календаре Google?

Я использовал UID для событий, чтобыGoogle не создает повторяющиеся записи.Но когда я отправляю по электронной почте второй файл ics с измененными событиями (с uids), кнопка «добавить в календарь Google» не появляется.Если я пытаюсь вручную импортировать файл ics из функции импорта календаря Google, то я получаю это сообщение об ошибке

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

Если я каждый раз устанавливаю разные UID, процесс импорта будет работать, но будут создаваться повторяющиеся записи.

Я также попытался использовать REQUEST вместо PUBLISH метод

Спасибо

1 Ответ

0 голосов
/ 01 июня 2018

Мне удалось настроить это для работы с Gmail, используя следующее:

  • METHOD: установлено значение REQUEST
  • SEQUENCE: установлено значение 0 включенопервый запрос и увеличение на 1 каждый раз
  • ATTENDEE: определение пользователя Gmail, получающего электронное письмо, по адресу электронной почты

Другие варианты могут иметь нежелательные последствия:

  • Просмотр только одного из двух событий
  • Не обновляет существующее событие

Office 365 отправляет файлы ICS в Gmail, которые можно обновить, чтобы его можно было использовать дляСсылка на коммерческую реализацию.Вы можете просмотреть запросы, которые Outlook 365 отправляет, используя «Показать оригинал» в Gmail для получения тела календаря в кодировке base64.Outlook 365 использует много других полей, поэтому его полезно изучить.

У меня есть тестовый скрипт в Go, использующий SparkPost, поэтому, если у вас есть какие-либо вопросы или вы хотите его использовать, просто дайте мне знать.SparkPost имеет бесплатный уровень, но вам все равно нужно настроить домен исходящей отправки для его использования.

Вот пример измененного запроса.Я просто увеличиваю SEQUENCE и изменяю время для обновления запроса в Gmail.

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//MY COMPANY//Calendar//EN
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
ATTENDEE;ROLE=REQ-PARTICIPANT;CN=example@gmail.com:MAILTO:example@gmail.com
UID:shift-1807-emp-128@mycompany.com
DTSTART:20180807T010000
DTEND:20180807T020000
DTSTAMP:20180601T033455
SEQUENCE:0
SUMMARY:Morning shift
LOCATION:Morning Location
DESCRIPTION:Morning shift
END:VEVENT
BEGIN:VEVENT
ATTENDEE;ROLE=REQ-PARTICIPANT;CN=example@gmail.com:MAILTO:example@gmail.com
UID:shift-1808-emp-128@mycompany.com
DTSTART:20180807T130000
DTEND:20180807T140000
DTSTAMP:20180601T033455
SEQUENCE:0
SUMMARY:Night shift
LOCATION:Night Location
DESCRIPTION:Night
END:VEVENT
END:VCALENDAR

Следует отметить, что при отправке нескольких событий в одном файле ICS иногда для показа Gmail требуется около секунды или около тогооба события с правильным временем в моем тестировании.

...