Hardware components | ||||||
| × | 1 | ||||
Software apps and online services | ||||||
| ||||||
|
With this skill, you can ask Trademark Master to tell you if any string has already been registered.
Setup AWS Lambda- Go to the AWS Console and click on the Lambda link. Note: Ensure you are in US-east or you won't be able to use Alexa with Lambda.
- Click on the Create a Lambda Function or Get Started Now button.
- Skip the blueprint.
- Name the Lambda Function "
trademarkMaster
".
- Select the runtime as Node.js
- Create
AlexaSkill.js
andindex.js
files from the respective codes included in the code section below. Remember to change the App ID inindex.js
.
- Select the above two files and then create a zip file.
- Select Code entry type as "
Upload a .ZIP file
" and then upload the.zip
file to the Lambda.
- Keep the Handler as
index.handle
.
- Create a basic execution role and click Create.
- Leave the Advanced settings as the defaults.
- Click "
Next
" and review the settings then click "Create Function
".
- Click the "
Event Sources
" tab and select "Add event source
".
- Set the Event Source type as Alexa Skills kit and Enable it now. Click Submit.
- Copy the ARN from the top right to be used later in the Alexa Skill Setup.
- Go to the Alexa Console and click
Add a New Skill
.
- Set "
Trademark Master
" as the skill name and "trademark master"
as the invocation name, this is what is used to activate your skill. For example you would say: "Alexa, ask Trademark Master to search for Facebook".
- Select the Lambda ARN for the skill Endpoint and paste the ARN copied from above. Click Next.
- Copy the Intent Schema from the Intent Schema included in the code section below.
- Copy the Sample Utterances from the Sample Utterances included in the code section below. Click Next.
- Go back to the skill Information tab and copy the App ID. Paste the App ID into the
index.js
file for the variableAPP_ID
, then update the Lambda source zip file with this change and upload to Lambda again, this step makes sure the Lambda function only serves request from authorized source.
- You are now able to start testing your sample skill! In order to test it, try to say some of the Sample Utterances from the Examples section below.
- Your skill is now saved and once you are finished testing you can continue to publish your skill.
Here is the published link to this skill.
/**
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;
'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);
};
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
Comments