Segmenti di pubblico personalizzati per intenzione

Ogni app è diversa e non tutte le funzionalità corrispondono a un intent integrato per le azioni app (BII). Nei casi in cui non è presente un BII per la funzionalità dell'app, puoi utilizzare un intent personalizzato per estendere l'app con Azioni app.

Come le BII, gli intent personalizzati seguono lo schema shortcuts.xml e fungono da punti di connessione tra l'assistente e i fulfillment definiti. Gli intent personalizzati hanno anche parametri di intent, che possono essere mappati ai parametri nel fulfillment corrispondente.

A differenza delle BII, gli intent personalizzati richiedono pattern di query per descrivere query di esempio che un utente potrebbe pronunciare. Questo approccio differisce dagli intent integrati, che modellano i modi comuni in cui gli utenti esprimono quell'intenzione.

Limitazioni

Gli intent personalizzati presentano le seguenti limitazioni:

  • Il nome di un intent personalizzato non può iniziare con actions.intent.
  • Il nome di un intent personalizzato deve essere univoco tra i nomi personalizzati per intent della tua app.
  • Solo alcuni tipi di dati sono disponibili per l'estrazione dei parametri da parte dell'Assistente Google (consulta la sezione Tipi supportati).
  • Gli intent personalizzati devono contenere esempi di pattern di query utilizzabili (consulta la sezione Pattern di query).
  • Ogni query supporta un massimo di due parametri di testo. Questo limite non si applica ad altri tipi di dati.
  • Gli intent personalizzati supportano solo le impostazioni internazionali en-US. Inoltre, le impostazioni della lingua del dispositivo e dell'assistente devono corrispondere.

Tipi supportati

Gli intent personalizzati supportano i seguenti tipi di schema.org per l'estrazione dei parametri:

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

Definisci le azioni app con intent personalizzati

Come per altre azioni app che utilizzano gli oggetti BII, devi definire un intent personalizzato nell'elemento <capability> in shortcuts.xml.

Le funzionalità sono definite nell'elemento principale <shortcuts>. Quando definisci l'elemento <shortcuts>, includi gli spazi dei nomi degli attributi a cui vuoi accedere, come mostrato nell'esempio seguente:

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

Fornisci il nome dell'intent personalizzato nell'attributo android:name e fai riferimento a un file di risorse pattern di query nell'attributo 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>

I nomi di intent personalizzati non possono iniziare con actions.intent, perché questo spazio dei nomi è riservato ai BII. Quando assegni un nome agli intent personalizzati, utilizza il prefisso custom.actions.intent per distinguere questi intent personalizzati dagli intent personalizzati e dagli intent Android, che funzionano in modo diverso.

Per ogni parametro, fornisci il tipo schema.org supportato che descrive meglio il significato del parametro. Ad esempio, puoi utilizzare https://schema.org/Date per descrivere una data che prevedi di ricevere:

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

Definisci le scorciatoie per gli intent personalizzati in shortcuts.xml utilizzando lo stesso formato delle scorciatoie per le BII.

Il codice seguente descrive un'azione app che utilizza i pattern di query di riferimento per attivare l'intent personalizzato SCHEDULE_APPOINTMENT e utilizza un insieme definito di valori, DRIVERS_LICENSE e VEHICLE_REGISTRATION, per il parametro 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>

Puoi configurare parametri personalizzati per intenzione con l'inventario in linea, che puoi utilizzare per indirizzare l'estrazione delle entità verso un insieme di entità supportate specificate in shortcuts.xml.

Pattern di query

Ogni intent personalizzato che utilizzi richiede un insieme di query previste dall'utente per tale intent. Questo approccio è diverso dagli BII, in cui le query sono già modellate per i modi comuni in cui gli utenti esprimono le attività che stanno cercando di fare o le informazioni che cercano.

In un file di risorse Android (di solito /res/values/strings.xml), specifica i pattern di query come elementi in un array di stringhe. Quando viene richiamata l'Azione app, l'Assistente Google controlla la query dell'utente in base ai tuoi pattern di query per rilevare l'intenzione dell'utente per il completamento. Ogni pattern di query che fornisci rappresenta una frase che consideri valida per l'intent personalizzato corrispondente.

Quando fornisci pattern di query per intent personalizzati, prevedi che ogni pattern segua una chiamata esplicita, come "apri l'app di esempio" o "avvia l'app di esempio e". Ad esempio, considera le seguenti query degli utenti:

  • "Hey Google, apri l'app di gioco di esempio e inizia a preparare una torta."
  • "Hey Google, apri l'app di gioco di esempio e inizia a preparare una torta di mele."
  • "Hey Google, avvia l'app di gioco di esempio e crea 5 torte."
  • "Hey Google, usa l'app di gioco di esempio per produrre la torta 5 volte."

Per trovare una corrispondenza con le query degli utenti, fornisci pattern di query che contengono la parte della query dopo la frase di chiamata. Per le informazioni che vuoi estrarre dalla query (come il testo o un numero fornito dall'utente), puoi assegnare valori al parametro di intent corrispondente con segnaposto nel pattern di query.

Per fare riferimento a un parametro in un pattern di query, aggiungi $ al nome del parametro nel pattern. Ad esempio, per creare un valore segnaposto per un parametro come <parameter name="date1" ... (in actions.xml) o <parameter android:name="date1" ... (in shortcuts.xml), utilizza $date1.

Il seguente codice descrive i pattern di query che corrispondono alle query precedenti degli utenti ed estraggono i valori per i nomi degli elementi e il numero di elementi da creare:

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

I pattern di query supportano le condizionali. Ad esempio, set (an)? appointment $date $time. In questo caso, sia "Fissa appuntamento oggi a mezzogiorno" sia "Fissa un appuntamento oggi a mezzogiorno" sono query valide.