from __future__ import print_function
# --------------- Helpers that build all of the responses ----------------------
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 }
def build_image_response(title, output, reprompt_text, should_end_session):
return{ 'outputSpeech': { 'type': 'PlainText', 'text': output }, "card": { "type": "simple", "title": title, "content": output, "text": output, "image": { "smallImageUrl": "https://s3.amazonaws.com/alexanttdatabucket/Images/AI_720x480.jpg", "largeImageUrl": "https://s3.amazonaws.com/alexanttdatabucket/Images/AI_1200x800.jpg" } }, 'reprompt': { 'outputSpeech': { 'type': 'PlainText', 'text': reprompt_text } }, 'shouldEndSession': should_end_session }
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():
session_attributes = {} card_title = "Welcome" speech_output = "Welcome. Here you can see images. " \ "Tell me what is the product you're interested in, telling me: " \ "Show milk" # 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 = "Tell me what is the product you're interested in, telling me: " \ "Show milk" 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 = "Thank you for your interest in our product. Bye bye." # 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)) def create_favorite_color_attributes(favorite_color):
return {"favoriteColor": favorite_color}
def mostra_immagine(intent, session):
card_title = intent['name'] session_attributes = {} should_end_session = False if 'product' in intent['slots']: selected_product = intent['slots']['product']['value'] speech_output = "Now I show you images related to the selected product" + \ selected_product reprompt_text = "Tell me what is the product you're interested in, telling me: " \ "Show milk." else: speech_output = "I don't understand. Please retry" reprompt_text = "Tell me what is the product you're interested in, telling me: " \ "Show milk" return build_response(session_attributes, build_image_response( card_title, speech_output, reprompt_text, should_end_session))
def get_color_from_session(intent, session):
session_attributes = {} reprompt_text = None if session.get('attributes', {}) and "favoriteColor" in session.get('attributes', {}): favorite_color = session['attributes']['favoriteColor'] speech_output = "Your favorite color is " + favorite_color + \ ". Goodbye." should_end_session = True else: speech_output = "I'm not sure what your favorite color is. " \ "You can say, my favorite color is red." should_end_session = False # Setting reprompt_text to None signifies that we do not want to reprompt # the user. If the user does not respond or says something that is not # understood, the session will end. return build_response(session_attributes, build_speechlet_response( intent['name'], speech_output, reprompt_text, should_end_session))
# --------------- Events ------------------
def on_session_started(session_started_request, session):
print("on_session_started requestId=" + session_started_request['requestId'] + ", sessionId=" + session['sessionId'])
def on_launch(launch_request, session):
print("on_launch requestId=" + launch_request['requestId'] + ", sessionId=" + session['sessionId']) # Dispatch to your skill's launch return get_welcome_response()
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 if intent_name == "ShowImageIntent": return mostra_immagine(intent, session) elif intent_name == "WhatsMyColorIntent": return get_color_from_session(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 ------------------
def lambda_handler(event, context):
print("event.session.application.applicationId=" + event['session']['application']['applicationId'])
if event['session']['new']: on_session_started({'requestId': event['request']['requestId']}, event['session']) if event['request']['type'] == "LaunchRequest": return on_launch(event['request'], event['session']) elif event['request']['type'] == "IntentRequest": return on_intent(event['request'], event['session']) elif event['request']['type'] == "SessionEndedRequest": return on_session_ended(event['request'], event['session'])