Nun, ich habe Miso Tanakas Twitter gesehen und versucht, mit großer Dynamik an Alexas Adventskalender teilzunehmen, aber ich hatte es eilig, weil es kurz vor der Veranstaltung war, ohne Material vorzubereiten. ..
Ich habe mich gefragt, was ich tun soll, aber ich möchte es einfach zu einem erklärenden Artikel über die Fähigkeiten machen, die ich kürzlich geschaffen habe.
――Ich möchte die Personalisierungsfunktion vollständig nutzen
Ist es ein Ort wie dieser?
https://www.amazon.co.jp/dp/B081YJTLJS/
Vor nicht allzu langer Zeit habe ich eine kleine Fertigkeit namens "Mein Weihnachtsmann" veröffentlicht. Der Zweck dieser Fähigkeit ist ...
... Es war so. Es ist einfach. Grob gesagt
Es ist eine Fähigkeit. Der Punkt ist, dass Sie die Personalisierungsfunktion verwenden, um die Rolle des Weihnachtsmanns zu identifizieren.
Darüber hinaus wird die Abrechnungsfunktion zwangsweise implementiert, und wenn Sie abrechnen, erhöht sich die Obergrenze Ihrer Wünsche.
ask-cli for python
Ich habe ask-cli verwendet, aber ich habe immer node verwendet. Ich dachte, ich würde einmal versuchen, Python zu verwenden, also verwende ich diesmal Python.
Es verwendet das Alexa Skill Kit in der Befehlszeile. Mit ihm können Sie Fähigkeiten erstellen, ohne die Entwicklerkonsole zu öffnen. Es ist wahnsinnig nützlich, wenn Sie Code für eine vorhandene Fertigkeit mit "Ask Clone" ablegen oder Code zwischen Teams teilen möchten. Nun, es gibt viele Dinge, die für die Konsole praktisch sind, und zum Zeitpunkt der Anwendung öffne ich am Ende die Konsole.
Das folgende Tutorial zeigt, wie es verwendet wird.
[Schnellstart: Alexa Skills Kit-Befehlszeilenschnittstelle (ASK CLI)](https://developer.amazon.com/ja-JP/docs/alexa/smapi/quick-start-alexa-skills-kit-command-line- interface.html)
TU es einfach. Sie können den Beispiel-Skill-Code mit "neu fragen" klonen, um schnell etwas zu erstellen.
ask-cli for python
Wenn Sie python3 zum Zeitpunkt von "ask new" auswählen, können Sie mit Python eine Alexa-Fertigkeit erstellen.
$ 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
(↑ Am 19.12.18 ist beim Bereitstellen ein Fehler aufgetreten, es sei denn, ich habe "python3.6" in ".ask / config" in "python3.7" geändert.)
Übrigens können Sie eine gehostete Fertigkeit erstellen, indem Sie etwas wie "$ ask create-gehostete-Fertigkeit --runtime python3.7 --skill-name ExampleSkill --auto-clone true" ausführen. Kurz gesagt, die Fähigkeit, die Ressourcen (Lambda, DynamoDb usw.) auf der Alexa-Seite hostet. Dies ist genug für ein wenig Geschick. Ursprünglich handelt es sich um eine gehostete Fähigkeit, bei der Sie Code mit einem Browser schreiben müssen. Wenn Sie jedoch cli verwenden, können Sie ihn lokal entwickeln, was sehr praktisch ist.
Dies ist mein Weihnachtsmann-Code. (Der Code tut mir leid, aber er ist ein schlechter Code.)
https://github.com/ikegam1/alexa-myhomesanta-ask-python37
--lambda / py / lambda_function.py Allgemeine Backend-Verarbeitung für Skills --lambda / py / vendor / alexa / data.py Wort des gesprochenen Teils der Fertigkeit --isps / subscription / my-home-santa.json Einstellung der Rechnungspositionen --models / ja-JP.json Absicht des vorderen Teils der Fertigkeit usw.
Der Teil von lambda_function.py
wird erklärt.
Ich werde entlang des Flusses so erklären
Eine Liste von Klassen und Funktionen. Ich lasse Hilfe und normale Verarbeitung aus
Artikelnummer | Name | Inhalt |
---|---|---|
1 | class LaunchRequestHandler(AbstractRequestHandler) | Absicht starten. Wird verarbeitet, wenn die Fertigkeit aktiviert ist |
2 | class WishAddInIntentHandler(AbstractRequestHandler) | Absicht bei der Registrierung eines Wunsches. Danach Übergang zur Bestätigungsverarbeitung |
3 | class WishDeleteIntentHandler(AbstractRequestHandler) | Eine Absicht, die einen Wunsch löscht. Personalisierung erforderlich. Sie können löschen, was Sie registriert haben |
4 | class WishListIntentHandler(AbstractRequestHandler) | Die Absicht, Ihre Wünsche zu bestätigen. Personalisierung erforderlich. Sie können überprüfen, was Sie registriert haben |
5 | class AnswerClassIntentHandler(AbstractRequestHandler) | Absicht, Benutzer als Weihnachtsmann zu registrieren |
6 | class PremiumInfoIntentHandler(AbstractRequestHandler) | Einführung von Rechnungspositionen |
7 | class YesIntentHandler(AbstractRequestHandler) | Der Hauptprozess ist die Bestätigung bei der Registrierung eines Wunsches |
8 | class ShoppingIntentHandler(AbstractRequestHandler) | Ob Sie einen Rechnungsposten gekauft haben |
9 | class BuyIntentHandler(AbstractRequestHandler) | Absicht beim Kauf abrechnungsfähiger Artikel |
10 | class CancelSubscriptionIntentHandler(AbstractRequestHandler) | Absicht beim Stornieren eines Rechnungspostens |
11 | class CancelResponseHandler(AbstractRequestHandler) | Nehmen Sie die Antwort auf, wenn Sie einen Rechnungsposten stornieren |
12 | class BuyResponseHandler(AbstractRequestHandler) | Nehmen Sie die Antwort beim Kauf eines Rechnungspostens auf |
13 | def is_santa(santa, person_id) | Bestimmen Sie, ob Sie der Weihnachtsmann sind |
14 | def is_skill_product(handler_input) | Stellen Sie fest, ob es sich um eine Rechnungsposition handelt oder ob diese gültig ist |
15 | def in_skill_product_response(handler_input) | Erhalten Sie gültige Informationen oder Informationen zu Rechnungsartikeln über die API auf der Alexa-Seite |
1.LaunchIntent
Die Parameter bleiben in DynamoDB erhalten.
Wenn persistence_attr ['santa']
leer ist, wird dies als erster Start betrachtet.
Überprüfen Sie, ob die Personalisierung aktiviert ist. Die Prüfung kann dadurch bestimmt werden, ob sich in request_envelope.context.system.person
eine personId befindet.
Wenn Personalisierung deaktiviert-> Beenden mit "Aktivieren"
Wenn Personalisierung aktiviert ist-> "Möchten Sie sich als Weihnachtsmann registrieren?" Lassen Sie mich "Ich bin der Weihnachtsmann" sagen und zu "Answer Class Intent" führen
Wenn die Personalisierung aktiviert ist-> Registrieren Sie die ID dieses Benutzers in persistence_attr ['santa'] ['id']
. Danach wird diese PersonId als Weihnachtsmann behandelt.
1.LaunchIntent Wenn person_id in `persistence_attr ['santa'] ['id'] 'registriert ist und es die Person selbst ist, wird es als Santa beurteilt. Wenn nicht ** Allgemeine Benutzer, die einen Wunsch machen **. Die Prüfung wird durch "13. def is_santa (santa, person_id)" bestimmt.
Wenn nicht Santa-> Lassen Sie mich "Wunsch machen" sagen und zu "WishAddInIntent" führen
2.WishAddInIntent
Die Absicht, Ihre Wünsche zu erfüllen.
Da die Wünsche im Dialog aufgenommen werden, werden ** Wünsche ** zu dem Zeitpunkt aufgenommen, zu dem sie von dieser Absicht verarbeitet werden.
Ich möchte es jedoch bestätigen, also wiederhole ich es und frage nach "Ja" oder "Nein". Wenn ja, gehen Sie zu "Yes Intent".
Zusätzlich sind 3 Wünsche Max, wenn es keine Gebühr gibt. Überprüfen Sie persistence_attr ['msg']
und wenn bereits 3 Artikel registriert wurden, empfehlen Sie den Abrechnungsposten und beenden Sie den Vorgang.
7.YesIntent Sie erhalten die Bestätigung bei der Registrierung eines Wunsches. Ich wollte Dialog verwenden, aber ich habe Build in Intent verwendet, weil es kompliziert zu sein scheint. Wenn "persistence_attr ['session'] ['msg']" einen Wert enthält und dieser innerhalb von 1 Minute nach der Registrierung liegt, wird dies als Übergang von WishAddInIntent betrachtet.
Die Nachricht wird in persistence_attr ['msg'] registriert. Wenn jedoch die Personalisierung aktiviert ist, wird die personId in `persistence_attr ['msg'] [idx] ['person_id']" registriert und zur Identitätsprüfung verwendet. Wenn Sie Ihre Identität bestätigen können, können Sie Ihren Wunsch löschen
"Bestätige deinen Wunsch" Es gibt eine Filiale, ob der Weihnachtsmann oder nicht.
Wenn Santa-> Sprechen Sie die registrierten ** Wünsche ** in der richtigen Reihenfolge. Außerdem führt "Löschen des ○-ten Wunsches" zum Löschen des Wunsches. Wenn General User-> Personalization zur Bestätigung aktiviert sein muss und wenn aktiviert, können Sie Ihre registrierten Wünsche bestätigen. Stellen Sie außerdem eine Verbindung zum Löschen wie "Bitte sagen Sie zum Löschen das 4-stellige Passwort 1234" her.
Wenn Santa-> message_number Steckplatz prüfen. ** Lösche den Wunsch ** Wenn General User-> Passwort Steckplatz prüfen. Wenn die Passwörter übereinstimmen, löschen Sie Ihren Wunsch
Ein Abonnementprodukt mit dem Namen "My Santa Claus Premium Features" ist festgelegt.
9.BuyIntentHandler Übergang von "Premium-Funktionen kaufen".
Mit der productId dieses Produkts als Schlüssel werfen wir den Prozess einfach auf die alexa-Seite.
return handler_input.response_builder.add_directive(
SendRequestDirective(
name="Buy",
payload={
"InSkillProduct": {
"productId": product[0].product_id
}
},
token="correlationToken")
).response
Die folgende Absicht erhält dies
Es gibt "Connections.Response" anstelle der üblichen Absicht zurück.
return (ask_utils.is_request_type("Connections.Response")(handler_input) and
handler_input.request_envelope.request.name == "Buy")
Nach dem Kauf wird es mit dem Parameternamen "Kaufen" zurückgegeben, aber der Status lautet "PurchaseResult.ACCEPTED", "PurchaseResult.DECLINED", "PurchaseResult.ALREADY_PURCHASED" oder nicht. Ich gebe auch Dinge zurück, wie zum Beispiel, ob es gekauft wurde oder nicht, also gebe ich die Äußerung entsprechend zurück. Die Verarbeitung im Falle einer Stornierung entspricht fast der Änderung von Kaufen in Abbrechen.
Das ist es. Ich persönlich denke, es geht um die Lautstärke eines kleinen Tutorials.
Um ehrlich zu sein, ist die Personalisierung schwierig zu verwenden, und wenn dies unerlässlich wird, denke ich, dass die Anzahl der Benutzer stark abnehmen wird. ** Es kann verwendet werden, auch wenn es deaktiviert ist, aber es ist immer noch praktisch, wenn es aktiviert ist **. Erwartungen für die Zukunft. In-Skill-Abrechnung ... Es scheint, dass japanische Fähigkeiten immer noch recht streng sind. Ich denke, es ist eine hübsche Nische, in der man leben kann.
Recommended Posts