Things used in this project

Hardware components:
Echo
Amazon Alexa Amazon Echo
×1
Software apps and online services:
Dp image kit 02
Amazon Alexa Alexa Skills Kit
Screen%20shot%202015 07 20%20at%206.10.26%20pm
Amazon Web Services AWS Lambda

Code

AlexaSkill.jsJavaScript
/**
    Copyright 2014-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.

    Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at

        http://aws.amazon.com/apache2.0/

    or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
*/

'use strict';

function AlexaSkill(appId) {
    this._appId = appId;
}

AlexaSkill.speechOutputType = {
    PLAIN_TEXT: 'PlainText',
    SSML: 'SSML'
}

AlexaSkill.prototype.requestHandlers = {
    LaunchRequest: function (event, context, response) {
        this.eventHandlers.onLaunch.call(this, event.request, event.session, response);
    },

    IntentRequest: function (event, context, response) {
        this.eventHandlers.onIntent.call(this, event.request, event.session, response);
    },

    SessionEndedRequest: function (event, context) {
        this.eventHandlers.onSessionEnded(event.request, event.session);
        context.succeed();
    }
};

/**
 * Override any of the eventHandlers as needed
 */
AlexaSkill.prototype.eventHandlers = {
    /**
     * Called when the session starts.
     * Subclasses could have overriden this function to open any necessary resources.
     */
    onSessionStarted: function (sessionStartedRequest, session) {
    },

    /**
     * Called when the user invokes the skill without specifying what they want.
     * The subclass must override this function and provide feedback to the user.
     */
    onLaunch: function (launchRequest, session, response) {
        throw "onLaunch should be overriden by subclass";
    },

    /**
     * Called when the user specifies an intent.
     */
    onIntent: function (intentRequest, session, response) {
        var intent = intentRequest.intent,
            intentName = intentRequest.intent.name,
            intentHandler = this.intentHandlers[intentName];
        if (intentHandler) {
            console.log('dispatch intent = ' + intentName);
            intentHandler.call(this, intent, session, response);
        } else {
            throw 'Unsupported intent = ' + intentName;
        }
    },

    /**
     * Called when the user ends the session.
     * Subclasses could have overriden this function to close any open resources.
     */
    onSessionEnded: function (sessionEndedRequest, session) {
    }
};

/**
 * Subclasses should override the intentHandlers with the functions to handle specific intents.
 */
AlexaSkill.prototype.intentHandlers = {};

AlexaSkill.prototype.execute = function (event, context) {
    try {
        console.log("session applicationId: " + event.session.application.applicationId);

        // Validate that this request originated from authorized source.
        if (this._appId && event.session.application.applicationId !== this._appId) {
            console.log("The applicationIds don't match : " + event.session.application.applicationId + " and "
                + this._appId);
            throw "Invalid applicationId";
        }

        if (!event.session.attributes) {
            event.session.attributes = {};
        }

        if (event.session.new) {
            this.eventHandlers.onSessionStarted(event.request, event.session);
        }

        // Route the request to the proper handler which may have been overriden.
        var requestHandler = this.requestHandlers[event.request.type];
        requestHandler.call(this, event, context, new Response(context, event.session));
    } catch (e) {
        console.log("Unexpected exception " + e);
        context.fail(e);
    }
};

var Response = function (context, session) {
    this._context = context;
    this._session = session;
};

function createSpeechObject(optionsParam) {
    if (optionsParam && optionsParam.type === 'SSML') {
        return {
            type: optionsParam.type,
            ssml: optionsParam.speech
        };
    } else {
        return {
            type: optionsParam.type || 'PlainText',
            text: optionsParam.speech || optionsParam
        }
    }
}

Response.prototype = (function () {
    var buildSpeechletResponse = function (options) {
        var alexaResponse = {
            outputSpeech: createSpeechObject(options.output),
            shouldEndSession: options.shouldEndSession
        };
        if (options.reprompt) {
            alexaResponse.reprompt = {
                outputSpeech: createSpeechObject(options.reprompt)
            };
        }
        if (options.cardTitle && options.cardContent) {
            alexaResponse.card = {
                type: "Simple",
                title: options.cardTitle,
                content: options.cardContent
            };
        }
        var returnResult = {
                version: '1.0',
                response: alexaResponse
        };
        if (options.session && options.session.attributes) {
            returnResult.sessionAttributes = options.session.attributes;
        }
        return returnResult;
    };

    return {
        tell: function (speechOutput) {
            this._context.succeed(buildSpeechletResponse({
                session: this._session,
                output: speechOutput,
                shouldEndSession: true
            }));
        },
        tellWithCard: function (speechOutput, cardTitle, cardContent) {
            this._context.succeed(buildSpeechletResponse({
                session: this._session,
                output: speechOutput,
                cardTitle: cardTitle,
                cardContent: cardContent,
                shouldEndSession: true
            }));
        },
        ask: function (speechOutput, repromptSpeech) {
            this._context.succeed(buildSpeechletResponse({
                session: this._session,
                output: speechOutput,
                reprompt: repromptSpeech,
                shouldEndSession: false
            }));
        },
        askWithCard: function (speechOutput, repromptSpeech, cardTitle, cardContent) {
            this._context.succeed(buildSpeechletResponse({
                session: this._session,
                output: speechOutput,
                reprompt: repromptSpeech,
                cardTitle: cardTitle,
                cardContent: cardContent,
                shouldEndSession: false
            }));
        }
    };
})();

module.exports = AlexaSkill;
index.jsJavaScript
'use strict';
/**
 * App ID for the skill
 */
var APP_ID = "your app id"; 

var http = require("http");

var optionsGet = {
	host : 'www.markerapi.com', 
    port : 80,
    path : '', 
    method : 'GET'
};

var user = "wesee";
var password = "MBjgGYFxk3";

/**
 * The AlexaSkill prototype and helper functions
 */
var AlexaSkill = require('./AlexaSkill');


var TrademarkMaster = function () {
    AlexaSkill.call(this, APP_ID);
};

// Extend AlexaSkill
TrademarkMaster.prototype = Object.create(AlexaSkill.prototype);
TrademarkMaster.prototype.constructor = TrademarkMaster;

TrademarkMaster.prototype.eventHandlers.onSessionStarted = function (sessionStartedRequest, session) {
    console.log("TrademarkMaster onSessionStarted requestId: " + sessionStartedRequest.requestId
        + ", sessionId: " + session.sessionId);

    // any session init logic would go here
};

TrademarkMaster.prototype.eventHandlers.onLaunch = function (launchRequest, session, response) {
    console.log("TrademarkMaster onLaunch requestId: " + launchRequest.requestId + ", sessionId: " + session.sessionId);
	
	if (launchRequest.slots != null) {
		getTrademark(launchRequest, session, response);		
	} else {
		getWelcomeResponse(response);
	}
};

function getWelcomeResponse(response) {
    // If we wanted to initialize the session to have some attributes we could add those here.
    var speechText = 'Welcome to the Trademark Master. You can ask for a trademark search.  Please say the command, for example: <break time="2ms"/> "Ask Trademark Master to search for Facebook".';
    var repromptText = '<speak>You can ask for a trademark search.  Please say the command, for example: <break time="2ms"/> "Ask Trademark Master to search for Facebook".</speak>';

    var speechOutput = {
        speech: speechText,
        type: AlexaSkill.speechOutputType.PLAIN_TEXT
    };
    var repromptOutput = {
        speech: repromptText,
        type: AlexaSkill.speechOutputType.SSML
    };
    response.ask(speechOutput, repromptOutput);
}


TrademarkMaster.prototype.eventHandlers.onSessionEnded = function (sessionEndedRequest, session) {
    console.log("TrademarkMaster onSessionEnded requestId: " + sessionEndedRequest.requestId
        + ", sessionId: " + session.sessionId);

    // any session cleanup logic would go here
};

TrademarkMaster.prototype.intentHandlers = {
    "GetTrademark": function (intent, session, response) {
        getTrademark(intent, session, response);
    },

    "AMAZON.HelpIntent": function (intent, session, response) {
        helpTheUser(intent, session, response);
    },

    "AMAZON.StopIntent": function (intent, session, response) {
        var speechOutput = "Goodbye";
        response.tell(speechOutput);
    },

    "AMAZON.CancelIntent": function (intent, session, response) {
        var speechOutput = "Goodbye";
        response.tell(speechOutput);
    }
};


function getTrademark(intent, session, response) {
    var speechText = "",
        repromptText = "",
        speechOutput,
        repromptOutput;

	var search = intent.slots.Trademark.value;
	console.log("\n\nsearch text -> " + search);
	
	if (typeof search === "undefined") {
		speechText = 'Sorry.  Trademark Master does not understand what you want to search.  Please say the command, for example: <break time="2ms"/> "Ask Trademark Master to search for Facebook"';
		response.tell(speechText);		
	} else {
	
		optionsGet.path = "/api/v1/trademark/search/" + encodeURI(search) + "/username/" + user + "/password/" + password;
		
		// do the GET request
		var reqGet = http.request(optionsGet, function(res) {
			console.log("statusCode: ", res.statusCode);
			// uncomment it for header details
			// console.log("headers: ", res.headers);
		 
		 
			res.on('data', function(d) {
				console.info('GET result:\n');
				process.stdout.write(d);
				console.info('\n\nCall completed');

				var obj = JSON.parse(d);
				
				console.log("\n\nsearch count -> " + obj.count);
				
				if (obj.count > 0) {
					var trademark = obj.trademarks[0];
					console.log("\n\ntrademarks -> " + trademark.wordmark);
					
					speechText = "The wordmark is " + trademark.wordmark + ",  and it's description is " + trademark.description;
					
				} else {
					speechText = "Sorry.  Trademark Master does not find a match.  Please try another search.";			
				}
				
				repromptText = "<speak>" + speechText + "</speak>";
				
				speechOutput = {
					speech: speechText,
					type: AlexaSkill.speechOutputType.PLAIN_TEXT
				};
				repromptOutput = {
					speech: repromptText,
					type: AlexaSkill.speechOutputType.SSML
				};
				
				response.tell(speechText);
				
				// response.ask(speechOutput, repromptOutput);
			});
		 
		});
		 
		reqGet.end();
		reqGet.on('error', function(e) {
			console.error(e);

			speechText = "Sorry.  The Trademark Master does not response.  Please try again later.";
			repromptText = "Sorry.  The Trademark Master does not response.  Please try again later.";
			
			speechOutput = {
				speech: speechText,
				type: AlexaSkill.speechOutputType.PLAIN_TEXT
			};
			repromptOutput = {
				speech: repromptText,
				type: AlexaSkill.speechOutputType.SSML
			};
			response.tell(speechOutput, repromptOutput);

		});
	}
}


/**
 * Instructs the user on how to interact with this skill.
 */
function helpTheUser(intent, session, response) {
    var speechText = 'You can ask for a trademark search.  Please say the command, for example: <break time="2ms"/> "Ask Trademark Master to search for Facebook".';
    var repromptText = "<speak> I'm sorry I didn't understand that. You can ask for a trademark search. " +
        'Please say the command, for example: <break time="2ms"/> "Ask Trademark Master to search for Facebook" </speak>';

    var speechOutput = {
        speech: speechText,
        type: AlexaSkill.speechOutputType.PLAIN_TEXT
    };
    var repromptOutput = {
        speech: repromptText,
        type: AlexaSkill.speechOutputType.SSML
    };
    response.ask(speechOutput, repromptOutput);
}

// Create the handler that responds to the Alexa Request.
exports.handler = function (event, context) {
    var trademarkMaster = new TrademarkMaster();
    trademarkMaster.execute(event, context);
};
IntentSchema.jsonJSON
{
  "intents": [
    {
      "intent": "GetTrademark",
      "type": "LIST_OF_TRADEMARKS"
    }
  ]
}
LIST_OF_TRADEMARKS.txtPlain text
AirDrop
AirMac
AirPlay
AirPort
AirPort Express
AirPort Extreme
AirPort Time Capsule
AirPrint
AirPrint Logo
AirTunes
Aperture
Apple
Apple logo
Apple Cinema Display
Apple Music
Apple Pay
Apple Pencil
AppleScript
AppleShare
AppleTalk
Apple TV
Apple Watch
AppleWorks
App Nap
Aqua
Back to My Mac
Bonjour
Bonjour logo
Boot Camp
Carbon
CarPlay
Charcoal
Chicago
Claris
Cocoa
Cocoa Touch
ColorSync
ColorSync logo
Cover Flow
Dashcode
DVD Studio Pro
EarPods
Expose
FaceTime
FairPlay
FileVault
Final Cut
Final Cut Pro
Final Cut Studio
Finder
FireWire
FireWire symbol
Flyover
GarageBand
Geneva
Guided Access
Handoff
HyperCard
iAd WorkBench
iBook
iBooks
iCal
iChat
iFrame Logo
iLife
iMac
iMessage
iMovie
Inkwell
Instruments
iPad
iPad Air
iPad Pro
iPhone
iPhoto
iPod
iPod classic
iPod nano
iPod shuffle
iPod Socks
iPod touch
iSight
iTunes
iTunes Logo
iTunes Pass
iTunes U
iWork
Jam Pack
Keychain
Keynote
Launchpad
Lightning
LiveType
Logic
Logic Studio
Mac
Mac logo
MacApp
MacBook
SampleUtterances.txtPlain text
GetTrademark ask Trademark Master to search {Trademark}
GetTrademark open Trademark Master to search {Trademark}
GetTrademark ask Trademark Master to search for {Trademark}
GetTrademark open Trademark Master to search for {Trademark}

Credits

Replications

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

Comments

Similar projects you might like

Cryptocurrency Price Checker!
Easy
  • 161
  • 2

Full instructions

With the recent rise in cryptocurrencies, this Price Checker will keep you up to date with the most recent market fluctuations!

Opening Bell
Easy
  • 1,542
  • 23

Full instructions

A simple Alexa voice skill to retrieve the current performance of a publicly traded stock (NASDAQ, NYSE) using the company name.

Brick Bot
Easy
  • 705
  • 14

Protip

A one-stop-skill for your LEGO® needs! Alexa can tell you available sets, themes, and sub-themes and give you details based on set numbers.

Funny Quoter
Easy
  • 326
  • 8

Full instructions

This has some of the weirdest quotes up her sleeve! If you're feeling blue, and need something to cheer you up, just call on Funny Quoter.

Voice Control RGB LED
Easy
  • 7,686
  • 41

Full instructions

Control your rgb kitchen lighting with Alexa and Photon.

Daily Buzzword
Easy
  • 365
  • 8

Protip

This Amazon Alexa skill reads the definition of the Merriam-Webster Daily Buzzword from their website with an optional example usage & quiz.

Daily Buzzword

Team IrishClanger

Add projectSign up / Login