ホームページ

ホームページは、1 つ以上のコンテキスト以外のカードを定義できる Google Workspace アドオンの機能です。コンテキスト以外のカードは、ユーザーが特定のコンテキスト外にいるときにユーザー インターフェースを表示します。たとえば、メッセージや下書きを開かずに Gmail の受信トレイを表示している場合などです。

ホームページでは、クイック アクセス サイドパネル(Google Keep、Google カレンダー、Google ToDo リスト)の Google アプリと同様に、コンテキストに依存しないコンテンツを表示できます。ホームページは、ユーザーがアドオンを初めて開いたときに最初に表示される場所としても機能します。また、新規ユーザーにアドオンの操作方法を説明するうえでも役立ちます。

プロジェクト マニフェストでホームページを指定し、1 つ以上の homepageTrigger 関数を実装して(ホームページの構成を参照)、アドオンのホームページを定義します。アドオンが Google Chat を拡張する場合、そのホームページは Chat 用アプリとの 1 対 1 のダイレクト メッセージの [ホーム] タブに表示され、マニフェストではなく Google Cloud コンソールで構成されます(Chat のホームページを構成するをご覧ください)。

アドオンが拡張するホスト アプリケーションごとに、複数のホームページを設定できます。カスタム ホームページを指定していないホストで使用される共通のデフォルト ホームページを 1 つ定義することもできます。

アドオンのホームページは、次のような場合に表示されます。

  • アドオンがホストで初めて開かれたとき(認証後)、またはユーザーが Chat で Chat 用アプリとの 1 対 1 のダイレクト メッセージで [ホーム] タブを開いたとき。
  • アドオンが開いているときに、ユーザーがコンテキスト コンテキストからコンテキスト以外のコンテキストに切り替えた場合。たとえば、カレンダーの予定の編集からメインのカレンダーに移動します。
  • ユーザーが [戻る] ボタンを何度もクリックして、内部スタックからカードを 1 枚おきにポップアップさせた場合。
  • コンテキスト以外のカードの UI インタラクションが Navigation.popToRoot 呼び出しになる場合。

ホームページを設計することをおすすめします。定義しない場合、ユーザーがホームページに移動するたびに、アドオン名を含む汎用カードが使用されます。

ホームページの設定

Google Workspace アドオンは、addOns.common.homepageTrigger フィールドを使用して、アドオンのマニフェストでホスト アプリケーションのデフォルトのホームページ(コンテキストなし)アドオン コンテンツを構成します。

{
  "addOns": {
    "common": {
      "homepageTrigger": {
        "runFunction": "myFunction",
        "enabled": true
      }
    }
  }
}
  • runFunction: Google Workspace アドオン フレームワークがホームページ アドオンカードをレンダリングするために呼び出す Google Apps Script 関数の名前。この関数はホームページ トリガー関数です。この関数は、ホームページの UI を構成する Card オブジェクトの配列を構築して返す必要があります。複数のカードが返された場合、ホスト アプリケーションは、ユーザーが選択できるリストにカードの見出しを表示します(複数のカードを返すを参照)。

  • enabled: このスコープでホームページ カードを有効にするかどうか。このフィールドは省略可能で、デフォルト値は true です。これを false に設定すると、すべてのホストでホームページ カードが無効になります(ホスト固有の構成でオーバーライドされている場合を除く。ホスト固有の構成を参照)。

ホストが共通のホームページを使用するには、addOns.common.homepageTrigger とホストの最上位リソースの両方がアドオンのマニフェストに存在する必要があります。たとえば、マニフェストに addOns.gmail が存在しない場合、アドオンは Gmail で無効になり、そのホストでホームページなどの機能が表示されません。

共通の構成に加えて、同一構造のホストごとのオーバーライドが、各ホスト アプリケーションの構成(addOns.gmail.homepageTrigger、addOns.calendar.homepageTrigger、その他のホスト固有のトリガー)で利用できます。

次の例は、一般的なホームページ トリガーが定義されているものの、カレンダーとドライブのカスタム関数でオーバーライドされ、Gmail では無効になっているマニフェストを示しています。この構成では、共通の buildHomePage 関数はオーバーライドされるか、ホストが無効になっているため、実行されません。

{
  ...
  "addOns": {
    ...
    "common": {
      "homepageTrigger": { "runFunction": "buildHomePage" }
    },
    "calendar": {
      "homepageTrigger": { "runFunction": "buildCalendarHomepage" }
    },
    "drive": {
      "homepageTrigger": { "runFunction": "buildDriveHomepage" }
    },
    "gmail": {
      "homepageTrigger": { "enabled": false }
    },
    ...
  }
}

次のマニフェストの抜粋は、デフォルトの homepageTrigger と Gmail の構成が省略されていますが、前の例と同等です。

{
  "addOns": {
    "common": {},
    "calendar": {
      "homepageTrigger": { "runFunction": "myCalendarFunction" }
    },
    "drive": {
      "homepageTrigger": { "runFunction": "myDriveFunction" }
    },
    "gmail": {},
    ...
  }
}

homepageTrigger セクションはどれも必須ではありません。ホストプロダクトのアドオンに表示される UI は、対応するマニフェスト フィールドが存在するかどうかと、関連付けられた homepageTrigger があるかどうかによって異なります。次の例は、さまざまなマニフェスト構成でホームページ UI を作成するために実行されるアドオン トリガー関数を示しています。

アドオンのホームページ トリガー関数の実行フローを示す図

Chat のホームページを構成する

他の Google Workspace ホスト アプリケーションとは異なり、Chat を拡張するアドオンは、右側のクイック アクセス パネルにホームページを表示せず、マニフェストで addOns.common.homepageTrigger を使用しません。代わりに、Chat アプリとの 1 対 1 のダイレクト メッセージの [ホーム] タブに、ホームページがカードとして表示されます。

Google Cloud コンソールで Chat 用アドオンのアプリホーム トリガーを有効にして構成するには:

  1. Google Cloud コンソールで、[メニュー] > [API とサービス] > [有効な API とサービス] > [Google Chat API] > [構成] に移動します。

    Google Chat API の構成に移動

  2. [インタラクティブ機能] で、[インタラクティブ機能を有効にする] がオンになっていることを確認し、[アプリのホームをサポートする] チェックボックスをオンにします。

  3. [接続設定 > トリガー] で、アドオンのアーキテクチャに基づいて、[アプリのホーム] フィールドにアプリのホーム ハンドラを指定します。

    • HTTP: アプリのホーム リクエストを処理する HTTPS エンドポイント URL を入力します(または、共通の HTTP エンドポイント URL がすべてのイベントを受信するように空白のままにします)。
    • Google Apps Script: ホームページ カードを作成して返す Google Apps Script コールバック関数の名前を入力します(デフォルトは onAppHome)。
  4. [保存] をクリックします。

ユーザーが Chat 用アプリとのダイレクト メッセージの [ホーム] タブを開くと、Chat は アプリホーム トリガー イベントをエンドポイントまたは関数に送信します。ホームページをレンダリングするには、pushCard ナビゲーション アクションを含む RenderActions オブジェクトを返します(または、ホームページ カードのボタンのクリックに応答してホームページを更新する場合は、updateCard を使用します)。

HTTP

{
  "action": {
    "navigations": [
      {
        "pushCard": {
          "header": {
            "title": "Welcome to App Home"
          },
          "sections": [
            {
              "widgets": [
                {
                  "textParagraph": {
                    "text": "Manage your settings and view your dashboard here."
                  }
                }
              ]
            }
          ]
        }
      }
    ]
  }
}

Google Apps Script

function onAppHome(event) {
  const card = CardService.newCardBuilder()
      .setHeader(
          CardService.newCardHeader().setTitle('Welcome to App Home'))
      .addSection(
          CardService.newCardSection().addWidget(
              CardService.newTextParagraph().setText(
                  'Manage your settings and view your dashboard here.')))
      .build();

  return CardService.newActionResponseBuilder()
      .setNavigation(CardService.newNavigation().pushCard(card))
      .build();
}

Chat トリガーの処理とアクションの返信について詳しくは、ユーザー インタラクションを受け取って応答するをご覧ください。

ホームページのイベント オブジェクト

呼び出されると、前述のホームページ トリガー関数(runFunction)または App Home エンドポイントに、呼び出しコンテキストのデータを含むイベント オブジェクトが渡されます。

ホームページのイベント オブジェクトには、ウィジェットやコンテキスト情報は含まれません。渡される情報には、次の共通イベント オブジェクト フィールドが含まれます。

Chat では、App Home イベント オブジェクトに、ユーザーとインタラクション時間に関する情報を含む chat フィールドも含まれます。

  • chat.user: [ホーム] タブを開いた Chat ユーザー。
  • chat.eventTime: ユーザーが [ホーム] タブを開いたときのタイムスタンプ。

詳しくは、イベント オブジェクトをご覧ください。

その他のコンテキスト以外のカード

アドオンの UI には、ホームページ以外のコンテキスト以外のカードを追加できます。たとえば、ホームページに [設定] カードを開いてアドオンの設定を調整するボタンがある場合(通常、このような設定はコンテキストに依存しません)。

コンテキストなしのカードは他のカードと同様に作成されます。唯一の違いは、カードを生成して表示するアクションまたはイベントです。カード間のトランジションの作成方法について詳しくは、ナビゲーション方法をご覧ください。