Construire une compétence Alexa multi-streaming avec le kit de compétences Alexa
J'ai reçu mon appareil Echo la semaine dernière et j'ai pensé que ce serait cool de développer une compétence Alexa personnalisée. J'ai donc pris tout le samedi pour développer une compétence de stations de radio, c'est excitant de demander à Alexa de jouer mes stations de radio préférées pendant que je programme 🙂.
Dans cet article, je montre un exemple de compétence de création de compétences personnalisées pour Echo à l'aide du kit de compétences Alexa (ASK) v2+ pour Nodejs. Le projet est dérivé et modifié à partir de Skill Sample NodeJS Audio Player .
Cas d'utilisation
Ma compétence radio est la façon d'écouter vos multiples stations de radio, vous pouvez dire "Alexa, jouez <nom de la station de radio>" et Alexa commencera à diffuser la station de radio. Vous pouvez ajouter ou supprimer des stations, les stations de radio sont stockées dans DynamoDB. afin que vous ayez une expérience de lecture de musique complètement personnalisée.
Conditions préalables
Nous avons besoin d'un compte AWS et d'un compte développeur Amazon pour créer une compétence Alexa.
- Nous devons installer AWS CLI avec
npm install -g ask-cli.
- Configurez l' AWS CLI avec
$ ask init
. - Nous devons installer et initialiser ASK CLI .
Il s'agit d'un démarrage rapide de l'interface de ligne de commande Alexa Skills Kit .
Créer une table DynamoDb
Nous avons besoin de 2 tables DynamoDB, MyRadiosSession stocke les sessions utilisateur et MyRadios stocke l'URL de diffusion des stations de radio.
$ aws dynamodb create-table --table-name MyRadios --attribute-definitions AttributeName=id,AttributeType=S --key-schema AttributeName=id,KeyType=HASH --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5$ aws dynamodb create-table --table-name MyRadiosSession --attribute-definitions AttributeName=id,AttributeType=S --key-schema AttributeName=id,KeyType=HASH --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
Ensuite, nous devons insérer les URL des stations de radio en streaming dans la table MyRadio.
aws dynamodb batch-write-item --request-items file://./request-stations.json
Voici le contenu de request-stations.json
.
Créer une politique
Nous avons besoin d'une stratégie avec les autorisations DynamoDb et Cloud Watch. Créons-le.
$ aws iam create-policy --policy-name my-radio-skill-policy --policy-document file://./policy.json
La stratégie de fichier est un document JSON dans le dossier actuel qui accorde des autorisations aux tables Dynamodb et à la journalisation Cloudwatch :
Notez que vous devez remplacer ACCOUNT_ID par votre identifiant de compte AWS .
Une fois la stratégie créée, nous obtenons l'ARN de la stratégie à partir de la sortie, copiez l'ARN, nous devrons l'attacher à notre fonction lambda après le déploiement de la compétence à la dernière étape.
Créer une nouvelle compétence
Une fois votre compte configuré, nous allons maintenant créer notre compétence Alexa personnalisée.
$ ask new -n mesradios --lambda-name ask-custom-mradio-default
Sélectionnez Node.js V8 comme runtime et hello world comme modèle.
Cette commande crée un répertoire de projet "myradios" avec tous les fichiers requis. Nous avons également configuré le nom d'une fonction lambda pour qu'il soit "ask-custom-mradio-default".
Le myradios
répertoire contient les fichiers suivants :
skill.json
- La configuration de la compétencemodels/en-US.json
- Un modèle d'interaction de la compétence pour les paramètres régionaux en-US.lambda/custom/index.js
- Une fonction lambda de la compétencelambda/custom/package.json
- Le fichier de package npm.ask/config
- déployer le fichier de configuration des paramètres
Configurer le manifeste des compétences
Le manifeste de compétence est la représentation JSON de votre compétence et fournit à Alexa toutes les métadonnées requises. Commençons à éditer skill.json , changeons examplePhrases en :
"examplePhrases": [
"Alexa, ouvre Mes Radios",
"Alexa, demande à Mes Radios de jouer ABC NEWS",
"Alexa, dis à Mes Radios de jouer Fox FM"
],
Nous devons également modifier le résumé et les descriptions qui s'affichent lors de la visualisation de la liste des compétences.
Passons ensuite au modèle d'interaction models/en-US.json
, l'exemple de modèle devrait ressembler à ce qui suit :
Notez que la "STATION" est un emplacement personnalisé, vous pouvez ajouter autant de noms de stations de radio dans les valeurs d'emplacement. Des exemples d'énoncés pour la structure de la phrase devraient vous plaire
"commencer la {STATION}",
"commencer la lecture de la {STATION}",
"démarrer la {STATION}",
"commencer la lecture de la {STATION}"
Les machines à sous sont un accessoire très puissant pour créer une compétence Alexa personnalisée. Par exemple, la déclaration "Parlez-moi de {joueur}" signifie que l'utilisateur peut demander notre compétence sur n'importe quel joueur d'échecs du joueur de machine à sous. De plus, plusieurs emplacements offrent la possibilité d'utiliser des boîtes de dialogue dans lesquelles la compétence Alexa invite l'utilisateur à remplir toutes les valeurs d'emplacement afin de réaliser l'intention.
Création de la fonction AWS Lambda
Une fois le modèle d'interaction créé, nous devons créer et configurer la fonction AWS lambda lambda/custom/index.js
.
En haut du fichier, nous importons le SDK et lui attribuons une Alexa
constante pour une utilisation ultérieure :
const Alexa = require('ask-sdk');
Déplacez-vous ensuite vers le bas du fichier, nous pouvons voir le code suivant :
const skillBuilder = Alexa.SkillBuilders.standard(); exports.handler =
skillBuilder . ,
CanFulfillIntentRequestHandler ) _ _ _ _ _ _ _ _ _ _ _ _
.addRequestInterceptors(LoadPersistentAttributesRequestInterceptor) .addResponseInterceptors(SavePersistentAttributesResponseInterceptor).addErrorHandlers(ErrorHandler)
.withAutoCreateTable(false)
.withTableName(constants.skill.dynamoDBTableName)
.lambda();
C'est ici que nous enregistrons vos intercepteurs, en ajoutant requestHandler au skillBuilder en utilisant .addRequestInterceptors
. La .lambda()
méthode sérialise l'objet en JSON prêt à être lu par la compétence Alexa.
Passons maintenant aux gestionnaires d'intention, les intercepteurs de requête et de réponse d'Alexa Skill reçoivent une instance HandlerInput lorsqu'ils sont invoqués. Prenons LaunchRequestHandler
un exemple :
Lorsqu'un client lance une skill en disant « Alexa, ouvre ma radio », notre skill reçoit une requête de type « LaunchRequest ». handlerInput.requestEnvelope.request.type === “LaunchRequest”
dans la fonction "canHandle" s'assure qu'il ne ferait que gérer les demandes de lancement.
Tous les autres gestionnaires d'intention sont assez similaires, certaines des intentions utilisent reprompt(speechText)
. Cela donne la commande à Alexa d'attendre une réponse d'un utilisateur, Alexa prononce la nouvelle invite si le microphone a été ouvert pendant huit secondes sans intervention de l'utilisateur.
Maintenant que vous avez vu tous ces détails sur Alexa Skill Development, nous sommes prêts à déployer et tester la compétence.
Déployer la compétence
Pour déployer la compétence, exécutez la commande suivante .
$ask déployer
La commande ask deploy active automatiquement votre compétence déployée, elle crée une fonction lambda, un rôle IAM et les relie.
Attacher la stratégie au rôle IAM
Le kit de compétences Alexa créerait un rôle IAM par défaut "ask-lambda-myradio" pour notre fonction lambda après le déploiement de la compétence. Nous pouvons maintenant attacher notre stratégie créée à l'étape précédente au rôle IAM de la fonction lambda.
$ aws iam attach-role-policy --role-name ask-lambda-myradio --policy-arn "arn:aws:iam::ACCOUNT_ID:policy/my-radio-skill-policys"
C'est à peu près ça! nous pouvons maintenant utiliser nos compétences depuis votre appareil ou votre simulateur.
J'espère que vous avez trouvé cet article utile, vous pouvez trouver le projet complet dans mon référentiel GitHub .
Commentaires
Enregistrer un commentaire
🖐 Hello,
N'hésitez pas à commenter ou vous exprimer si vous avez des trucs à dire . . .👉