Ruft Lambda von Alexa an und gibt den Tag des Mülls in Nakano Ward zurück. Ich habe es geschrieben, damit selbst Leute, die es noch nie berührt haben, es von Grund auf neu machen können.
Ich habe versucht, die Entwicklung mit ALEXA einzuführen, daher werde ich sie auf meine eigene Weise zusammenfassen Ich habe es mit Bezug auf diesen Artikel gemacht. Es war sehr lehrreich, weil es ausführlich erklärt wurde, Ich bin auf dem Weg wegen einer Änderung der AWS-Spezifikationen gestolpert, daher werde ich diesen Bereich auch in diesem Artikel beschreiben.
Alexa Skill Kit
Extrahieren Sie ** Variablen ** aus dem vom Echo empfangenen Audio Erstelle eine Fertigkeit, die an Lambda weitergegeben werden soll.
Drücken Sie "Alexa Skills Kit" vom Amazon-Entwickler
Klicken Sie in der Amazon-Entwicklerkonsole auf "Fähigkeit erstellen"
Geben Sie Folgendes ein und drücken Sie "Fähigkeit erstellen"
Name der Fertigkeit: TrashDay
Standardsprache: Japanisch
Wählen Sie ein Modell aus, das Sie Ihrer Fähigkeit hinzufügen möchten: "Benutzerdefiniert"
Wählen Sie aus, wie die Backend-Ressourcen Ihrer Fertigkeit gehostet werden sollen:
Benutzerdefinierte Bereitstellung
(diesmal Hosting auf Lambda unabhängig)
Geben Sie den Rufnamen ein, um die Fertigkeit aufzurufen
Name des Fertigkeitsrufs: Thermy Gomi
"Alexa, öffne Thermy Gomie" aktiviert die Fertigkeit
Bereiten Sie die in der Anweisung enthaltenen Variablen im Voraus vor, wenn Sie die Aktion aufrufen.
Klicken Sie neben dem Steckplatztyp auf "Hinzufügen", um einen neuen zu erstellen.
Setzen Sie den Namen des Steckplatztyps auf "Typ" und klicken Sie auf "Benutzerdefinierten Steckplatztyp erstellen"
Die folgenden Steckplatzwerte wurden hinzugefügt. Der Wert von Alexa ist nicht wesentlich (etwas verspielt * später beschrieben).
Definiert die Aktion, die von der aufgerufenen Fertigkeit ausgeführt werden soll (= Thermy Gomi). Dieses Mal wird nur die Aktion erstellt, die auf den Tag des Mülls reagiert.
Klicken Sie neben der Absicht, eine neue zu erstellen, auf "Hinzufügen".
Setzen Sie den Intent-Namen auf "TellTrashDay" und drücken Sie "Create Custom Intent"
Setzen Sie den Intent-Slot-Namen auf "Typ" und wählen Sie den zuvor erstellten Slot-Typ "Typ" aus.
Der Beispielrede wurde Folgendes hinzugefügt. Beachten Sie, dass nach {type} ein ** halber Abstand ** steht.
Aus dem Obigen wird der Teil {Typ} als Variable extrahiert, wenn Sie eine Aussage in der Beispieläußerung machen.
AWS lambda
Hostet eine Funktion, die eine Antwort basierend auf den von Alexa übergebenen Variablen auswählt und darauf reagiert.
Wechseln Sie von der AWS-Verwaltungskonsole zum Lambda-Bildschirm und klicken Sie auf "Funktion erstellen"
Wählen Sie "alexa-Skills-Kit-Color-Expert-Python" von AWS Es hat eine eingebaute Beispielanwendung, die Alexa nach ihrer Lieblingsfarbe fragt.
Setzen Sie den Anwendungsnamen und TopicNameParameter auf "TrashDay" und drücken Sie "Deploy" TopicNameParameter wird in dem von CloudFormation übergebenen Parameter gespeichert. Es gibt keine Hinweise darauf, dass es in der Funktion verwendet wird, daher ist jeder Wert in Ordnung.
Wählen Sie eine Funktion aus dem linken Menü und drücken Sie die Funktion mit dem zuvor genannten Anwendungsnamen.
Wählen Sie die Lambda-Funktion aus und ersetzen Sie den Editor auf dem unteren Bildschirm durch den Inhalt von TrashDay.py.
TrashDay.py
# coding:utf-8
"""
This sample demonstrates a simple skill built with the Amazon Alexa Skills Kit.
The Intent Schema, Custom Slots, and Sample Utterances for this skill, as well
as testing instructions are located at http://amzn.to/1LzFrj6
For additional samples, visit the Alexa Skills Kit Getting Started guide at
http://amzn.to/1LGWsLG
"""
from __future__ import print_function
# --------------- Helpers that build all of the responses ----------------------
###Funktion, die verwendet wird, um nach der Verarbeitung jeder Absicht zu Alexa zurückzukehren
def build_speechlet_response(title, output, reprompt_text, should_end_session):
return {
'outputSpeech': {
'type': 'PlainText',
'text': output
},
'card': {
'type': 'Simple',
'title': "SessionSpeechlet - " + title,
'content': "SessionSpeechlet - " + output
},
'reprompt': {
'outputSpeech': {
'type': 'PlainText',
'text': reprompt_text
}
},
'shouldEndSession': should_end_session
}
### build_speechlet_Eine Funktion, die den durch die Antwort erstellten JSON im JSON für die Antwort speichert und zurückgibt.
def build_response(session_attributes, speechlet_response):
return {
'version': '1.0',
'sessionAttributes': session_attributes,
'response': speechlet_response
}
# --------------- Functions that control the skill's behavior ------------------
def get_welcome_response():
""" If we wanted to initialize the session to have some attributes we could
add those here
"""
session_attributes = {}
card_title = "Welcome"
speech_output = "Hallo, das ist Thermy Gomie," \
"Wir werden auf den festgelegten Tag des Mülls antworten, den Sie wegwerfen möchten!"
# If the user either does not reply to the welcome message or says something
# that is not understood, they will be prompted again with this text.
reprompt_text = "Wir werden auf den festgelegten Tag des Mülls antworten, den Sie wegwerfen möchten!"
should_end_session = False
return build_response(session_attributes, build_speechlet_response(
card_title, speech_output, reprompt_text, should_end_session))
def handle_session_end_request():
card_title = "Session Ended"
speech_output = "Bitte komm wieder"
# Setting this to true ends the session and exits the skill.
should_end_session = True
return build_response({}, build_speechlet_response(
card_title, speech_output, None, should_end_session))
# --------------- Events ------------------
def on_session_started(session_started_request, session):
""" Called when the session starts """
print("on_session_started requestId=" + session_started_request['requestId']
+ ", sessionId=" + session['sessionId'])
def on_launch(launch_request, session):
""" Called when the user launches the skill without specifying what they
want
"""
print("on_launch requestId=" + launch_request['requestId'] +
", sessionId=" + session['sessionId'])
# Dispatch to your skill's launch
return get_welcome_response()
###Eine Funktion, die die einer Anweisung entsprechende Absicht bestimmt und zu jeder Funktion verzweigt
def on_intent(intent_request, session):
""" Called when the user specifies an intent for this skill """
print("on_intent requestId=" + intent_request['requestId'] +
", sessionId=" + session['sessionId'])
intent = intent_request['intent']
intent_name = intent_request['intent']['name']
# Dispatch to your skill's intent handlers
###Verzweigen Sie zu jeder Absicht, einschließlich TellTrashDay
if intent_name == "TellTrashDay":
return set_TellTrashDay_text(intent, session)
elif intent_name == "AMAZON.HelpIntent":
return get_welcome_response()
elif intent_name == "AMAZON.CancelIntent" or intent_name == "AMAZON.StopIntent":
return handle_session_end_request()
else:
raise ValueError("Invalid intent")
def on_session_ended(session_ended_request, session):
""" Called when the user ends the session.
Is not called when the skill returns should_end_session=true
"""
print("on_session_ended requestId=" + session_ended_request['requestId'] +
", sessionId=" + session['sessionId'])
# add cleanup logic here
# --------------- Main handler ------------------
###Die erste Funktion, die ausgeführt wird, wenn Lambda aufgerufen wird
###Anforderungsinformationen an Lambda werden im Ereignis gespeichert
def lambda_handler(event, context):
""" Route the incoming request based on type (LaunchRequest, IntentRequest,
etc.) The JSON body of the request is provided in the event parameter.
"""
# get applicationId from request.json
print("event.session.application.applicationId=" +
event['session']['application']['applicationId'])
"""
Uncomment this if statement and populate with your skill's application ID to
prevent someone else from configuring a skill that sends requests to this
function.
"""
# if (event['session']['application']['applicationId'] !=
# "amzn1.echo-sdk-ams.app.[unique-value-here]"):
# raise ValueError("Invalid Application ID")
if event['session']['new']:
on_session_started({'requestId': event['request']['requestId']},
event['session'])
###Ruft nur Fertigkeitsnamen auf und wird ausgeführt, wenn keine Absicht enthalten ist
if event['request']['type'] == "LaunchRequest":
return on_launch(event['request'], event['session'])
###Wird ausgeführt, wenn der Benutzer eine der Absicht entsprechende Anweisung abgibt
elif event['request']['type'] == "IntentRequest":
return on_intent(event['request'], event['session'])
###Wird beim Beenden ausgeführt, wenn keine Antwortabsicht vorliegt, oder bei einem Fehler
elif event['request']['type'] == "SessionEndedRequest":
return on_session_ended(event['request'], event['session'])
###Eine Funktion, die den Garbage Day zurückgibt, der dem Slot-Typ entspricht
def set_TellTrashDay_text(intent, session):
""" Sets the color in the session and prepares the speech to reply to the
user.
"""
card_title = intent['name']
session_attributes = {}
should_end_session = False
speech_output = "Sag es schnell, du kannst dich in einen Müllkorb werfen"
###Brennende Müllliste
burn_list = ['brennen', 'Roh', 'Aus Altpapier']
###Nicht brennende Müllliste
notburn_list = ['Nicht brennbar', 'Aus Kunststoff', 'Plastik', 'Plastik']
###Aluminium kann Müllliste
can_list = ['Aus Aluminiumdose', 'Aluminiumdosen', 'Von leeren Dosen', 'Von PET-Flaschen', 'Von der Flasche', 'Können', 'können', 'スチールKönnen']
###Pappmüllliste
paper_list = ['Karton', 'Zeitung', 'Aus Altpapier', 'Papier-', 'Papier-']
###Liste gefährlicher Abfälle
glass_list = ['Aus Glas', 'Metall', 'Von Keramik']
###Wenn du sagst
alexa_list = ['Alexa', 'Alexa']
if 'type' in intent['slots']:
### 3rd part was 'name' so changed to 'value'
trash_type = intent['slots']['type']['value']
if trash_type in burn_list:
speech_output = 'Dienstag und Freitag'
elif trash_type in notburn_list:
speech_output = 'Es ist Montag'
elif trash_type in can_list:
speech_output = 'Es ist Mittwoch'
elif trash_type in paper_list:
speech_output = 'Es ist Montag'
elif trash_type in glass_list:
speech_output = 'Es ist Samstag'
elif trash_type in alexa_list:
speech_output = 'Ich denke, ich möchte Weltraummüll sein'
else:
speech_output = "Es tut mir leid, ich weiß nicht, was du sagst"
print(speech_output)
reprompt_text = speech_output
return build_response(session_attributes, build_speechlet_response(
card_title, speech_output, reprompt_text, should_end_session))
Drücken Sie Trigger hinzufügen
Kehren Sie zur Alexa-Entwicklerkonsole zurück und kopieren Sie die Skill-ID vom Endpunkt
Kehren Sie zu AWS zurück, wählen Sie "Alexa Skills Kit" aus, fügen Sie die kopierte Skill-ID ein und klicken Sie auf "Hinzufügen"
Wenn es normal hinzugefügt wird, ist die Einstellung auf der Lambda-Seite abgeschlossen. Noch ein Atemzug.
Geben Sie abschließend die Lambda-Funktion an, die zuvor auf der Alexa-Seite erstellt wurde.
Kopieren Sie die ARN oben auf dem AWS-Lambda-Bildschirm
In die Standardregion der Alexa-Endpunkte einfügen
Drücken Sie Endpunkt speichern
Nachdem alle Einstellungen abgeschlossen sind, speichern Sie das Modell und erstellen Sie das Modell.
Testen Sie die alexa Entwicklerkonsole, um festzustellen, ob sie funktioniert.
Die Phase, in der der Fähigkeitstest aktiviert ist, wurde auf "In Entwicklung" geändert
Aktivieren Sie die Fertigkeit und probieren Sie die Aktion aus, die Sie der Absicht hinzugefügt haben.
Es funktionierte! !!
Der Humor ist perfekt.
Übrigens, auch wenn Sie Ihre Fähigkeiten nicht im Laden veröffentlichen Mit meinem Echo konnte ich die Fähigkeit nutzen, ohne etwas einzustellen. (Als ich im Browser testete, antwortete mein Echo und ich war überrascht, lol) Es scheint, dass es automatisch mit Ihrem Amazon-Konto verknüpft wird.
# Coding: utf-8
wird am Anfang des Codes hinzugefügt, damit Japanisch gelesen werden kann.
Da die JSON-Eingabe auf dem Alexa-Testbildschirm angezeigt wird, können Sie die Ursache eingrenzen, indem Sie sie in den Lambda-Test kopieren und versuchen.