Webinventar

Mit App Actions können Nutzer direkt zum Inhalt Ihrer App wechseln, indem sie z. B. sagen: „Hey Google, zeig mir das Menü für Three Dot Cafe in der Beispiel-App.“ Diese Funktion wird als Deeplink bezeichnet und kann Ihren Nutzern dabei helfen, Aufgaben mit Ihrer App zu erledigen.

Um diese Art von Anfrage zu erfüllen, generiert Google Assistant einen Deeplink zu passenden Inhalten in Ihrer App. Wenn Sie Ihre Website aktiv mit Inhalten oder Produktinformationen pflegen und Ihre In-App-Deeplinks um diese öffentlichen Webinhalte angeordnet sind, können Sie Assistant so konfigurieren, dass URLs für die Aktionsausführung von Ihrer Website mithilfe eines Webinventars abgerufen werden.

Ein Webinventar ist der Speicherort von Artikel-URLs, die von deiner App unterstützt werden. Wenn ein Nutzer deine App-Aktion aufruft, ordnet Assistant die Nutzeranfrage (z. B. „Three Dot Cafe“) den entsprechenden URLs im Google-Suchindex der Website zu, die du in der shortcuts.xml für deine Android-App angegeben hast.

Vorteile

Webinventar bietet Vorteile für Apps mit umfangreichen, regelmäßig aktualisierten Listen von Artikeln, die Nutzer in der App ansehen oder bestellen:

  • Im Gegensatz zu Inline-Inventardaten, bei denen Artikellisten in Ihrer App gespeichert werden, befinden sich Webinventardaten auf Ihrer Website. Wenn Sie Assistant Zugriff auf Webdaten gewähren, vermeiden Sie das Risiko veralteter Inline-Inventardaten, die nur durch Veröffentlichen einer neuen Version der App aktualisiert werden können.

  • Inline-Inventare sind auf 1.000 Artikel beschränkt. Im Gegensatz dazu hat ein Webinventar keine Artikelbeschränkung und kann mit Ihren Anforderungen wachsen.

  • Ein Webinventar kann die Anwendungslogik vereinfachen, da die Auftragsausführung nur vorhersehbare Inhalts-URLs verarbeitet, die von Ihrer Website abgerufen wurden. Wenn dagegen kein Inventar konfiguriert ist, generiert Assistant Deeplinks für die Auftragsausführung, indem Intent-Parameter Variablen in einer URL-Vorlage zugeordnet werden. Die Auftragsausführung muss dann diese dynamisch generierte URL analysieren, um festzustellen, ob ein Nutzer eine unterstützte Entität in Ihrer App angefordert hat.

So funktionierts

Während einer App-Aktion erstellt Assistant über die integrierten Intents (BIIs), die Sie in shortcuts.xml definieren, einen Deeplink zu App-Inhalten. Assistant nutzt Natural Language Processing, um die relevanten Elemente in der Anfrage eines Nutzers zu identifizieren und in BII-Parameter zu extrahieren. Assistant generiert dann mit den Parametern einen Deeplink auf Basis Ihrer Konfiguration für die Auftragsausführung in shortcuts.xml..

Es gibt drei Methoden, Deeplinks für die Auftragsausführung zu generieren:

  • Parameterzuordnung: ordnet Intent-Parameter Platzhaltern in einer Vorlage für die Auftragsausführungs-URL zu.
  • Inline-Inventar: Gleicht Intent-Parameter einer Liste unterstützter entities-Werte ab, die in der App definiert sind.
  • Webinventar: Gleicht Intent-Parameter mit Inhalten im Google-Suchindex einer Website ab.

Ein Webinventar ist ein vom Entwickler definiertes Website-URL-Muster, z. B. https://www.exampleapp.com/restaurants/.*, das einen Entitätssatz von Entitäten darstellt, der von einer Anwendung unterstützt wird.

Wenn ein BII-Parameter für ein Webinventar konfiguriert ist, fragt Assistant die Website ab, um einen Entitätsabgleich mit der Nutzeranfrage durchzuführen. Assistant übergibt dann URL-Ergebnisse, die mit dem konfigurierten URL-Muster übereinstimmen, z. B. https://www.exampleapp.com/restaurants/three-dot-cafe, an die Auftragsausführung.

Abbildung 1: Beispiel für eine Assistant-Abfrage mit Webinventar zum Abrufen eines Restaurantentitätselements.

Unterstützte integrierte Intents

Webinventar wird für bestimmte Intent-Parameter von folgenden BIIs unterstützt:

  • [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]

Webinventar hinzufügen

Nachdem Sie eine unterstützte BII identifiziert haben, aktivieren Sie sie für Webinventar. Aktualisieren Sie dazu shortcuts.xml mit Details zu Ihrer Website. Die Datei shortcuts.xml ist eine Ressource in Ihrem Android-Projekt, in der Sie die BIIs definieren, die den Funktionen Ihrer App entsprechen. Außerdem legen Sie fest, wie jede BII Deeplinks für Ihre App generieren soll. Weitere Informationen zu shortcuts.xml findest du unter Shortcuts.xml.

Gehen Sie folgendermaßen vor, um Webinventar für eine unterstützte BII zu verwenden:

  1. Fügen Sie in der Datei shortcuts.xml für Ihre App ein <capability>-Tag mit einem android:name-Attribut hinzu, das auf den Namen einer BII gesetzt ist, die Sie mit Webinventar verarbeiten, z. B. actions.intent.ORDER_MENU_ITEM.

  2. Fügen Sie dem <capability>-Tag ein <intent>-Tag mit einem android:action-Attribut hinzu, das auf den Namen der Ansicht festgelegt ist, die durch diesen Intent aktiviert werden soll.

  3. Fügen Sie im selben <intent>-Tag ein <parameter>-Tag hinzu und legen Sie dessen android:name-Attribut auf den BII-Parameter fest, der der auf Ihren Webseiten beschriebenen Entität am ehesten entspricht. Wenn Sie beispielsweise Webinventar für ORDER_MENU_ITEM bereitstellen, sollten Sie Menüseiten mit menuItem.name verknüpfen.

  4. Fügen Sie dem neuen <parameter>-Tag ein <data>-Tag hinzu und legen Sie dessen android:pathPattern-Attribut auf das URL-Muster des Pfads fest, den Sie für Webinventar verwenden möchten.

Wenn Sie shortcuts.xml mit diesen Schritten konfigurieren, kann Assistant Webinhalte aus dem Google-Suchindex des URL-Musters abrufen, das Sie im Attribut android:pathPattern angegeben haben. Assistant stellt dann anhand der Ergebnisse, die dem von Ihnen definierten URL-Pfadmuster entsprechen, einen URL-Wert für die Auftragsausführung bereit. Ihre App leitet den Nutzer dann anhand der von Assistant bereitgestellten URL-Daten zu einer bestimmten Stelle in der App weiter.

Ihre Website enthält beispielsweise Produkteinträge, deren URL-Pfad mit https://www.examplecafe.com/items/ beginnt. Sie verwenden den pathPattern-Wert https://www.examplecafe.com/items/.* und Assistant verwendet dieses URL-Muster in einer Websuche, um eine Ausführungs-URL wie https://www.examplecafe.com/items/item123 zu finden.

Wenn Assistant eine übereinstimmende URL für Webinventar findet, wird die URL im Feld <data> des Auftragsausführungs-Intents angegeben, so als wäre es ein Deeplink. Verwenden Sie die Methode getData() des Intents, um die URL als Uri-Objekt abzurufen. Die App-Aktivität, die den Intent empfängt, ist für die Interpretation der URL und die Aktivierung der entsprechenden App-Benutzeroberfläche verantwortlich.

Beispiel für shortcuts.xml

Im folgenden Beispiel wird ein ORDER_MENU_ITEM-BII definiert, das Webinventar bereitstellt, um URL-Ergebnisse für Anfragen zurückzugeben, die den BII-Parameter menuItem.name enthalten:

<?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>

Im Beispiel oben wird für menuItem.name ein pathPattern angegeben. Dadurch wird Assistant angewiesen, nur URLs zurückzugeben, die dem folgenden URL-Muster entsprechen: https://www.examplecafe.com/items/.*

Weitere shortcuts.xml-Beispiele für BII, die Webinventar unterstützen, finden Sie in der Referenzdokumentation.

Fallback bei fehlenden Ergebnissen handhaben

Wenn Ergebnisse des Webinventars nicht an die Auftragsausführung zurückgegeben werden, sollte Ihre App eine Fallback-Logik implementieren, um die Aktion mit der bestmöglichen Nutzererfahrung auszuführen. Mögliche Situationen, in denen Ergebnisse fehlen:

  • Fehlender Intent-Parameter: Der Nutzer hat einen erwarteten Parameter in seiner Abfrage ausgelassen oder Assistant hat den Parameter in der Nutzeranfrage nicht verstanden.
  • Fehlendes URL-Ergebnis: Assistant konnte auf Ihrer Website keine Entität finden, die mit der Nutzeranfrage übereinstimmt.

Um fehlende Parameterwerte zu verarbeiten, können Sie mehrere <intent>-Elemente für eine Funktion definieren. Wenn Assistant den ersten Intent nicht erfüllen kann, fällt er auf den nächsten zurück und so weiter.

Für Fallback-Intents sollten keine Parameter erforderlich sein. Stattdessen sollten sie die Funktion durch einen allgemeineren Deeplink ergänzen, z. B. um Suchergebnisse für die Nutzeranfrage anzuzeigen.

Im folgenden Beispiel-shortcuts.xml definiert ein ORDER_MENU_ITEM-BII zwei Auftragsausführungen: Die erste erwartet eine URL aus dem menuItem.name-Parameter. Die zweite erfordert keine Parameter und leitet den Nutzer auf eine Seite mit allen Menüpunkten weiter.

<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>

Wenn keine Webinventar-URL zurückgegeben wird, kann der Inhalt der Nutzerabfrage dennoch in Fallback-Intents verwendet werden, z. B. zum Anzeigen von Suchergebnissen.

Im folgenden Beispiel-shortcuts.xml sind zwei Intent-Elemente definiert:

  1. Für die erste ist ein Deeplink für das Webinventar aus dem Parameter menuItem.name erforderlich.
  2. Wenn kein Deeplink zurückgegeben wird, zeigt der zweite Intent Suchergebnisse unter Verwendung der Nutzerabfrage von menuItem.name an, sofern vorhanden.
<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>

In-App-Suche mit Webinventar hinzufügen

Wenn Sie Webinventar mit einer Implementierung der BII actions.intent.GET\_THING kombinieren, können Nutzer in Ihrer App nach Webinhalten suchen.

Diese BII sucht mit der standardmäßigen In-App-Suchfunktion in einer App nach Inhalten oder Entitäten. Dies ermöglicht Abfragen wie „Hey Google, zeig mir Wasserfall-Wanderungen in SampleApp“. Wenn Sie Webinventar für den thing.name-Funktionsparameter konfigurieren, der von GET_THING BII übergeben wird, werden übereinstimmende Entitätsergebnisse von Ihrer Website zur Auftragsausführung übergeben.

shortcuts.xml-Beispiele für Webinventar finden Sie in der GET\_THING BII-Referenz.

Webinventar testen

Wenn Sie ein Webinventar für eine BII-Auftragsausführung definieren, generiert Assistant einen Deeplinks aus Webergebnissen, die dem Muster urlTemplate entsprechen, das Sie für den angegebenen BII-Parameter definiert haben. Wenn kein Ergebnis des Webinventars gefunden werden kann, generiert Assistant eine URL, die dem urlTemplate-Muster Ihres Fallback-Intents entspricht. Sie können die Implementierung Ihres Webinventars testen. Prüfen Sie dazu, ob die von Assistant bereitgestellten Links URLs sind, die den urlTemplate-Mustern Ihres Webinventars entsprechen.

Im folgenden Beispiel für ORDER_MENU_ITEM BII generiert Assistant Links zur Auftragsausführung für Webinventar, die dem im menuItem.name-Parameter angegebenen Muster urlFilter entsprechen, z. B. https://www.examplecafe.com/items/nuggets. Der zweite Intent übernimmt den Wert menuItem.name und führt eine Suche durch, wenn der erste Intent nicht mit dem URL-Muster übereinstimmt.

<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>

Mit dem App Actions-Testtool können Sie Webinventar auf einem physischen oder virtuellen Gerät testen.

So verwenden Sie das Testtool:

  1. Verbinden Sie das Testgerät mit der ausgeführten App.
  2. Rufen Sie in Android Studio Tools > App Actions > App Actions Test Tool auf.
  3. Klicken Sie auf Vorschau erstellen.
  4. Führen Sie Ihre App in Android Studio auf Ihrem Testgerät aus.
  5. Verwenden Sie die Assistant App auf Ihrem Testgerät, um die App-Aktion zu testen. Sie können zum Beispiel sagen: „Hey Google, bestell Nuggets bei ExampleCafe“.
  6. Beobachte das Verhalten deiner App oder verwende den Android Studio-Debugger, um das gewünschte Aktionsergebnis zu prüfen.