Il est possible que votre appareil dispose de fonctionnalités spéciales qui ne sont pas couvertes par l'ensemble actuel de caractéristiques -- comme "faire clignoter mon éclairage" pour un appareil capable de faire clignoter ses lumières. Toi Vous pouvez définir des actions personnalisées pour votre appareil afin de spécifier les commandes envoyées à votre appareil pour déclencher des capacités spéciales.
Pour définir une action personnalisée sur l'appareil, vous avez besoin des éléments suivants:
- Un format à mettre en correspondance avec la requête de l'utilisateur
- Une action personnalisée sur l'appareil à associer à une requête avec correspondance
- Texte énoncé à l'utilisateur si l'appareil est compatible avec l'action
- Nom de la commande renvoyée à votre appareil, avec tous les paramètres
Pour créer l'action personnalisée sur l'appareil, vous devez placer ces informations dans un package d'action. Les packages d'actions définissent le format des réponses de l'Assistant. Contrairement au SDK Actions, les actions personnalisées sur les appareils sont exécutées localement. vous ne spécifiez pas pour traiter les requêtes et fournir des réponses. Les actions personnalisées sur l'appareil sont non conversationnelle par nature.
Créer un package d'actions
À l'aide de l'exemple suivant, créez un fichier (tel que actions.json
) qui :
définit une commande de test: clignotement d'un voyant LED.
Copiez-le à partir de l'exemple de code que vous
téléchargée lors d'une étape précédente:
cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc/
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'exemple précédent utilise les informations suivantes pour définir l'appareil personnalisé action:
- Un schéma à mettre en correspondance avec la requête de l'utilisateur (clignotement N fois)
- Action personnalisée sur l'appareil à associer à une requête avec correspondance (
com.example.actions.BlinkLight
) à des fins organisationnelles - Texte énoncé à l'utilisateur si l'appareil est compatible avec l'action (N clignotements)
- Un nom de commande (
com.example.commands.BlinkLight
) renvoyé à l'appareil, ainsi que tous les paramètres (un nombre et éventuellement une description de la vitesse)
Pour définir le schéma de requête, tenez compte des points suivants:
- Vous pouvez utiliser des types définis par schema.org. dans le schéma de requête.
- Le tableau
types [...]
définit la liste des types personnalisés (par exemple,$Speed
). - Vous pouvez utiliser des types personnalisés dans le schéma de requête. L'utilisateur peut énoncer n'importe quelle des synonymes dans votre type personnalisé afin qu'ils correspondent au schéma de requête.
- Lorsqu'un synonyme correspond, l'instance de type (
speed
) renvoyer la clé normalisée (SLOWLY
). Il peut y avoir plusieurs entités dans C'est le cas, par exemple, parce que différents voyants sont compatibles avec différentes vitesses de clignoter. - Certaines parties du modèle de synthèse vocale de la requête peuvent être facultatives. Par exemple, utilisez
($Speed:speed)?
dans le schéma de requête pour rendre cette partie facultative. $type.raw
(par exemple,$speed.raw
) dans La synthèse vocale de réponse est remplacée par le ou les mots réellement prononcés par l'utilisateur.
Pour obtenir une description de la plupart de ces champs, consultez la ActionPackage dans la documentation Google Cloud.
Déployer le package Action
Après avoir créé votre action personnalisée sur l'appareil dans un package Action, vous pouvez définir le paramètre Package d'actions accessible à l'Assistant.
Vous pouvez effectuer les étapes de cette section sur votre appareil, mais il peut être plus simple pour les exécuter sur votre système de développement. Les commandes suivantes ne nécessitent pas environnement virtuel à exécuter.
Téléchargez l'outil de ligne de commande
gactions
.Supprimez tous les identifiants existants du même répertoire que
gactions
. .rm creds.data
Enregistrez votre package d'action sur Google à l'aide de la CLI
gactions
. Remplacezproject_id
par votre projet Actions Console. ID :./gactions update --action_package actions.json --project project_id
La première fois que vous exécutez cette commande, une URL vous est fournie et vous êtes invité à connectez-vous. Copiez l'URL et collez-la dans un navigateur (vous pouvez le faire sur n'importe quel système). Vous êtes alors invité à vous connecter à votre compte Google. Signer au compte Google qui a créé le projet lors d'une étape.
Une fois que vous aurez approuvé la demande d'autorisation de l'API, un code apparaîtra dans votre navigateur ("4/XXXX", par exemple). Copiez et collez ce code dans la terminal:
Enter the authorization code:
Si l'autorisation aboutit, une réponse semblable à la suivante s'affiche : les éléments suivants:
Your app for the Assistant for project my-devices-project was successfully updated with your actions.
Déployez votre package Action en mode test à l'aide de la CLI
gactions
. Vous devez avoir enregistré votre package d'actions sur Google au moins une fois auparavant en exécutant cette commande. Le mode test active le package Action sur votre compte utilisateur uniquement../gactions test --action_package actions.json --project project_id
Actuellement, vous ne pouvez pas tester le projet à l'aide du simulateur Actions.
Pour mettre à jour le package Action, utilisez la commande
gactions update
.(Facultatif) Vous pouvez créer des packages pour l'action localisés. pour prendre en charge un grand nombre de langues et de paramètres régionaux différents. en même temps dans un seul projet.
Modifier l'exemple
Suivez la procédure décrite dans cette section sur l'appareil.
nano pushtotalk.py
Ajoutez un gestionnaire pour votre action personnalisée. Notez que le gestionnaire ci-dessous a déjà été ajouté. à l'exemple de code de l'exemple de package d'actions ci-dessus.
... device_handler = device_helpers.DeviceRequestHandler(device_id) @device_handler.command('com.example.commands.BlinkLight') def blink(speed, number): logging.info('Blinking device %s times.' % number) delay = 1 if speed == "SLOWLY": delay = 2 elif speed == "QUICKLY": delay = 0.5 for i in range(int(number)): logging.info('Device is blinking.') # GPIO.output(25, 1) time.sleep(delay) # GPIO.output(25, 0) time.sleep(1)
Exécuter l'exemple
Exécutez le code source.
python pushtotalk.py
Essayez une requête. Pour l'exemple ci-dessus, essayez ce qui suit:
Clignez des yeux cinq fois.
Notez que la requête doit correspondre au schéma de requête du package d'actions.