vincent wong
Published © GPL3+

Trademark Master

Trademark Master tells you if any string has already been registered.

EasyWork in progress397
Trademark Master

Things used in this project

Hardware components

Amazon Echo
Amazon Alexa Amazon Echo
×1

Software apps and online services

Alexa Skills Kit
Amazon Alexa Alexa Skills Kit
AWS Lambda
Amazon Web Services AWS Lambda

Story

Read more

Code

AlexaSkill.js

JavaScript
/**
    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.js

JavaScript
'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.json

JSON
{
  "intents": [
    {
      "intent": "GetTrademark",
      "type": "LIST_OF_TRADEMARKS"
    }
  ]
}

LIST_OF_TRADEMARKS.txt

Plain 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.txt

Plain 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

vincent wong

vincent wong

41 projects • 110 followers
Contact

Comments

Add projectSign up / Login