Here's the sample code we'll be using to start our project. It's written in Python 3.6 and based off of the blueprint found in Alexa.
""" 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 """ import urllib.request POKEDEX_LOC = 'https://s3.amazonaws.com/alexa-skills-pokemon-workshop/pokemonList' POKEMON_SLOT_NAME = 'PokedexNumber' # --------------- 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_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 = "Welcome to the Echomon skill. " # 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. #TODO: Give a welcome response. reprompt_text = "Please try asking for a pokemon's name by, " return build_response(session_attributes, build_speechlet_response( card_title, speech_output, reprompt_text, should_end_session)) def get_fallback_response(): card_title = "Sorry" speech_output = "I haven't heard of that Pokemon before. Try again." return build_response({}, build_speechlet_response) def handle_session_end_request(): card_title = "Session Ended" speech_output = "Thank you for trying the Pokemon Info skill. " \ "Have a nice day! " # 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 get_pokemon_name(intent, session): session_attributes = {} reprompt_text = None #TODO: Get the pokemon's name return build_response(session_attributes, build_speechlet_response( intent['name'], speech_output, reprompt_text, should_end_session)) # --------------- Events ------------------ 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() 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'] # TODO: Dispatch to your skill's intent handlers if intent_name == "": return get_pokemon_name(intent, session) elif intent_name == "AMAZON.FallbackIntent": return get_fallback_response() 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") # --------------- Main handler ------------------ 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. """ 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['request']['type'] == "LaunchRequest": return on_launch(event['request'], event['session']) elif event['request']['type'] == "IntentRequest": return on_intent(event['request'], event['session']) # --------------- Read Pokemon Data ---------------------- POKEMON_DICT = {} POKEMON_PARSED = False def parse_pokemon(): """ Parse pokemon information from the S3 store """ with urllib.request.urlopen(POKEDEX_LOC) as pokedex: for pokemon in pokedex.readlines(): index, name = pokemon.decode('utf-8')[:-1].split(',') POKEMON_DICT[index] = name POKEMON_PARSED = True def get_pokemon(index): """ Given a pokemon index, return the pokemon name. """ if not POKEMON_PARSED: parse_pokemon() return POKEMON_DICT[str(index)]