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

Объекты 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. Подробности см. в разделе Предоставление значков вложений .