Объекты Action
позволяют встраивать интерактивное поведение в надстройки Google Workspace. Они определяют, что происходит, когда пользователь взаимодействует с виджетом (например, кнопкой) в пользовательском интерфейсе надстройки.
Действие прикрепляется к данному виджету с помощью функции-обработчика виджета , которая также определяет условие, запускающее действие. При срабатывании действие выполняет назначенную функцию обратного вызова . В функцию обратного вызова передается объект события , который содержит информацию о взаимодействиях пользователя на стороне клиента. Вы должны реализовать функцию обратного вызова и заставить ее возвращать определенный объект ответа.
Например, предположим, что вам нужна кнопка, которая создает и отображает новую карточку при нажатии. Для этого вы должны создать новый виджет кнопки и использовать функцию обработчика виджета кнопки setOnClickAction(action)
чтобы установить Action
для создания карты. Определяемое вами Action
определяет функцию обратного вызова Apps Script, которая выполняется при нажатии кнопки. В этом случае вы реализуете функцию обратного вызова для создания нужной карты и возвращаете объект ActionResponse
. Объект ответа сообщает надстройке отобразить карточку, созданную функцией обратного вызова.
На этой странице описаны действия виджета, специфичные для календаря, которые вы можете включить в свое дополнение.
Взаимодействия с календарем
Дополнения Google Workspace, расширяющие возможности Календаря, могут включать в себя несколько дополнительных действий виджета, специфичных для Календаря. Эти действия требуют, чтобы связанная функция обратного вызова действия возвращала специализированные объекты ответа:
Предпринято действие | Функция обратного вызова должна вернуться |
---|---|
Добавление участников | CalendarEventActionResponse |
Настройка данных конференции | CalendarEventActionResponse |
Добавление вложений | CalendarEventActionResponse |
Чтобы использовать эти действия виджета и объекты ответов, должны выполняться все следующие условия:
- Действие запускается, когда у пользователя открыто событие календаря.
- Для поля манифеста
addOns.calendar.currentEventAccess
установлено значениеWRITE
илиREAD_WRITE
. - Надстройка включает
https://www.googleapis.com/auth/calendar.addons.current.event.write
область календаря .
Кроме того, любые изменения, внесенные функцией обратного вызова действия, не сохраняются, пока пользователь не сохранит событие календаря.
Добавление участников с помощью функции обратного звонка
В следующем примере показано, как создать кнопку, которая добавляет конкретного участника к редактируемому событию календаря:
/**
* Build a simple card with a button that sends a notification.
* This function is called as part of the eventOpenTrigger that builds
* a UI when the user opens an event.
*
* @param e The event object passed to eventOpenTrigger function.
* @return {Card}
*/
function buildSimpleCard(e) {
var buttonAction = CardService.newAction()
.setFunctionName('onAddAttendeesButtonClicked');
var button = CardService.newTextButton()
.setText('Add new attendee')
.setOnClickAction(buttonAction);
// Check the event object to determine if the user can add
// attendees and disable the button if not.
if (!e.calendar.capabilities.canAddAttendees) {
button.setDisabled(true);
}
// ...continue creating card sections and widgets, then create a Card
// object to add them to. Return the built Card object.
}
/**
* Callback function for a button action. Adds attendees to the
* Calendar event being edited.
*
* @param {Object} e The action event object.
* @return {CalendarEventActionResponse}
*/
function onAddAttendeesButtonClicked (e) {
return CardService.newCalendarEventActionResponseBuilder()
.addAttendees(["aiko@example.com", "malcom@example.com"])
.build();
}
Настройка данных конференции с помощью функции обратного вызова
Это действие устанавливает данные конференции для открытого события. Для этих данных конференции необходимо указать идентификатор решения конференции, поскольку действие не было инициировано пользователем, выбравшим нужное решение.
В следующем примере показано, как создать кнопку, которая устанавливает данные конференции для редактируемого события:
/**
* Build a simple card with a button that sends a notification.
* This function is called as part of the eventOpenTrigger that builds
* a UI when the user opens a Calendar event.
*
* @param e The event object passed to eventOpenTrigger function.
* @return {Card}
*/
function buildSimpleCard(e) {
var buttonAction = CardService.newAction()
.setFunctionName('onSaveConferenceOptionsButtonClicked')
.setParameters(
{'phone': "1555123467", 'adminEmail': "joyce@example.com"});
var button = CardService.newTextButton()
.setText('Add new attendee')
.setOnClickAction(buttonAction);
// Check the event object to determine if the user can set
// conference data and disable the button if not.
if (!e.calendar.capabilities.canSetConferenceData) {
button.setDisabled(true);
}
// ...continue creating card sections and widgets, then create a Card
// object to add them to. Return the built Card object.
}
/**
* Callback function for a button action. Sets conference data for the
* Calendar event being edited.
*
* @param {Object} e The action event object.
* @return {CalendarEventActionResponse}
*/
function onSaveConferenceOptionsButtonClicked(e) {
var parameters = e.commonEventObject.parameters;
// Create an entry point and a conference parameter.
var phoneEntryPoint = ConferenceDataService.newEntryPoint()
.setEntryPointType(ConferenceDataService.EntryPointType.PHONE)
.setUri('tel:' + parameters['phone']);
var adminEmailParameter = ConferenceDataService.newConferenceParameter()
.setKey('adminEmail')
.setValue(parameters['adminEmail']);
// Create a conference data object to set to this Calendar event.
var conferenceData = ConferenceDataService.newConferenceDataBuilder()
.addEntryPoint(phoneEntryPoint)
.addConferenceParameter(adminEmailParameter)
.setConferenceSolutionId('myWebScheduledMeeting')
.build();
return CardService.newCalendarEventActionResponseBuilder()
.setConferenceData(conferenceData)
.build();
}
Добавляйте вложения с помощью функции обратного вызова
В следующем примере показано, как создать кнопку, которая добавляет вложение к редактируемому событию календаря:
/**
* Build a simple card with a button that creates a new attachment.
* This function is called as part of the eventAttachmentTrigger that
* builds a UI when the user goes through the add-attachments flow.
*
* @param e The event object passed to eventAttachmentTrigger function.
* @return {Card}
*/
function buildSimpleCard(e) {
var buttonAction = CardService.newAction()
.setFunctionName('onAddAttachmentButtonClicked');
var button = CardService.newTextButton()
.setText('Add a custom attachment')
.setOnClickAction(buttonAction);
// Check the event object to determine if the user can add
// attachments and disable the button if not.
if (!e.calendar.capabilities.canAddAttachments) {
button.setDisabled(true);
}
// ...continue creating card sections and widgets, then create a Card
// object to add them to. Return the built Card object.
}
/**
* Callback function for a button action. Adds attachments to the Calendar
* event being edited.
*
* @param {Object} e The action event object.
* @return {CalendarEventActionResponse}
*/
function onAddAttachmentButtonClicked(e) {
return CardService.newCalendarEventActionResponseBuilder()
.addAttachments([
CardService.newAttachment()
.setResourceUrl("https://example.com/test")
.setTitle("Custom attachment")
.setMimeType("text/html")
.setIconUrl("https://example.com/test.png")
])
.build();
}
Установка значка вложения
Значок вложения должен размещаться в инфраструктуре Google. Подробности см. в разделе Предоставление значков вложений .