Ogni app è diversa e non tutte le funzionalità dell'app corrispondono a una disponibilità Intent integrato Azioni app (BII). Nei casi in cui non siano di un intent integrato per la funzionalità dell'app, puoi usare un modello per estendere la tua app con Azioni app.
Come gli intent integrati, gli intent personalizzati seguono
shortcuts.xml
e agiscono come
punti di connessione tra l'assistente e i completamenti che hai definito. Personalizzati
gli intent hanno anche parametri di intent, che puoi mappare ai parametri nel tuo
fulfillment corrispondente.
A differenza degli intent integrati, gli intent personalizzati richiedono pattern di query per descrivere query di esempio che un utente potrebbe pronunciare. Questo approccio differisce da intent integrati, che sono i modelli dei modi più comuni in cui gli utenti esprimono tale intenzione.
Limitazioni
Gli annunci personalizzati per intenzione 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 di un intent personalizzato per la tua app.
- Solo alcuni tipi di dati sono disponibili per l'estrazione dei parametri da parte di Google Assistente (vedi Tipi supportati).
- Gli intent personalizzati devono contenere esempi di pattern di query utilizzabili (vedi Pattern di query).
- Ogni query supporta un massimo di due parametri di testo. Questo limite non ad altri tipi di dati.
- Gli intent personalizzati per intent supportano solo le impostazioni internazionali en-US. Inoltre, il dispositivo e l'assistente le impostazioni della lingua devono corrispondere.
Tipi supportati
Gli intent personalizzati per intent supportano i seguenti tipi di schema.org per estrazione di parametri:
https://schema.org/Text
https://schema.org/Date
https://schema.org/Time
https://schema.org/Number
Definire le Azioni app con intent personalizzati
Come per altre Azioni app che utilizzano gli intent integrati, definisci una
nell'elemento <capability>
di
shortcuts.xml
Le funzionalità sono definite nell'elemento principale <shortcuts>
. Quando
definisci l'elemento <shortcuts>
, includi gli spazi dei nomi
gli 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
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 personalizzati per intent non possono iniziare con
actions.intent
, perché questo spazio dei nomi è riservato per gli intent integrati. Invece, quando
assegnare un nome agli intent personalizzati, utilizza il prefisso
custom.actions.intent
per distinguere i tuoi intent personalizzati per intenzione da entrambi
intent integrati e intent Android, che
funzionano in modo diverso.
Per ogni parametro, indica il tipo di 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
come scorciatoie per gli intent integrati.
Il seguente codice descrive un'Azione app che utilizza la query di riferimento
pattern per attivare l'intent personalizzato SCHEDULE_APPOINTMENT
e utilizza un valore definito
insieme di valori, DRIVERS_LICENSE
e VEHICLE_REGISTRATION
, per 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 guidare l'estrazione delle entità verso un insieme di entità supportate
specificato in shortcuts.xml
.
Pattern di query
Ogni personalizzato per intenzione che utilizzi richiede un insieme di query che ci si aspetta dall'utente per questo intento. Questo approccio è diverso dagli intent integrati, in cui le query vengono già modellato per i modi più comuni in cui gli utenti esprimono le attività che stanno cercando di fare le informazioni che cercano.
In un file di risorse Android (di solito /res/values/strings.xml
), specifica la query
come elementi in un array di stringhe. Quando
Viene richiamata l'Azione app e l'Assistente Google confronta la query dell'utente con
modelli di query nell'ambito della corrispondenza con l'intenzione dell'utente per il fulfillment. Ogni query
che fornisci rappresenta una frase che consideri valida per
personalizzato per intenzione corrispondente.
Quando fornisci pattern di query per intent personalizzati, tieni presente che ogni pattern seguirà una chiamata esplicita come "apri l'app di esempio e" o "avvia App Esempio e". Considera ad esempio le seguenti query utente:
- "Hey Google, apri l'app Gioco di esempio e inizia a preparare una torta."
- "Hey Google, apri l'app Gioco di esempio e inizia a preparare una torta di mele."
- "Hey Google, avvia l'app di gioco Esempio e crea cinque dolciumi."
- "Hey Google, usa l'app di gioco Esempio per produrre torte 5 volte."
Per trovare corrispondenze con le query degli utenti, fornisci pattern di query che contengano la parte del query dopo la frase di chiamata. Per le informazioni che vuoi estrarre query (come testo o un numero fornito dall'utente), assegni valori alla il parametro di intent corrispondente con segnaposto nel modello di query.
Per fare riferimento a un parametro in un pattern di query, aggiungi $
al nome del
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
), utilizzi $date1
.
Il seguente codice descrive i pattern di query che corrispondono all'utente precedente query ed estrarre 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, "fissa appuntamento oggi a mezzogiorno" e
"fissa un appuntamento oggi a mezzogiorno" sono query valide.