Действия календаря

Объекты Action позволяют добавлять интерактивное поведение в дополнения Google Workspace. Они определяют, что происходит, когда пользователь взаимодействует с виджетом (например, кнопкой) в пользовательском интерфейсе дополнения.

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

Например, предположим, вам нужна кнопка, которая при нажатии создает и отображает новую карточку. Для этого необходимо создать новый виджет кнопки и использовать функцию обработчика виджета кнопки setOnClickAction(action) , чтобы задать Action для создания карточки. Определенное вами Action задает функцию обратного вызова Apps Script, которая выполняется при нажатии кнопки. В данном случае вы реализуете функцию обратного вызова для создания нужной карточки и возвращаете объект ActionResponse . Объект ответа сообщает дополнению, что нужно отобразить карточку, созданную функцией обратного вызова.

На этой странице описаны действия виджета, специфичные для календаря, которые вы можете включить в свое дополнение.

Взаимодействие с Google Календарем

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

Предпринятые действия Функция обратного вызова должна возвращать
Добавление участников CalendarEventActionResponse
Настройка данных конференции CalendarEventActionResponse
Добавление вложений CalendarEventActionResponse

Для использования действий виджета и объектов ответа необходимо выполнение всех следующих условий:

  • Действие запускается, когда у пользователя открыто событие в календаре.
  • В поле addOns.calendar.currentEventAccess параметра manifest надстройки Google Workspace установлено значение WRITE или READ_WRITE .
  • Дополнение включает в себя область действия календаря https://www.googleapis.com/auth/calendar.addons.current.event.write .

Изменения, внесенные функцией обратного вызова действия, не сохраняются до тех пор, пока пользователь не сохранит событие в календаре.

Добавить участников с помощью функции обратного вызова

В следующем примере показано, как создать кнопку, которая добавляет конкретного участника к редактируемому событию календаря. В этом примере используется базовая структура карточки:

/**
 * Build a basic 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 basic 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 basic 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. Подробности см. в разделе «Предоставление значков вложений» .