Сценарий Google Calendar Sync для URL-канала iCal создает несколько экземпляров одной и той же записи календаря.

Я хочу, чтобы Календарь Google (из моего платного G-Suite) синхронизировался с календарем моей клиники Cliniko (у которого есть URL-адрес фида iCal) как можно чаще (пять минут было бы приемлемо).

По умолчанию время синхронизации составляет от 12 до 24 часов, что для меня не работает.

Я попытался использовать этот скрипт от Дерека Антрикана в G-Suite. Я добавил свою информацию.

Сначала это не работало, но когда я изменил запись в скрипте с имени [My first and last name] на [my email address with G Suite hosted domain], он начал синхронизироваться.

Однако это дало мне сообщения об ошибках (я включаю только пару верхних/последних элементов из многих):

[email protected] 06:19 (8 часов назад) мне

Ваш сценарий, Копия синхронизации ICS/ICAL, недавно не завершился успешно. Сводная информация об ошибках показана ниже. Чтобы настроить триггеры для этого скрипта или изменить настройки для получения будущих уведомлений об ошибках, нажмите здесь.

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

(строка 143, код файла) 108 К сожалению, произошла ошибка сервера. Пожалуйста, подождите немного и повторите попытку.

(строка 143, код файла) 1 Запуск Функция Сообщение об ошибке Триггер Конец 07.04.18 17:41 main К сожалению, произошла ошибка сервера. Пожалуйста, подождите немного и повторите попытку.

(строка 143, код файла) по времени 07.04.18 17:41 07.04.18 17:42 Основная служба вызывалась слишком много раз в течение одного дня: электронная почта.

(строка 143, код файла) по времени 07.04.18 17:43

Я считаю, что временные метки не соответствуют британскому времени - это произошло ночью в Великобритании или ранним утром.

Затем я изменил сценарий и снова запустил/установил его, с одним изменением, которое заключалось в том, что временной интервал увеличился с 1 минуты до 5 минут.

Я еще не получил никаких сообщений об ошибках (но они могут где-то накапливаться и еще не отправлены мне по электронной почте).

Однако я замечаю, что события добавляются несколько раз:

Поэтому важной целью является предотвращение этого дублирования (большое спасибо за любую помощь):

введите здесь описание изображения


person Will    schedule 08.04.2018    source источник


Ответы (2)


Я бы посоветовал вам сначала поэкспериментировать, просмотрев журналы. В скрипте есть опция:

var addEventsToCalendar = true;

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

var emailWhenAdded = false; //Will email you when an event is added to your calendar
var email = ""; //OPTIONAL: If "emailWhenAdded" is set to true, you will need to provide your email
person bbcmicro    schedule 08.04.2018
comment
Спасибо БиБиСикро. Замечаю, что в логах видно, что одни записи повторяются несколько раз, а другие нет. Кроме того, я получил электронное письмо от сценариев приложений Google, в котором говорилось, что они выполняются слишком много раз за один день. Однако я понятия не имею, как действовать в настоящее время. - person Will; 09.04.2018

Я была такая же проблема. Проблема оказалась в том, что внешняя служба генерирует новые UID событий каждый раз, когда извлекается файл .ics (что более или менее противоречит цели iCal UID).

Обходной путь (по общему признанию, довольно неэлегантный) состоит в том, чтобы объединить время начала и окончания, местоположение и описание (таким образом создав более или менее уникальный идентификатор) и использовать это значение в теге FID вместо UID iCal. Это должно работать, если вам не нужна поддержка повторяющихся событий, но эта функциональность, скорее всего, все равно не работает, если ваша служба продолжает генерировать новые UID.

Другими словами, замените это:

if (item.includes("UID")){
        currentEvent.id = item.split("UID:")[1];
        feedEventIds.push(currentEvent.id);
      }

С этим:

currentEvent.id = (currentEvent.startTime+currentEvent.endTime+currentEvent.location+currentEvent.title);
feedEventIds.push(currentEvent.id);

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

person Marcel    schedule 30.08.2018