Как отправить стандартное приглашение по электронной почте при вызове addGuest на CalendarEvent? - PullRequest
0 голосов
/ 01 января 2019

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

enter image description here

Если я выберу«Отправить» отправляет пользователю красиво отформатированное электронное письмо с возможностью ответа и на событие календаря:

enter image description here

Это работает безупречно, когда вы вручную используете пользовательский интерфейс Календаря Google.Проблема в том, что я пытаюсь использовать Google Apps Scripts для автоматизации добавления людей в события.

Я программно добавляю гостей в CalendarEvent с помощью addGuest () :

event.addGuest("user@example.com");

Однако, похоже, нет возможности отправить электронное письмо.

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

  var event = CalendarApp.getDefaultCalendar().createEvent(
    'Test',
    new Date('April 5, 2029 20:00:00 UTC'),
    new Date('April 5, 2029 21:00:00 UTC'),
    {sendInvites: true, guests:"your.email+1@example.com"});
  Logger.log(event.getId());

Правильно отправляет красиво отформатированное электронное письмо.

Однако опция sendInvites работает только при новом создании события.Если позже я позвоню:

  var event = CalendarApp.getEventById("insert_id_here");
  event.addGuest("your.email+2@example.com");

... он не отправит обновление по электронной почте (даже если событие было создано с sendInvites=true).Это означает, что sendInvites является временным и не сохраняется в событии.

Есть ли способ sendInvites при вызове addGuest() для события?Например, event.addGuest("user@example.com", {sendInvite: true})?

Существуют ли какие-либо другие обходные пути, которые приведут к тому же электронному письму, которое отправляется при нажатии этой кнопки "Отправить" в пользовательском интерфейсе выше?

Примечание: я делаю не хотят использовать MailApp для отправки электронного письма, потому что оно не будет красиво отформатировано, как то, которое автоматически отсылает Google (например, со встроенным приглашением в календарь, посетителями, описанием, ссылками на ответ и т. д., и т. д. и т. д.).


Обновление:

  • Я только что увидел getAllTagKeys в API и надеялся, что смогу использовать это для получения sendInvitesключ, но это не так.Он пуст даже для событий, для которых sendInvites имеет значение true.

Ответы [ 2 ]

0 голосов
/ 12 августа 2019

см. Следующий запрос.

метод: POST

конечная точка: https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=all

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

Ввод Json Like:
{"kind": "calendar # event", "etag": "etag", "status": "подтверждается", "сводка": "JayKara "," description ":" eqwbdjhwhhwhhwrhjehrhejhfj "," location ":" America "," creator ": {" email ":" @mail.com "," self ": true}," organizer ": {"email": "@mail.com", "self": true}, "start": {"date": "2019-12-23"}, "end": {"date": "2019-12-24 "}," originalStartTime ": {" date ":" 2019-12-24 "}," visibility ":" public "," чел. ": [{" Email ":" **** @ mail.com "// это парни в гостях}]}.

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

Приветствия!

0 голосов
/ 04 апреля 2019

Как уже упоминалось, ключ в том, что вы должны использовать для этого расширенный API Google.Тем не менее, текст на этой странице , который гласит:

Отправляет электронное письмо с приглашением и помещает событие в их календарь.

... очень вводит в заблуждение.Единственный способ отправить электронное письмо - это установить для запроса sendUpdates на all.


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

  1. Перейти к этой ссылке .
  2. Нажмите Попробуйте прямо сейчас кнопка вверху.

    Это должно показать вам форму со следующей заполненной информацией:

    • calendarId: primary
    • sendUpdates: all
    • Тело запроса:

      {
        "start": {
          "date": "2029-04-04"
        },
        "end": {
          "date": "2029-04-04"
        },
        "summary": "Test",
        "attendees": [
          {
            "email": "your.email+1@example.com"
          }
        ]
      }
      
  3. Измените your.email+1@example.com на свой адрес электронной почты.

    Обратите внимание, чтоэто не может быть ваш точный адрес электронной почты, с которым вы вошли в систему.В противном случае скрипт заметит, что вы пытаетесь отправить электронное письмо себе, а не отправлять его.Вместо этого, если у вас есть учетная запись электронной почты Google, вместо нее следует использовать адрес плюс .

  4. Нажмите кнопку «Выполнить».

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

  5. Если вы хотите окончательно доказать важность sendUpdates, установитепустое вместо all.Отправить приглашение.Обратите внимание, что он не поступил в ваш почтовый ящик.

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

  1. Вы должныне отправлять письмо на тот же залогиненный аккаунт гугл.Например, используйте положительный адрес или отправьте его в другую учетную запись.
  2. Убедитесь, что для sendUpdates установлено значение all.
  3. Убедитесь, что событие наступит в будущем.Google никогда не будет отправлять электронные письма с приглашениями, отправленными на события в прошлом.Это верно, даже если вы вручную используете интерфейс Календаря Google.Вам будет задан вопрос, хотите ли вы отправлять обновления пользователю (-ям), вы выбираете «да», но, поскольку событие уже прошло, оно не будет отправлять электронную почту.

Поскольку первоначальный вопрос уже показывает, как использовать стандарт CalendarApp для выполнения того, что мы делали выше, мы пока не достигли многого.Теперь, когда мы знаем, что sendUpdates важен, пришло время взглянуть на добавление гостя.

Как указывает первоначальный вопрос, нет способа указать sendInvite (как это было бы с стандарт Calendar API) или sendUpdates (как мы это сделали бы с advanced Calendar API) при использовании CalendarApp.Единственный метод, который у нас есть, это addGuest () .

К счастью, мы можем использовать API расширенного календаря, аналогично тому, как мы это делали выше, и отправлять обновление (также известное как PATCH) для события.Вместо того, чтобы взаимодействовать с необработанным JSON и Advanced Calendar API, мы можем использовать приятную оболочку Google для расширенного API (он же Calendar).

Однако, поскольку мы используем Advanced Calendar API , мы должны соблюдать это примечание:

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

Это означает, что есть некоторые предварительные условия перед переходом в код:

  1. Сначала включите Google Calendar API в своем проекте облачной платформы:

    1. В своем сценарии перейдите к разделу Ресурсы>Проект Cloud Platform ...
    2. Выполните одно из следующих действий:

      • Если вы видите This script has an Apps Script-managed Cloud Platform project., поздравления, вы сделали этот шаг !
      • Если вы видите This script is currently associated with project:, сделайте следующее:

        1. Нажмите на ссылку под This script is currently associated with project:

          Thisперенесет вас в текущий проект на Google Cloud Platform.

        2. API и службы> Панель инструментов
        3. EnaAPI и сервисы
        4. Добавить API Календаря Google
        5. Нажмите кнопку Включить.
        6. Вы можете спокойно проигнорировать предупреждение: To use this API, you may need credentials. Click 'Create credentials' to get started.
      • Если оба из вышеперечисленных не удаются, вы можете попробовать ядерный маршрут и воссоздать вашу электронную таблицу / документ / скрипт в любом случае.
  2. Далее включите API-интерфейс Календаря Google для сценария:

    1. Вернитесь к своему сценарию, Ресурсы> Расширенные службы Google
    2. Нажмите "Вкл" рядом с Google Calendar API.

      Теперь вы готовы использовать расширенный API в сценарии.

С этими предпосылками теперь можно создать функцию:

// Note: requires advanced API
function addGuestAndSendEmail(calendarId, eventId, newGuest) {
  var event = Calendar.Events.get(calendarId, eventId);
  var attendees = event.attendees;
  attendees.push({email: newGuest});

  var resource = { attendees: attendees };
  var args = { sendUpdates: "all" };

  Calendar.Events.patch(resource, calendarId, eventId, args);
}

Некоторые предостережения :

  1. Когда вы передадитеeventId, вам нужно будет удалить @google.com в конце eventId.
  2. Сначала вы должны позвонить get, чтобы получить текущий список приглашенных.Если вы этого не сделаете, вы случайно удалите всех людей, которые изначально присутствовали на мероприятии.См. этот ответ для получения дополнительной информации.

    Примечание: patch умный и будет отправлять обновления по электронной почте только тем людям, которые были добавлены.Например, если текущие люди на событии [alice, bob], и вы отправили патч с [alice, bob, charlie], только charlie получит электронное письмо.Это именно то, что вы хотите!

  3. Все предыдущие предостережения в приведенном выше списке применяются.

Опять же, ключ знает, как пройтив sendUpdates до insert() метода.Я не смог найти никакой документации о методе исправления 1 , но автозаполнение показало, что есть параметр optionalArgs, который можно добавить.Я случайно попробовал формат, который вы видите выше, и это сработало!

Если это не работает, убедитесь, что вы прочитали все предостережения выше.

Примечание. Я рад, что это сработало с API Google, потому что если это не так,скорее всего, это означало необходимость вручную отправлять электронные письма и изучать как добавить метаданные календаря к сообщению, чтобы Gmail анализировал его правильно .


1 У нас есть API общего патча , но это полезно только при отправке необработанного JSON.Мы используем Google Calendar обертку , которая не отображается точно так же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...