Il tuo dispositivo potrebbe avere funzionalità speciali non coperte dall'attuale gruppo di trait -- come, ad esempio, "lampeggia la luce" per un dispositivo in grado di far lampeggiare le luci. Tu puoi definire azioni personalizzate per il tuo dispositivo che specificano i comandi inviati a il tuo dispositivo per attivare abilità speciali.
Per definire un'azione personalizzata dei dispositivi, devi disporre di quanto segue:
- Un pattern per trovare una corrispondenza con la query dell'utente
- Un'azione personalizzata del dispositivo da associare a una query con corrispondenza
- Testo vocale all'utente se il dispositivo supporta l'azione
- Un nome del comando che viene rinviato al tuo dispositivo, insieme agli eventuali parametri
Puoi creare l'azione personalizzata del dispositivo inserendo queste informazioni in un pacchetto di azioni. I pacchetti di azioni definiscono il formato delle risposte dell'assistente. A differenza del l'SDK Actions, le azioni personalizzate sui dispositivi vengono eseguite localmente. non specifichi un dell'endpoint per elaborare le richieste e fornire le risposte. Le azioni personalizzate dei dispositivi sono e non di natura conversazionale.
Creare un pacchetto di azioni
Utilizzando il seguente esempio come esempio, crea un file (ad esempio actions.json
) che
definisce un comando di test: un LED lampeggiante.
Copia il file dal codice campione che hai
scaricati in un passaggio precedente:
cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library/
cp ~/assistant-sdk-python/google-assistant-sdk/actions.json .
{
"manifest": {
"displayName": "Blinky light",
"invocationName": "Blinky light",
"category": "PRODUCTIVITY"
},
"actions": [
{
"name": "com.example.actions.BlinkLight",
"availability": {
"deviceClasses": [
{
"assistantSdkDevice": {}
}
]
},
"intent": {
"name": "com.example.intents.BlinkLight",
"parameters": [
{
"name": "number",
"type": "SchemaOrg_Number"
},
{
"name": "speed",
"type": "Speed"
}
],
"trigger": {
"queryPatterns": [
"blink ($Speed:speed)? $SchemaOrg_Number:number times",
"blink $SchemaOrg_Number:number times ($Speed:speed)?"
]
}
},
"fulfillment": {
"staticFulfillment": {
"templatedResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Blinking $number times"
}
},
{
"deviceExecution": {
"command": "com.example.commands.BlinkLight",
"params": {
"speed": "$speed",
"number": "$number"
}
}
}
]
}
}
}
}
],
"types": [
{
"name": "$Speed",
"entities": [
{
"key": "SLOWLY",
"synonyms": [
"slowly",
"slow"
]
},
{
"key": "NORMALLY",
"synonyms": [
"normally",
"regular"
]
},
{
"key": "QUICKLY",
"synonyms": [
"quickly",
"fast",
"quick"
]
}
]
}
]
}
L'esempio precedente utilizza le seguenti informazioni per definire il dispositivo personalizzato azione:
- Un pattern per creare una corrispondenza con la query dell'utente (lampeggia N volte)
- L'azione personalizzata del dispositivo da associare a una query con corrispondenza (
com.example.actions.BlinkLight
) a fini organizzativi - Testo vocale all'utente se il dispositivo supporta l'azione (Lampeggia N volte)
- Un nome comando (
com.example.commands.BlinkLight
) che viene restituito a il dispositivo, insieme a eventuali parametri (un numero ed eventualmente una descrizione della velocità)
Per definire il pattern di query, tieni presente quanto segue:
- Puoi utilizzare i tipi definiti da schema.org nel pattern della query.
- L'array
types [...]
definisce l'elenco di tipi personalizzati (ad esempio,$Speed
). - Nel pattern di query puoi utilizzare tipi personalizzati. L'utente può pronunciare uno qualsiasi dei sinonimi nel tuo tipo personalizzato per corrispondere al pattern di query.
- Quando un sinonimo corrisponde, viene restituito il tipo di istanza (
speed
) restituisce la chiave normalizzata (SLOWLY
). Ci possono essere più entità in Ad esempio, ci sono luci diverse che supportano velocità diverse lampeggiare. - Alcune parti del pattern della sintesi vocale della richiesta possono essere facoltative. Ad esempio, utilizza
($Speed:speed)?
nel pattern di query per rendere questa parte facoltativa. $type.raw
(ad esempio$speed.raw
) nel la sintesi vocale della risposta viene sostituita dalle parole effettivamente pronunciate dall'utente.
Per una descrizione di molti di questi campi, consulta ActionPackage documentazione.
Deployment del pacchetto di azioni
Dopo aver creato l'azione personalizzata dei dispositivi in un pacchetto Azioni, puoi rendere Pacchetto di azioni accessibile all'assistente.
Puoi eseguire i passaggi descritti in questa sezione sul tuo dispositivo, ma potrebbe essere più semplice per eseguirle sul tuo sistema di sviluppo. I comandi seguenti non richiedono dell'ambiente virtuale da eseguire.
Scarica lo strumento a riga di comando
gactions
.Rimuovi eventuali credenziali esistenti dalla stessa directory di
gactions
lo strumento a riga di comando gcloud.rm creds.data
Salva il tuo pacchetto Action su Google utilizzando l'interfaccia a riga di comando
gactions
. Sostituisciproject_id
con il tuo progetto Actions Console ID../gactions update --action_package actions.json --project project_id
La prima volta che esegui questo comando ti verrà fornito un URL e ti verrà chiesto di accedi. Copia l'URL e incollalo in un browser (questa operazione può essere eseguita su qualsiasi sistema). Nella pagina ti verrà chiesto di accedere al tuo Account Google. Firma all'Account Google che ha creato il progetto in una passaggio.
Dopo aver approvato la richiesta di autorizzazione dall'API, verrà visualizzato un codice nel browser, ad esempio "4/XXXX". Copia e incolla questo codice terminale:
Enter the authorization code:
Se l'autorizzazione è riuscita, vedrai una risposta simile alla le seguenti:
Your app for the Assistant for project my-devices-project was successfully updated with your actions.
Esegui il deployment del tuo pacchetto Azioni in modalità di test utilizzando l'interfaccia a riga di comando
gactions
. Devi aver salvato il tuo pacchetto di azioni su Google almeno una volta in passato che esegue questo comando. La modalità di test attiva il pacchetto Action sul tuo solo account utente../gactions test --action_package actions.json --project project_id
Al momento, non puoi testare il progetto utilizzando il simulatore di Actions.
Per aggiornare il pacchetto Action, utilizza il comando
gactions update
.(Facoltativo) Puoi creare pacchetti di azioni localizzati per supportare molte lingue e impostazioni internazionali diverse contemporaneamente in un singolo progetto.
Modifica l'esempio
Svolgi la procedura descritta in questa sezione sul dispositivo.
nano hotword.py
Aggiungi un gestore per l'azione personalizzata. Se vuoi, puoi usare il gestore di seguito per utilizzare il pacchetto di azioni di esempio riportato sopra.
import time # Add this to the imports near the top of the file ... if event.type == EventType.ON_DEVICE_ACTION: for command, params in event.actions: print('Do command', command, 'with params', str(params)) # Add the following lines after the existing line above: if command == "com.example.commands.BlinkLight": number = int( params['number'] ) for i in range(int(number)): print('Device is blinking.') # GPIO.output(25, 1) time.sleep(1) # GPIO.output(25, 0) time.sleep(1)
Esegui l'esempio
Esegui il codice sorgente modificato.
python hotword.py --device-model-id my-model
Prova una query. Per l'esempio precedente, prova quanto segue:
Hey Google, lampeggi 5 volte.
Tieni presente che la query deve corrispondere al pattern della query nel pacchetto di azioni.