網站目錄

有了應用程式動作,使用者只需要說出「Ok Google,用範例應用程式顯示 Three Dot Cafe 的菜單」這類指令,即可直接取得應用程式內容。這項功能稱作深層連結,供使用者更輕鬆使用您的應用程式。

為了執行這類要求,Google 助理會為應用程式內的相符內容產生深層連結。如果您會主動維護網站,提供各種內容或產品資訊,且應用程式內的深層連結都是依照公開網站內容建置而成,即可設定讓 Google 助理透過網站目錄,針對動作的執行要求從網站擷取網址。

網站目錄意指應用程式支援的項目網址所在的網站位置。如果您在 Android 應用程式的 shortcuts.xml 內指定了網站,當使用者叫用應用程式動作,Google 助理就會將使用者查詢內容 (如「Three Dot Cafe」) 與網站 Google 搜尋索引中的對應網址進行比對。

優點

如果應用程式設有會定期更新的大型項目清單,供使用者在應用程式內查看或點購這些項目,則使用網站目錄就有所助益:

  • 網站目錄資料會留在您的網站內,不像內嵌目錄資料會在應用程式內儲存項目清單。內嵌目錄資料只能藉由發布新版應用程式完成更新,可能會有過時的風險,允許 Google 助理存取網站資料即可避免。

  • 內嵌目錄的上限為 1,000 筆項目。相比之下,網站目錄沒有項目數量限制,可以隨您的需求擴充。

  • 網站目錄可以讓執行要求只處理網站擷取而來的可預測內容網址,藉此簡化應用程式的邏輯。相對來說,如果您未設定目錄,Google 助理會將意圖參數對應至網址範本中的變數,進而產生執行要求的深層連結。如此一來,您的執行要求便需要分析這個動態產生的網址,才能判定使用者是否曾要求取得應用程式中支援的實體。

運作方式

在應用程式動作期間,Google 助理會透過您在 shortcuts.xml 定義的內建意圖 (BII) 建立與應用程式內容的深層連結。Google 助理會利用自然語言處理方式辨識使用者要求的相關項目,將其擷取成 BII 參數,然後根據 shortcuts.xml. 內的執行要求設定,利用參數產生深層連結。

有三種方法可產生執行要求的深層連結:

  • 參數對應:將意圖參數對應到執行要求網址範本內的預留位置。
  • 內嵌目錄:比對意圖參數和應用程式內定義的支援 entities
  • 網站目錄:比對意圖參數和在網站 Google 搜尋索引中找到的內容。

網站目錄是由開發人員定義的網站網址模式 (例如 https://www.exampleapp.com/restaurants/.*),代表某應用程式支援實體的實體集。

如果您為網站目錄設定了 BII 參數,Google 助理會查詢網站,以便執行和使用者查詢內容相符的實體。然後,Google 助理會將符合設定網址模式 (如 https://www.exampleapp.com/restaurants/three-dot-cafe) 的網址結果傳遞給執行要求。

圖 1. 範例:使用網站目錄擷取餐廳實體項目的 Google 助理查詢。

支援的內建意圖

以下 BII 可支援網站目錄的特定意圖參數:

  • [actions.intent.CREATE_REVIEW]
  • [actions.intent.GET_NEWS_ARTICLE]
  • [actions.intent.GET_REVIEW]
  • [actions.intent.GET_THING]
  • [actions.intent.ORDER_MENU_ITEM]
  • [actions.intent.GET_EXERCISE_PLAN]
  • [actions.intent.GET_DIGITAL_DOCUMENT]
  • [actions.intent.GET_ITEM_LIST]
  • [actions.intent.GET_OFFER]
  • [actions.intent.CREATE_OFFER]
  • [actions.intent.GET_PRODUCT]
  • [actions.intent.UPDATE_CART]
  • [actions.intent.CREATE_SOCIAL_MEDIA_CONNECTION]
  • [actions.intent.GET_IMAGE_OBJECT]
  • [actions.intent.GET_SOCIAL_MEDIA_POSTING]
  • [actions.intent.GET_SOCIAL_MEDIA_PROFILE]
  • [actions.intent.CREATE_TAXI_RESERVATION]
  • [actions.intent.CREATE_FLIGHT_RESERVATION]
  • [actions.intent.CREATE_LODGING_RESERVATION]
  • [actions.intent.GET_LOCAL_BUSINESS]
  • [actions.intent.GET_RESERVATION]
  • [actions.intent.UPDATE_RESERVATION]

新增網站目錄

找出支援的 BII 後,即可更新 shortcuts.xml 並加入網站詳細資料,為網站目錄啟用該 BII。shortcuts.xml 檔案是 Android 專案資源,您可以在此定義對應至應用程式功能的 BII,以及各 BII 應該如何產生供應用程式執行的深層連結。如要進一步瞭解 shortcuts.xml,請參閱「建立 shortcuts.xml」。

若要讓支援的 BII 使用網站目錄,請按照以下步驟操作:

  1. 在應用程式的 shortcuts.xml 檔案中新增 <capability> 標記,並將 android:name 屬性設為您要使用網站目錄處理的 BII 名稱,例如:actions.intent.ORDER_MENU_ITEM

  2. <capability> 標記中新增 <intent> 標記,並將 android:action 屬性設定為此意圖要啟用的檢視畫面名稱。

  3. 在同一個 <intent> 標記中新增 <parameter> 標記,並將其 android:name 屬性設定為最接近網頁描述實體的 BII 參數。舉例來說,為 ORDER_MENU_ITEM 提供網站目錄時,您應該將選單頁面連結到 menuItem.name

  4. 在新的 <parameter> 標記中新增 <data> 標記,並將其 android:pathPattern 屬性設為您希望網站目錄使用的路徑網址模式。

您按照上述步驟設定 shortcuts.xml 後,表示您在 android:pathPattern 屬性中提供了網址模式,這樣 Google 助理就能從該模式的 Google 搜尋索引中擷取網站內容,然後使用和您定義的網址路徑模式相符的結果,為執行要求提供網址值。接著,您的應用程式會根據 Google 助理提供的網址資料,將使用者導向應用程式的特定位置。

舉例來說,您的網站內有網址路徑開頭為 https://www.examplecafe.com/items/ 的產品清單。您使用 pathPatternhttps://www.examplecafe.com/items/.*,而 Google 助理會在網頁搜尋中使用這個網址模式找出執行要求網址,例如 https://www.examplecafe.com/items/item123

Google 助理找到相符的網站目錄網址後,便會在執行要求意圖的 <data> 欄位中提供這筆網址,如同深層連結一樣。請使用意圖的 getData() 方法取得網址,當做 Uri 物件。接收意圖的應用程式活動會負責解析網址,並啟用合適的應用程式使用者介面。

shortcuts.xml 範例

以下範例會定義一項 ORDER_MENU_ITEM BII,此 BII 會提供網站目錄,以便為含有 menuItem.name BII 參數的要求傳回網址結果:

<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
  <capability android:name="actions.intent.ORDER_MENU_ITEM">
    <intent
      android:action="android.intent.action.VIEW"
      android:targetPackage="com.example.myapp"
      android:targetClass="com.example.myapp.OrderMenuItemActivity">
      <!-- Define URL match pattern in the pathPattern data field -->
      <parameter android:name="menuItem.name">
        <data android:pathPattern="https://www.examplecafe.com/items/.*"/>
      </parameter>
    </intent>
  </capability>
</shortcuts>

在以上範例中,我們為 menuItem.name 指定了 pathPattern,指示 Google 助理僅傳回符合以下網址模式的網址:https://www.examplecafe.com/items/.*

如需查看更多 shortcuts.xml 範例,瞭解何謂支援網路目錄的 BII,請參閱參考說明文件

遺失搜尋結果的備用處理方式

如果網站目錄結果無法回傳給執行要求,此時應用程式應該要實作備份邏輯,以便在盡可能提供最佳使用者體驗的情況下執行動作。導致結果遺失的狀況包括:

  • 缺少意圖參數:使用者在查詢內容中省略預期的參數,或是 Google 助理無法理解使用者要求中的參數。
  • 缺少網址結果:Google 助理無法在您的網站中找到符合使用者查詢內容的實體。

您可以為單一功能定義多個 <intent> 元素,處理遺失的參數值。如果 Google 助理無法滿足第一項意圖,便會進入備用的下一個意圖,以此類推。

備用意圖不應要求取得參數,而應利用更通用的深層連結執行功能,例如顯示使用者查詢內容的搜尋結果。

在以下的 shortcuts.xml 範例中,ORDER_MENU_ITEM BII 定義了兩個執行要求:第一個預期從 menuItem.name 參數取得網址,第二個不需要參數,並會將使用者轉送到顯示所有選單項目的頁面。

<capability android:name="actions.intent.ORDER_MENU_ITEM">
  <intent
    android:action="android.intent.action.VIEW"
    android:targetPackage="com.example.myapp"
    android:targetClass="com.example.myapp.OrderMenuItemActivity">
    <parameter android:name="menuItem.name">
      <data android:pathPattern="https://www.examplecafe.com/items/.*"/>
    </parameter>
  </intent>
  <!-- Fallback intent with no required parameters -->
  <intent
    android:action="android.intent.action.VIEW"
    android:targetPackage="com.example.myapp"
    android:targetClass="com.example.myapp.ViewMenuActivity">
    <url-template android:value="myapp://app.examplecafe.com/menu/all-items" />
  </intent>
</capability>

在未傳回網站目錄網址的情況下,使用者查詢內容可能仍會用做備用意圖,例如用來顯示搜尋結果。

以下的 shortcuts.xml 範例定義了兩個意圖元素:

  1. 第一個需要 menuItem.name 參數的網站目錄深層連結。
  2. 如果未傳回深層連結,第二個意圖會使用 menuItem.name 的使用者查詢內容 (如有) 顯示搜尋結果。
<capability android:name="actions.intent.ORDER_MENU_ITEM">
  <intent
    android:action="android.intent.action.VIEW"
    android:targetPackage="com.example.myapp"
    android:targetClass="com.example.myapp.OrderMenuItemActivity">
    <parameter android:name="menuItem.name">
      <data android:pathPattern="https://www.examplecafe.com/items/.*" />
    </parameter>
  </intent>
  <!-- Fallback intent displaying search results, using "menuItem.name" -->
  <intent
    android:action="android.intent.action.VIEW"
    android:targetPackage="com.example.myapp"
    android:targetClass="com.example.myapp.SearchMenuActivity">
    <parameter-mapping android:name="menuItem.name" android:key="food" />
    <url-template android:value="https://www.examplecafe.com/search?q={?food}" />
  </intent>
</capability>

透過網站目錄新增應用程式內搜尋功能

您可以結合網路目錄與 actions.intent.GET\_THING BII 的實作方式,讓使用者在應用程式中搜尋網路內容。

這個 BII 會依應用程式預設的應用程式搜尋功能來搜尋內容或實體,以便使用「Ok Google,用範例應用程式顯示瀑布步道」這類查詢內容。針對 GET_THING BII 傳遞的 thing.name 功能參數設定網站目錄後,系統會傳遞網站內的相符實體結果當做執行要求。

如需網路目錄的 shortcuts.xml 範例,請參閱「GET\_THING BII 參考資料」。

測試網路目錄

您為 BII 執行要求定義網站目錄後,表示您為指定的 BII 參數定義了 urlTemplate 模式,這樣 Google 助理就能使用和該模式相符的網站結果產生深層連結。如果找不到網站目錄結果,Google 助理會產生和備用意圖 urlTemplate 模式相符的網址。您可以驗證 Google 助理提供的連結是否為與網站目錄 urlTemplate 模式相符的網址,藉此測試網站目錄的實作情形。

在以下 ORDER_MENU_ITEM BII 範例中,Google 助理會產生網站目錄執行要求連結,此連結與 menuItem.name 參數中指定的 urlFilter 模式相符,例如:https://www.examplecafe.com/items/nuggets。第二個意圖則採用 menuItem.name 的值,並在第一個意圖與網址模式不符時執行搜尋。

<capability android:name="actions.intent.ORDER_MENU_ITEM">
  <!-- web inventory fulfillment -->
  <intent
    android:action="android.intent.action.VIEW"
    android:targetPackage="com.example.myapp"
    android:targetClass="com.example.myapp.OrderMenuItemActivity">
    <parameter name="menuItem.name">
      <data android:pathPattern="https://www.examplecafe.com/items/.*" />
    </parameter>
  </intent>
  <!-- search intent -->
  <intent
    android:action="android.intent.action.VIEW"
    android:targetPackage="com.example.myapp"
    android:targetClass="com.example.myapp.MenuSearchActivity">
    <parameter-mapping android:name="menuItem.name" android:key="food" />
    <url-template android:value="https://www.examplecafe.com/search?q={?food}" />
  </intent>
</capability>

您可以使用應用程式動作測試工具,在實體或虛擬裝置上測試網站目錄。

如要使用這個測試工具,請按照下列步驟操作:

  1. 連結到執行應用程式的測試裝置。
  2. 在 Android Studio 中,依序前往「Tools」>「App Actions」>「App Actions Test Tool」
  3. 按一下「Create Preview」
  4. 在 Android Studio 中,使用您的測試裝置執行應用程式。
  5. 在測試裝置上使用 Google 助理應用程式,確認應用程式動作的呈現。比方說,您可以說類似「Ok Google,在範例咖啡廳點雞塊」的句子。
  6. 觀察應用程式行為,或使用 Android Studio 偵錯工具確認是否達到想要的動作結果。