Eh bien, j'ai vu le twitter de Miso Tanaka et j'ai essayé de participer au calendrier de l'avent d'Alexa avec un grand élan, mais j'étais pressé car c'était juste avant l'événement sans préparer de matériel. ..
Je me demandais quoi faire, mais laissez-moi simplement en faire un article explicatif sur les compétences que j'ai récemment créées.
――Je souhaite utiliser complètement la fonction de personnalisation --Je veux voir la source de la facturation en compétences en python --Je veux utiliser python avec ask cli
Est-ce un endroit comme ça?
https://www.amazon.co.jp/dp/B081YJTLJS/
Il n'y a pas longtemps, j'ai sorti une petite compétence appelée "Mon Père Noël". Le but de cette compétence est ...
... C'était comme ça. C'est simple. Grosso modo
C'est une compétence. Le fait est que vous utilisez la fonction de personnalisation pour identifier le rôle du Père Noël. La personne qui fait un vœu l'utilise également si la personnalisation est efficace. De plus, la fonction de facturation est implémentée de force, et si vous facturez, la limite supérieure de vos souhaits augmentera.
ask-cli for python
J'ai utilisé ask-cli, mais j'ai toujours utilisé node. J'ai pensé essayer d'utiliser python une fois, donc cette fois j'utilise python.
Il utilise le kit de compétences alexa sur la ligne de commande. Avec lui, vous pouvez créer des compétences sans ouvrir la console développeur. C'est incroyablement utile lorsque vous souhaitez supprimer du code pour une compétence existante avec ʻask clone` ou partager du code entre équipes. Bon, il y a beaucoup de choses qui conviennent à la console, et au moment de l'application, je finis par ouvrir la console.
Quant à son utilisation, le didacticiel suivant est tel quel.
[Démarrage rapide: Interface de ligne de commande Alexa Skills Kit (ASK CLI)](https://developer.amazon.com/ja-JP/docs/alexa/smapi/quick-start-alexa-skills-kit-command-line- interface.html)
Simplement fais-le. Vous pouvez cloner l'exemple de code de compétence avec ʻask new`, afin de pouvoir créer rapidement quelque chose.
ask-cli for python
Si vous sélectionnez python3 au moment de ʻask new`, vous pouvez créer une compétence alexa avec python.
$ ask new
? Please select the runtime Python3
? List of templates you can choose Hello World (using Classes)
? Please type in your skill name: skill-sample-python-helloworld-classes
Skill "skill-sample-python-helloworld-classes" has been created based on the chosen template
(↑ Depuis le 19/12/18, j'ai eu une erreur lors du déploiement sauf si j'ai changé python3.6
dans .ask / config
en python3.7
.)
Au fait, vous pouvez créer une compétence hébergée en faisant quelque chose comme $ ask create-hosts-skill --runtime python3.7 --skill-name ExampleSkill --auto-clone true
.
En bref, la compétence qui héberge les ressources (lambda, DynamoDb, etc.) côté alexa. Cela suffit pour un peu de compétence.
À l'origine, c'est une compétence hébergée que vous devez écrire du code à l'aide d'un navigateur, mais si vous utilisez cli, vous pouvez la développer localement, ce qui est super pratique.
Ceci est mon code du Père Noël. (Je suis désolé pour le code, mais je suis désolé pour le code.)
https://github.com/ikegam1/alexa-myhomesanta-ask-python37
--lambda / py / lambda_function.py Traitement backend général des compétences --lambda / py / vendor / alexa / data.py Mot de la partie parlée de la compétence --isps / subscription / my-home-santa.json Paramétrage des éléments de facturation --models / ja-JP.json Intention de la partie avant de la compétence, etc.
La partie de lambda_function.py
est expliquée.
Je vais expliquer le long du flux comme ça
Une liste de classes et de fonctions. J'omets l'aide et le traitement normal
Numéro d'article | Nom | Contenu |
---|---|---|
1 | class LaunchRequestHandler(AbstractRequestHandler) | Intention de lancement. Traité lorsque la compétence est activée |
2 | class WishAddInIntentHandler(AbstractRequestHandler) | Intention lors de l'enregistrement d'un souhait. Après cela, passez au traitement de confirmation |
3 | class WishDeleteIntentHandler(AbstractRequestHandler) | Une intention qui supprime un souhait. Personnalisation requise. Vous pouvez supprimer ce que vous avez enregistré |
4 | class WishListIntentHandler(AbstractRequestHandler) | Une intention de confirmer vos souhaits. Personnalisation requise. Vous pouvez vérifier ce que vous avez enregistré |
5 | class AnswerClassIntentHandler(AbstractRequestHandler) | Intention d'enregistrer les utilisateurs en tant que père Noël |
6 | class PremiumInfoIntentHandler(AbstractRequestHandler) | Introduction des éléments de facturation |
7 | class YesIntentHandler(AbstractRequestHandler) | Le processus principal est la confirmation lors de l'enregistrement d'un souhait |
8 | class ShoppingIntentHandler(AbstractRequestHandler) | Si vous avez acheté un élément de facturation |
9 | class BuyIntentHandler(AbstractRequestHandler) | Intention lors de l'achat d'articles facturables |
10 | class CancelSubscriptionIntentHandler(AbstractRequestHandler) | Intention lors de l'annulation d'un élément de facturation |
11 | class CancelResponseHandler(AbstractRequestHandler) | Récupérez la réponse lors de l'annulation d'un élément de facturation |
12 | class BuyResponseHandler(AbstractRequestHandler) | Récupérez la réponse lors de l'achat d'un élément de facturation |
13 | def is_santa(santa, person_id) | Déterminez si vous êtes le Père Noël |
14 | def is_skill_product(handler_input) | Déterminez s'il s'agit d'un élément de facturation ou valide |
15 | def in_skill_product_response(handler_input) | Obtenez des informations valides ou de facturation via l'API côté Alexa |
1.LaunchIntent
Les paramètres sont conservés dans DynamoDB.
Si persistence_attr ['santa']
est vide, il est considéré comme le premier démarrage.
Vérifiez si la personnalisation est activée. Le contrôle peut être déterminé par la présence ou non d'un personId dans request_envelope.context.system.person
.
Si la personnalisation est désactivée -> Quitter avec "Activer"
Si la personnalisation est activée -> "Voulez-vous vous inscrire en tant que Père Noël?" Flow. Permettez-moi de dire "Je suis le Père Noël" et conduisez à "Répondre à l'intention de classe"
Si la personnalisation est activée -> Enregistrez l'ID de cet utilisateur dans persistence_attr ['santa'] ['id']
. Après cela, ce personId est traité comme le Père Noël.
1.LaunchIntent
Si person_id est enregistré dans persistence_attr ['santa'] ['id']
et que c'est la personne elle-même, il est considéré comme le Père Noël.
Sinon ** Utilisateurs généralistes qui font un vœu **.
La vérification est déterminée par 13. def is_santa (santa, person_id)
.
Si ce n'est pas le Père Noël-> Permettez-moi de dire "fais un vœu" et conduis à "WishAddInIntent`
2.WishAddInIntent
Une intention de répondre à vos souhaits.
Puisque le souhait est capté dans Dialog, ** wish ** est capté au moment où il est traité par cette intention.
Cependant, je veux le confirmer, donc je le répète et demande "oui" ou "non". Si oui, allez à «Oui intention».
De plus, 3 souhaits seront Max quand il n'y a pas de frais. Cochez persistence_attr ['msg']
et si 3 éléments ont déjà été enregistrés, recommandez l'élément de facturation et terminez.
7.YesIntent
Il entre en retournant confirmer lors de l'enregistrement d'un souhait.
Je voulais utiliser Dialog, mais j'ai utilisé Build in Intent car cela semble compliqué.
S'il y a une valeur dans persistence_attr ['session'] ['msg']
et qu'elle est dans la minute suivant l'enregistrement, elle est considérée comme une transition de WishAddInIntent.
Le message est enregistré dans persistence_attr ['msg'], mais si la personnalisation est activée, le personId est enregistré dans persistence_attr ['msg'] [idx] ['person_id']
et utilisé pour la vérification d'identité.
Si vous pouvez confirmer votre identité, vous pouvez supprimer votre souhait
"Confirmez votre souhait" Il y a une branche si Père Noël ou non.
Si le Père Noël-> Énoncez les ** souhaits ** enregistrés dans l'ordre. De plus, "Supprimer le ○ e souhait" entraînera la suppression du souhait. Si Utilisateur général-> Personnalisation doit être activé pour confirmer, et si activé, vous pouvez confirmer vos souhaits enregistrés. Connectez-vous également à la suppression comme "Veuillez dire le mot de passe à 4 chiffres 1234 pour supprimer"
Si Santa-> message_number Vérifiez l'emplacement. ** Supprimer le souhait ** Si Utilisateur général-> mot de passe Vérifiez l'emplacement. Si les mots de passe correspondent, supprimez votre souhait
Un produit d'abonnement appelé "My Santa Claus Premium Features" est défini.
9.BuyIntentHandler Transition depuis "Acheter des fonctionnalités premium".
En utilisant le productId de ce produit comme clé, nous jetons simplement le processus du côté alexa.
return handler_input.response_builder.add_directive(
SendRequestDirective(
name="Buy",
payload={
"InSkillProduct": {
"productId": product[0].product_id
}
},
token="correlationToken")
).response
L'intention suivante reçoit ceci
Il renvoie Connections.Response
au lieu de l'intention habituelle.
return (ask_utils.is_request_type("Connections.Response")(handler_input) and
handler_input.request_envelope.request.name == "Buy")
Après l'achat, il sera retourné avec le nom de paramètre «Buy», mais le statut est «PurchaseResult.ACCEPTED», «PurchaseResult.DECLINED», «PurchaseResult.ALREADY_PURCHASED», ou non. Je retourne également des choses comme s'il a été acheté ou non, donc je retourne l'énoncé en fonction de cela. Le traitement en cas d'annulation est presque le même que le simple changement d'Achat en Annuler.
C'est tout. Personnellement, je pense qu'il s'agit du volume d'un petit tutoriel.
Aussi, pour être honnête, la personnalisation est difficile à utiliser, et quand cela devient indispensable, je pense que le nombre d'utilisateurs diminuera fortement. ** Il peut être utilisé même s'il est désactivé, mais il est toujours pratique s'il est activé **. Attentes pour l'avenir. Facturation en compétences ... Il semble que les compétences japonaises soient encore assez strictes. Je pense que c'est un joli créneau dans lequel vivre.
Recommended Posts