Как уже упоминалось, ключ в том, что вы должны использовать для этого расширенный API Google.Тем не менее, текст на этой странице , который гласит:
Отправляет электронное письмо с приглашением и помещает событие в их календарь.
... очень вводит в заблуждение.Единственный способ отправить электронное письмо - это установить для запроса sendUpdates
на all
.
Сначала вы можете убедиться, что sendUpdates
является ключевым элементом при отправке электронной почты для новых событий с помощью расширенного API:
- Перейти к этой ссылке .
Нажмите Попробуйте прямо сейчас кнопка вверху.
Это должно показать вам форму со следующей заполненной информацией:
- calendarId:
primary
- sendUpdates:
all
Тело запроса:
{
"start": {
"date": "2029-04-04"
},
"end": {
"date": "2029-04-04"
},
"summary": "Test",
"attendees": [
{
"email": "your.email+1@example.com"
}
]
}
Измените your.email+1@example.com
на свой адрес электронной почты.
Обратите внимание, чтоэто не может быть ваш точный адрес электронной почты, с которым вы вошли в систему.В противном случае скрипт заметит, что вы пытаетесь отправить электронное письмо себе, а не отправлять его.Вместо этого, если у вас есть учетная запись электронной почты Google, вместо нее следует использовать адрес плюс .
Нажмите кнопку «Выполнить».
После предоставленияразрешения, вы получите электронное письмо в свой почтовый ящик с полностью заполненным событием календаря, точно так же, как оно отправляется при использовании пользовательского интерфейса Календаря Google.
- Если вы хотите окончательно доказать важность
sendUpdates
, установитепустое вместо all
.Отправить приглашение.Обратите внимание, что он не поступил в ваш почтовый ящик.
Если он не работает, убедитесь, что вы следуете этим предостережениям :
- Вы должныне отправлять письмо на тот же залогиненный аккаунт гугл.Например, используйте положительный адрес или отправьте его в другую учетную запись.
- Убедитесь, что для
sendUpdates
установлено значение all
. - Убедитесь, что событие наступит в будущем.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 , мы должны соблюдать это примечание:
Примечание. Это расширенная служба, которую необходимо включить перед использованием.
Это означает, что есть некоторые предварительные условия перед переходом в код:
Сначала включите Google Calendar API в своем проекте облачной платформы:
- В своем сценарии перейдите к разделу Ресурсы>Проект Cloud Platform ...
Выполните одно из следующих действий:
Далее включите API-интерфейс Календаря Google для сценария:
- Вернитесь к своему сценарию, Ресурсы> Расширенные службы Google
Нажмите "Вкл" рядом с 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);
}
Некоторые предостережения :
- Когда вы передадитеeventId, вам нужно будет удалить
@google.com
в конце eventId. Сначала вы должны позвонить get
, чтобы получить текущий список приглашенных.Если вы этого не сделаете, вы случайно удалите всех людей, которые изначально присутствовали на мероприятии.См. этот ответ для получения дополнительной информации.
Примечание: patch
умный и будет отправлять обновления по электронной почте только тем людям, которые были добавлены.Например, если текущие люди на событии [alice, bob]
, и вы отправили патч с [alice, bob, charlie]
, только charlie
получит электронное письмо.Это именно то, что вы хотите!
- Все предыдущие предостережения в приведенном выше списке применяются.
Опять же, ключ знает, как пройтив sendUpdates
до insert()
метода.Я не смог найти никакой документации о методе исправления 1 , но автозаполнение показало, что есть параметр optionalArgs
, который можно добавить.Я случайно попробовал формат, который вы видите выше, и это сработало!
Если это не работает, убедитесь, что вы прочитали все предостережения выше.
Примечание. Я рад, что это сработало с API Google, потому что если это не так,скорее всего, это означало необходимость вручную отправлять электронные письма и изучать как добавить метаданные календаря к сообщению, чтобы Gmail анализировал его правильно .
1 У нас есть API общего патча , но это полезно только при отправке необработанного JSON.Мы используем Google Calendar
обертку , которая не отображается точно так же.