Things used in this project

Hardware components:
Amazon Alexa Amazon Echo
Software apps and online services:
Dp image kit 02
Amazon Alexa Alexa Skills Kit


Alexa CodePython
Create an Alexa skill and add this as the Lambda function
from __future__ import print_function
import urllib2
import requests
import json

# --------------- 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': title,
            'content': 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 Random Joke!" \
                    "To hear a random joke, just say tell me a joke!"
    # 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 = "Please say tell me a joke."
    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 hearing random jokes!"
    # 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 randomJoke(intent, session):
    card_title = intent['name']
    session_attributes = {}
    should_end_session = False
        url = ""
        jokeJSON = requests.get(url)
        jokeJSON = jokeJSON.json()
        joke = jokeJSON["joke"]
        speech_output = str(joke)
        reprompt_text =  "Hope you laughed!"
        should_end_session = True
        return build_response (session_attributes, build_speechlet_response(card_title, speech_output, reprompt_text, should_end_session))
        speech_output = "Oops! Please try again by asking for a joke."
        reprompt_text =  "Please ask for a joke."
        should_end_session = False
        return build_response (session_attributes, build_speechlet_response(card_title, speech_output, reprompt_text, 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

    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 == "JokeIntent":
        return randomJoke(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()
        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):
    """ 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=" +

    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
    # if (event['session']['application']['applicationId'] !=
    #         "[unique-value-here]"):
    #     raise ValueError("Invalid Application ID")

    if event['session']['new']:
        on_session_started({'requestId': event['request']['requestId']},

    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'])
Interaction ModelJSON
Add this as code for interaction model
  "intents": [
    "intent": "JokeIntent",
    "slots": [
    	"intent": "AMAZON.HelpIntent"
      "intent": "AMAZON.CancelIntent"
Sample Utterancessnippets
JokeIntent Tell me a joke
JokeIntent Joke
JokeIntent Tell a joke
JokeIntent Say a joke
JokeIntent Tell me a random joke
JokeIntent Random joke
JokeIntent Tell a random joke
JokeIntent Say a random joke
AMAZON.CancelIntent Quit
AMAZON.CancelIntent Leave
AMAZON.CancelIntent Cancel
AMAZON.CancelIntent Exit
Link to Alexa Skillsnippets


14522847 1388443974517029 3677942768166903561 n
Rachit Agarwal
1 project • 0 followers


Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback


Sign up / LoginProjectsPlatformsTopicsContestsLiveAppsBetaBlog