カレンダーの操作

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Action オブジェクトを使用すると、Google Workspace アドオンにインタラクティブな動作を組み込むことができます。ユーザーがアドオン UI でウィジェット(ボタンなど)を操作したときの動作を定義します。

アクションは、ウィジェット ハンドラ関数を使用して特定のウィジェットに関連付けられます。これにより、アクションをトリガーする条件も定義されます。トリガーされると、アクションは指定されたコールバック関数を実行します。コールバック関数には、ユーザーのクライアントサイドのインタラクションに関する情報を保持するイベント オブジェクトが渡されます。コールバック関数を実装し、特定のレスポンス オブジェクトを返すようにする必要があります。

たとえば、ボタンをクリックすると新しいカードが作成されて表示されるボタンがあるとします。そのためには、新しいボタン ウィジェットを作成し、ボタン ウィジェット ハンドラ関数 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();
  }

コールバック関数を使用して会議データを設定する

この操作を行うと、開いているイベントに会議データが設定されます。目的のソリューションを選択したユーザーによってアクションがトリガーされないため、この会議データには会議ソリューション ID を指定する必要があります。

次の例は、編集中のイベントの会議データを設定するボタンを作成する方法を示しています。

  /**
   * 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 のインフラストラクチャ上でホストする必要があります。詳しくは、アタッチメントのアイコンを指定するをご覧ください。