[PYTHON] Die Geschichte der Schaffung einer (wahrscheinlich) minimalen Fertigkeit, die Personalisierung und Abrechnung von Fertigkeiten implementiert

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.

Ziel

――Ich möchte die Personalisierungsfunktion vollständig nutzen

Ist es ein Ort wie dieser?

Was soll ich sagen?

** "Mein Weihnachtsmann" ** Über Fähigkeiten

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

  1. Die Rolle des Weihnachtsmanns wird in der Fertigkeit registriert
  2. Die Seite, die ein Geschenk will, macht einen Wunsch
  3. Die Rolle des Weihnachtsmanns bestätigt den Wunsch

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.

Was ist ask-cli?

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)

  1. ask init
  2. ask new
  3. ask deploy

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.

Code-Auszug und Kommentar

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.

Ablauf (des Beschreibungsnamens)

Ich werde entlang des Flusses so erklären

  1. Flow beim ersten Start
  2. Flow bei der Registrierung eines Wunsches
  3. Ablauf der Wunschbestätigung
  4. Abrechnungsbezogener Ablauf

Liste der Funktionen usw.

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

Flow beim ersten Start

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

  1. AnswerClassIntent Überprüfen Sie zunächst, ob die Personalisierung aktiviert ist.

Wenn die Personalisierung aktiviert ist-> Registrieren Sie die ID dieses Benutzers in persistence_attr ['santa'] ['id']. Danach wird diese PersonId als Weihnachtsmann behandelt.

Ablauf der Wunschregistrierung

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

Ablauf der Wunschbestätigung

  1. WishListIntentHandler

"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.

  1. WishDeleteIntent

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

Abrechnungsfluss

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

  1. BuyResponseHandler

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 Ende

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

Die Geschichte der Schaffung einer (wahrscheinlich) minimalen Fertigkeit, die Personalisierung und Abrechnung von Fertigkeiten implementiert
Die Geschichte von Python und die Geschichte von NaN
Die Geschichte der Erstellung einer Website, auf der die Veröffentlichungsdaten von Büchern aufgeführt sind
Die Geschichte, deep3d auszuprobieren und zu verlieren
Die Geschichte einer Box, die Peppers AL Memory und MQTT miteinander verbindet
Die Geschichte von Django, wie er eine Bibliothek erstellt, die vielleicht etwas nützlicher ist
Eine Geschichte, die den Aufwand für Betrieb / Wartung reduziert
Die Geschichte von Python ohne Inkrement- und Dekrementoperatoren.
Die Geschichte, dass der Rückgabewert von tape.gradient () None war
Eine Geschichte, die die Lieferung von Nico Nama analysierte.
Ich bin gerade in Singapur. Eine Geschichte über das Erstellen eines LineBot und den Wunsch, einen unvergesslichen Job zu machen
Die Geschichte der Schaffung eines "Geist- und Zeit-Chatrooms" exklusiv für Ingenieure im Unternehmen
Die Geschichte von sys.path.append ()
Die Geschichte der Einrichtung eines VIP-Kanals im internen Chatwork
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API
Die Geschichte, ein Tool zu erstellen, das auf Mac und Windows auf der Spieleentwicklungsseite ausgeführt wird
Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt