Niestandardowi odbiorcy o podobnych zamiarach

Każda aplikacja jest inna i nie wszystkie funkcje aplikacji odpowiadają dostępnej intencji wbudowanej działań w aplikacji. W sytuacjach, gdy nie ma wskaźnika BII dla funkcji aplikacji, możesz użyć intencji niestandardowej, aby rozszerzyć aplikację za pomocą działań w aplikacji.

Podobnie jak intencje niestandardowe, intencje niestandardowe są zgodne ze schematem shortcuts.xml i działają jako punkty połączenia między Asystentem a zdefiniowanymi przez Ciebie realiami. Zamiary niestandardowe mają też parametry intencji, które możesz zmapować na parametry w odpowiedniej realizacji.

W przeciwieństwie do BII intencje niestandardowe wymagają wzorców zapytań w celu opisania przykładowych zapytań, które może wypowiedzieć użytkownik. To podejście różni się od intencji wbudowanych, które modelują typowe sposoby wyrażania tych intencji przez użytkowników.

Ograniczenia

Niestandardowe intencje mają te ograniczenia:

  • Nazwa intencji niestandardowej nie może zaczynać się od actions.intent.
  • Nazwa intencji niestandardowej musi być unikalna wśród nazw niestandardowych intencji w Twojej aplikacji.
  • Do wyodrębniania parametrów przez Asystenta Google dostępne są tylko niektóre typy danych (zobacz Obsługiwane typy).
  • Intencje niestandardowe muszą zawierać przykłady użytecznych wzorców zapytań (patrz Wzorce zapytań).
  • Każde zapytanie obsługuje maksymalnie 2 parametry tekstowe. Ten limit nie dotyczy innych typów danych.
  • Intencje niestandardowe obsługują tylko język en-US. Ustawienia języka na urządzeniu i w Asystencie też muszą być takie same.

Obsługiwane typy

Intencje niestandardowe obsługują te typy schema.org na potrzeby wyodrębniania parametrów:

  • https://schema.org/Text
  • https://schema.org/Date
  • https://schema.org/Time
  • https://schema.org/Number

Definiowanie działań w aplikacji z intencjami niestandardowymi

Podobnie jak w przypadku innych akcji w aplikacji, które korzystają z BII, intencję niestandardową definiujesz w elemencie <capability> w shortcuts.xml.

Uprawnienia są zdefiniowane w elemencie głównym <shortcuts>. Podczas definiowania elementu <shortcuts> podaj przestrzenie nazw atrybutów, do których chcesz uzyskać dostęp, tak jak w tym przykładzie:

<shortcuts
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
  ...
</shortcuts>

Podaj nazwę intencji niestandardowej w atrybucie android:name, a odwołaj się do pliku zasobów wzorców zapytań w atrybucie queryPatterns.

<shortcuts
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
  <capability
      android:name="custom.actions.intent.EXAMPLE_INTENT"
      app:queryPatterns="@array/ExampleQueries">
    <intent ...>
      <url-template
          android:value="http://custom.com{?number_of_items,item_name}" />
      <parameter
          android:name="number_of_items"
          android:key="number_of_items"
          android:mimeType="https://schema.org/Number" />
      <parameter
          android:name="item_name"
          android:key="item_name"
          android:mimeType="https://schema.org/Text" />
    </intent>
  </capability>
  ...
</shortcuts>

Nazwy intencji niestandardowych nie mogą się zaczynać od actions.intent, bo ta przestrzeń nazw jest zarezerwowana na potrzeby BII. Zamiast tego podczas nadawania nazw niestandardowych intencjom użyj prefiksu custom.actions.intent, aby odróżnić je od intencji BII i Androida, które działają inaczej.

Dla każdego parametru podaj obsługiwany typ schema.org, który najlepiej opisuje jego znaczenie. Możesz na przykład użyć właściwości https://schema.org/Date, aby opisać spodziewaną datę otrzymania:

...
<intent>
  <url-template android:value="https://example.com/appt{?apptType,date,time}" />
  <parameter
      android:name="date"
      android:key="date"
      android:mimeType="https://schema.org/Date" />
  ...
</intent>
...

Zdefiniuj skróty do niestandardowych intencji w shortcuts.xml przy użyciu tego samego formatu co skróty do BII.

Ten kod opisuje akcję w aplikacji, która używa wskazanych wzorców zapytań do aktywowania intencji niestandardowej SCHEDULE_APPOINTMENT i używa zdefiniowanego zestawu wartości – DRIVERS_LICENSE i VEHICLE_REGISTRATION – dla parametru apptType.

<shortcuts
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
  <capability
      android:name="custom.actions.intent.SCHEDULE_APPOINTMENT"
      app:queryPatterns="@array/scheduleApptQueries">
    <intent ...>
     <url-template android:value="https://example.com/appt{?apptType,date,time}" />
       <parameter
          android:name="date"
          android:key="date"
          android:mimeType="https://schema.org/Date" />
       <parameter
          android:name="time"
          android:key="time"
          android:mimeType="https://schema.org/Time" />
       <!-- The following parameter has no type because the shortcuts are bound to it -->
       <parameter android:name="apptType" android:key="apptType" />
    </intent>
  </capability>

  <shortcut
      android:shortcutShortLabel="Driver's License"
      android:shortcutId="DRIVERS_LICENSE">
    <capability-binding android:key="custom.actions.intent.SCHEDULE_APPOINTMENT">
      <parameter-binding
          android:key="apptType"
          android:value="@string/driversLicense" />
    </capability-binding>
  </shortcut>

  <shortcut
      android:shortcutsShortLabel="Vehicle Registration"
      android:shortcutId="VEHICLE_REGISTRATION">
    <capability-binding android:key="custom.actions.intent.SCHEDULE_APPOINTMENT">
      <parameter-binding
          android:key="apptType"
          android:value="@string/vehicleRegistration" />
    </capability-binding>
  </shortcut>
</shortcuts>

Niestandardowe parametry intencji możesz skonfigurować za pomocą wbudowanych zasobów reklamowych, za pomocą których możesz kierować wyodrębnianie encji do zbioru obsługiwanych elementów określonego w shortcuts.xml.

Wzorce zapytań

Każda niestandardowa intencja, której używasz, wymaga zestawu zapytań oczekiwanego od użytkownika w związku z tą intencją. To podejście różni się od BII, gdzie zapytania są już modelowane pod kątem typowych sposobów wyrażania zadań przez użytkowników lub szukanych informacji.

W pliku zasobów Androida (zwykle /res/values/strings.xml) określ wzorce zapytań jako elementy tablicy ciągów znaków. Po wywołaniu akcji w aplikacji Asystent Google sprawdza, czy zapytanie użytkownika jest zgodne z Twoimi wzorcami zapytań, aby dopasować zamiar użytkownika do realizacji. Każdy podany przez Ciebie wzorzec zapytania reprezentuje wyrażenie, które uważasz za prawidłowe w przypadku odpowiadającej mu niestandardowej intencji.

Podając wzorce zapytań dla intencji niestandardowych, pamiętaj, że każdy wzorzec będzie wywoływał jawne wywołanie, np. „otwórz przykładową aplikację” lub „uruchom przykładową aplikację i”. Weźmy na przykład takie zapytania użytkowników:

  • „OK Google, otwórz Przykładowa gra i zacznij robić ciasto”.
  • „OK Google, otwórz Przykładowa gra i zacznij robić szarlotkę”.
  • „OK Google, uruchom Przykładowa gra i przygotuj 5 ciast”.
  • „OK Google, użyj przykładowej aplikacji do przygotowania ciasta 5 razy”.

Aby dopasować zapytania użytkowników, podaj wzorce zapytań zawierające część zapytania po wyrażeniu wywołania. W przypadku informacji, które chcesz wyodrębnić z zapytania (np. tekstu lub liczby podanej przez użytkownika), musisz przypisać wartości do odpowiedniego parametru intencji z zmiennymi we wzorcu zapytania.

Aby odwołać się do parametru we wzorcu zapytania, dodaj $ do jego nazwy. Aby na przykład utworzyć zmienną dla parametru takiego jak <parameter name="date1" ... (w actions.xml) lub <parameter android:name="date1" ... (w shortcuts.xml), użyj parametru $date1.

Poniższy kod opisuje wzorce zapytań pasujące do poprzednich zapytań użytkowników i wyodrębnianie wartości nazw elementów oraz liczby elementów do utworzenia:

<resources>
  <string-array name="ExampleQueries">
    <item>start making a $text1</item>
    <item>start making an $text1</item>
    <item>craft $number1 $text1 items</item>
    <item>produce $text1 $number1 times</item>
  </string-array>
</resources>

Wzorce zapytań obsługują warunkowe. Przykład: set (an)? appointment $date $time. W tym przypadku prawidłowe zapytania to zarówno „ustaw termin na dziś w południe”, jak i „ustaw termin na dziś na południe”.