SlideShare uma empresa Scribd logo
1 de 72
Baixar para ler offline
Alexa & ColdBox APIs
Gavin Pickin
Into the Box 2018
What do you need to start building for Alexa?
● Amazon Developer Account
● AWS Services Account
● Look at Github Alexa Repos
Create a AWS Developer Account
https://developer.amazon.com/alexa
Login with your Amazon login and then register
Create a AWS Developer Account
App Distribution Agreement
Create a AWS Developer Account
Payments
Setup your AWS Services Account
● https://aws.amazon.com/
● Does require a credit card
● Does have a free tier which is great
Nothing we will be doing here, will incur a cost.
Alexa Github Repos
● https://github.com/alexa
● Lots of great examples and templates.
● The Repos have a lot of the getting started information in them
Starting Our First Alexa Skill
● Login at https://aws.amazon.com/ with your AWS Services account
● We are going to start with Lambda, so go to Services and click on Lambda
under the Compute heading.
● Click ‘Create a function’ on the Lambda page.
Lambda - Node
Yes Brad, we’re going to look at writing a
Lambda in NodeJS.
Select a Blueprint
Pick the Alexa-skill-kit-sdk-factskill
How to get your Skill ID
Later when we have created our Alexa Skill, if you pick a Lambda endpoint, you
will see this.
Copy this and come back here to update your Skill ID
Configure the Alexa Skill in Developer Portal
Create the new Skill
Choose a model to add to your Skill
Add Invocation Name
But I’m a programmer
● You don’t like using a mouse?
● Can’t handle typing and clicking and waiting?
Don’t fret, there is a JSON editor, so we can cheat a little.
Lets get some JSON from the Alexa Github repos
https://github.com/alexa/skill-sample-nodejs-fact
JSON Editor
Simple JSON
Very Clear Formatting
Quicker than the User Interface
BUT You have to know the format
Now our Intents are loaded
Check out all of our Utterances
Lets Skip the interfaces - Advanced
Selecting our Endpoint
Select the Lambda we already created
Copy the Amazon Resource Name ARN from AWS services
Enter the ARN in your Default Region
Build your Model
Click the Build Model option
from the checklist
When you click on a step now
you will see something like this
Build Successful
Once the build is successful, you’ll see a notification like this one pop up.
Testing your Skill
Adding Slots
Adding slots into your utterances really give your Alexa App power.
You can pass information into your endpoint with these slots, and customize the
experience.
Alexa ask Forgebox how many hits does {kiwiSays} have?
These are similar arguments to your function.
Note: there were some difficulties with slots.
Slot Requirements and Confirmation
For a given Slot, you can set it as required. This allows you and Alexa to ask for
this slot directly to ensure you have all the data you need.
You can also confirm a slot. You can tell Alexa what to ask, what to expect in
response and how to confirm.
Alexa: What package would you like me to lookup?
You: KiwiSays or Lookup KiwiSays
Alexa: Ok, so you want me to lookup KiwiSays?
You: Yes
Issues with Slots
Alexa does not automatically process the Dialog for you.
You get a list of the slots, but they are not always defined. An error in your
Lambda can break your skill.
You should be able to return a Dialog.delegate and then Alexa will process until
complete… but I had issues with this.
Building a REST API to talk to
● We will be looking at ColdBox REST today
● Its easy to add onto existing ColdBox Apps
● Or start a new app with our AdvancedScript or REST skeleton
● REST Template does most of the REST boilerplate for you
● You can just do your thing
Scaffold our App
CommandBox has a lot of create commands, today we’ll use the
ColdBox Create App command.
We could specify a skeleton to use when creating the ColdBox app so we can hit
the ground running. We could use the REST Skeleton which you can find out more
about here: https://www.forgebox.io/view/cbtemplate-rest
You could make your own template and use that from ColdBox Create App ( even
if it wasn’t coldbox )
The default is advancedScript - which is fine for this example.
Run our CommandBox command
Coldbox create app name=myAPI skeleton=rest
This will download the REST template, and do a box install.
Start commandbox and you’ll see your first API response.
http://127.0.0.1:55944/
{
"data": "Welcome to my ColdBox RESTFul Service",
"error": false,
"messages": []
}
Lets create a new Handler for Forgebox
component extends="handlers.BaseHandler"{
function downloads( event, rc, prc ){
event.paramValue( "slug", "kiwisays" );
var result = "";
cfhttp( method="GET", charset="utf-8",
url="https://www.forgebox.io/api/v1/entry/#rc.slug#", result="result" );
var jsonResponse = deserializeJSON( result.filecontent );
if( jsonResponse.error ){
prc.response.setError( true );
prc.response.addMessage( "Error finding Slug" );
} else {
prc.response.setData( jsonResponse.data.hits );
}
}
Lets create a RESTful Route
Add this to your routes file: /config/routes.cfm
addRoute(
pattern = "/forgebox/entry/:slug/:action",
handler = "forgebox"
);
Reinit App and Test the endpoint
Reinit the app
http://127.0.0.1:55944/?fwreinit=1
Test the endpoint
http://127.0.0.1:55944/forgebox/entry/kiwisays/downloads
{
"data": 1432,
"error": false,
"messages": []
}
Why are we using a API to call an API
Short Answer: NODE
Using a Lambda, you are using Node.
Node doesn’t support http and https requests natively, so you install a module
for that.
HTTPS is a great tool, BUT if you want to hit an HTTPS site, you have to
manually install the SSL cert. So you can load files on the fly to make the call…
or you can call a ColdFusion API and let cfhttp do it for you :)
Node isn’t always better
That comment made Brad happy
Create a Lambda for API Call
Here is a Gist of a lambda function
https://gist.github.com/gpickin/4a57d996df15079abb7b7136e25bf414
Parts of the Lambda - Handlers
Handlers work just like an MVC framework. This index.js file gets the call, and
decides how to return to it.
const handlers = {
'LaunchRequest': function () {
this.emit('forgeboxDownloads');
},
Parts of the Lambda - ForgeboxIntent & Slots
Slots are available in a struct.
Warning - if that slot was not provided, an undefined will force the lambda to return
an null response. BOOM
'forgeboxDownloads': function () {
let slug = "kiwisays";
slug = this.event.request.intent.slots.slug.value;
Parts of the Lambda - Setup the API Call
// npm install http in CLI and then require it
const http = require('http');
// Setup the options for the HTTP request
const options = {
hostname: 'edf6f5f8.ngrok.io',
port: 80,
path: '/forgebox/entry/' + slug + '/downloads',
method: 'GET'
};
Parts of the Lambda - Make API Call
// Store this for inside of closure
const $this = this;
// Make the request
const req = http.request(options, (res) => {
res.setEncoding('utf8');
res.on('data', function (chunk) {
//console.log('BODY: ' + chunk);
const bodyString = chunk;
const bodyObject = JSON.parse( chunk );
// process the json
});
});
Parts of the Lambda - Process the API Response
if( bodyObject.error ){
const speechOutput = 'Error loading data';
$this.response.cardRenderer(SKILL_NAME, speechOutput);
$this.response.speak(speechOutput);
$this.emit(':responseReady');
} else {
const speechOutput = GET_FACT_MESSAGE + 'The package with the slug ' +
slug + ' has ' + bodyObject.data + ' hits';
$this.response.cardRenderer(SKILL_NAME, 'The package with the slug ' + slug + '
has ' + bodyObject.data + ' hits');
$this.response.speak(speechOutput);
$this.emit(':responseReady');
}
Parts of the Lamba - Catch API Errror
req.on('error', (e) => {
console.error(e);
const speechOutput = 'Error loading data';
$this.response.cardRenderer(SKILL_NAME, speechOutput);
$this.response.speak(speechOutput);
$this.emit(':responseReady');
});
Parts of a Lambda - Close the Connection
// Node gives you the tools, but you have to do everything
yourself… including close the request
req.end();
Let’s Test it with Alexa
ask gavin the amazing how many hits does commandbox-migrations have
● Ask - prefix to Invocation name
● Gavin the amazing - the Invocation name
● How many hits does {slug} have - Utterance to call forgeboxIntent
● Commandbox-migrations - this is the slot called slug
This will call our Lambda function
Let’s Test it with Alexa
Why are you using Node??
Brad No like Node :)
Alexa SDK
There are SDKs for NodeJS, Java etc, but not CFML…. But that’s ok.
They have a JSON version you can setup with an HTTPS endpoint.
Thanks to Steve Drucker’s repo, we had a solid starting point
https://github.com/sdruckerfig/CF-Alexa
Note: I had to make a lot of changes to get it to work.
Alexa.cfc
This is the base object, with the core functions you need to interact with Alexa
Included Functions:
● say()
● setTitle()
● setText()
● setImage()
● And many more.
To use this, you extend Alexa.cfc in your Service ( AlexaBot in this example )
AlexaBot.cfc
This is your template for your service.
Define your Intents
Create functions to handle your incoming Intents
Functions respond to Alexa with JSON returns
Alexa.cfc handles the DSL to do the hard work for you.
AlexaBot.cfc - Update your Intents
First edit your intents
this.intents = {
"testAPI" = "testAPI",
"makeMeAMeme" = "makeMeAMeme",
"AMAZON.HelpIntent" = "onHelp",
"AMAZON.CancelIntent" = "onStop",
"AMAZON.StopIntent" = "onStop",
"AMAZON.NoIntent" = "onStop",
"AMAZON.YesIntent" = "onContinue"
}
AlexaBot.cfc - Add function to respond
Use the Alexa DSL to respond to Alexa
Your response can set the Alexa CARD with title & text and/or Speech
public void function testAPI( ){
say( "Coldbox is ICE cold" );
setTitle( "How cool is Coldbox?" );
setText( "Coldbox is ICE cold" );
}
AlexaBot.cfc - Use slots as arguments
public void function makeMeAMeme( memeTemplate="", lineOne="", lineTwo=""
){
if( memeTemplate == "" ){
say( "What meme template would you like?" );
}
}
Setup the API Route for Alexa
Add to your routes file
{
pattern = "/alexa",
handler = "Main",
action = { GET = "alexa", POST = "alexa" }
},
Setup the API Handler for Alexa
function alexa( event, rc, prc ){
var content = getHttpRequestData().content;
var alexaBot = new models.Alexa.alexabot(); // or use wirebox with
getInstance()
prc.response.setData( alexaBot.get( content ) );
prc.response.setRaw( true ); // New to REST response model
}
Test the API Endpoint
Return to the Alexa Developer Tools
You: ‘ask gavin the cool how cold is coldbox’
Alexa: ColdBox is ICE cold
You: ‘ask gavin the cool make me a meme’
Alexa: Meme Generated
Visit to view meme: http://127.0.0.1:55944/models/Alexa/index.html
Check out the Meme
What’s next?
I hope this was a good introduction to using Alexa, and ColdBox APIs
● We have a lot more information on REST in our REST Roadshow we
recorded in 2016
https://www.ortussolutions.com/events/restful-roadshow-2016
● Check out our blog on Ortussolutions.com
● We offer training online and in person
● We have Brad the monkey manning slack 34 hours a day.
ColdBox REST is simple, lots more support in ColdBox 5, and all the ForgeBox
modules at your disposal
Thanks
I hope you enjoyed the session.
Visit www.gpickin.com to see my follow up blog post with links to code and slides.
Don’t forget to come see my ContentBox + Docker - Friday at 3:25pm
Got questions? Find me at Happy Box right after this session and the live panel
podcast recording.

Mais conteúdo relacionado

Mais procurados

Developing Skills for Amazon Echo
Developing Skills for Amazon EchoDeveloping Skills for Amazon Echo
Developing Skills for Amazon EchoQAware GmbH
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkDaniel Spector
 
Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Yevgeniy Brikman
 
Ruby on rails integration testing with minitest and capybara
Ruby on rails integration testing with minitest and capybaraRuby on rails integration testing with minitest and capybara
Ruby on rails integration testing with minitest and capybaraAndolasoft Inc
 
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)Joshua Warren
 
Serverless in production, an experience report (FullStack 2018)
Serverless in production, an experience report (FullStack 2018)Serverless in production, an experience report (FullStack 2018)
Serverless in production, an experience report (FullStack 2018)Yan Cui
 
AngularJS Unit Testing
AngularJS Unit TestingAngularJS Unit Testing
AngularJS Unit TestingPrince Norin
 
Angular 2 overview in 60 minutes
Angular 2 overview in 60 minutesAngular 2 overview in 60 minutes
Angular 2 overview in 60 minutesLoiane Groner
 
Serverless in Production, an experience report (AWS UG South Wales)
Serverless in Production, an experience report (AWS UG South Wales)Serverless in Production, an experience report (AWS UG South Wales)
Serverless in Production, an experience report (AWS UG South Wales)Yan Cui
 
React Native: Introduction
React Native: IntroductionReact Native: Introduction
React Native: IntroductionInnerFood
 
vJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemvJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemAndres Almiray
 
AngularJS Unit Test
AngularJS Unit TestAngularJS Unit Test
AngularJS Unit TestChiew Carol
 
Unit Testing for Great Justice
Unit Testing for Great JusticeUnit Testing for Great Justice
Unit Testing for Great JusticeDomenic Denicola
 
Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Chris Tankersley
 
Building a p2 update site using Buckminster
Building a p2 update site using BuckminsterBuilding a p2 update site using Buckminster
Building a p2 update site using Buckminsterguest5e2b6b
 
Serverless Orchestration with AWS Step Functions
Serverless Orchestration with AWS Step FunctionsServerless Orchestration with AWS Step Functions
Serverless Orchestration with AWS Step FunctionsAmazon Web Services
 
Dependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony ContainerDependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony ContainerDiego Lewin
 
Rapid scaling in_the_cloud_with_puppet
Rapid scaling in_the_cloud_with_puppetRapid scaling in_the_cloud_with_puppet
Rapid scaling in_the_cloud_with_puppetCarl Caum
 

Mais procurados (20)

Developing Skills for Amazon Echo
Developing Skills for Amazon EchoDeveloping Skills for Amazon Echo
Developing Skills for Amazon Echo
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end Framework
 
Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)
 
Ruby on rails integration testing with minitest and capybara
Ruby on rails integration testing with minitest and capybaraRuby on rails integration testing with minitest and capybara
Ruby on rails integration testing with minitest and capybara
 
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)
 
Serverless in production, an experience report (FullStack 2018)
Serverless in production, an experience report (FullStack 2018)Serverless in production, an experience report (FullStack 2018)
Serverless in production, an experience report (FullStack 2018)
 
AngularJS Unit Testing
AngularJS Unit TestingAngularJS Unit Testing
AngularJS Unit Testing
 
Angular 2 overview in 60 minutes
Angular 2 overview in 60 minutesAngular 2 overview in 60 minutes
Angular 2 overview in 60 minutes
 
Serverless in Production, an experience report (AWS UG South Wales)
Serverless in Production, an experience report (AWS UG South Wales)Serverless in Production, an experience report (AWS UG South Wales)
Serverless in Production, an experience report (AWS UG South Wales)
 
React Native: Introduction
React Native: IntroductionReact Native: Introduction
React Native: Introduction
 
vJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemvJUG - The JavaFX Ecosystem
vJUG - The JavaFX Ecosystem
 
AngularJS Unit Test
AngularJS Unit TestAngularJS Unit Test
AngularJS Unit Test
 
Unit Testing for Great Justice
Unit Testing for Great JusticeUnit Testing for Great Justice
Unit Testing for Great Justice
 
Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)
 
Building a p2 update site using Buckminster
Building a p2 update site using BuckminsterBuilding a p2 update site using Buckminster
Building a p2 update site using Buckminster
 
Serverless Orchestration with AWS Step Functions
Serverless Orchestration with AWS Step FunctionsServerless Orchestration with AWS Step Functions
Serverless Orchestration with AWS Step Functions
 
Dependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony ContainerDependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony Container
 
Rapid scaling in_the_cloud_with_puppet
Rapid scaling in_the_cloud_with_puppetRapid scaling in_the_cloud_with_puppet
Rapid scaling in_the_cloud_with_puppet
 
2 Asp Dot Net Ajax Extensions
2 Asp Dot Net Ajax Extensions2 Asp Dot Net Ajax Extensions
2 Asp Dot Net Ajax Extensions
 
Ember - introduction
Ember - introductionEmber - introduction
Ember - introduction
 

Semelhante a Into The Box | Alexa and ColdBox Api's

Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
 Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbsAWS Chicago
 
Building Serverless Applications with AWS Chalice
Building Serverless Applications with AWS ChaliceBuilding Serverless Applications with AWS Chalice
Building Serverless Applications with AWS ChaliceAmazon Web Services
 
MongoDB World 2018: Tutorial - Got Dibs? Building a Real-Time Bidding App wit...
MongoDB World 2018: Tutorial - Got Dibs? Building a Real-Time Bidding App wit...MongoDB World 2018: Tutorial - Got Dibs? Building a Real-Time Bidding App wit...
MongoDB World 2018: Tutorial - Got Dibs? Building a Real-Time Bidding App wit...MongoDB
 
Migrate your Existing Express Apps to AWS Lambda and Amazon API Gateway
Migrate your Existing Express Apps to AWS Lambda and Amazon API GatewayMigrate your Existing Express Apps to AWS Lambda and Amazon API Gateway
Migrate your Existing Express Apps to AWS Lambda and Amazon API GatewayAmazon Web Services
 
Itb 2021 - Bulding Quick APIs by Gavin Pickin
Itb 2021 - Bulding Quick APIs by Gavin PickinItb 2021 - Bulding Quick APIs by Gavin Pickin
Itb 2021 - Bulding Quick APIs by Gavin PickinGavin Pickin
 
Releasing Software Quickly and Reliably With AWS CodePipeline by Mark Mansour...
Releasing Software Quickly and Reliably With AWS CodePipeline by Mark Mansour...Releasing Software Quickly and Reliably With AWS CodePipeline by Mark Mansour...
Releasing Software Quickly and Reliably With AWS CodePipeline by Mark Mansour...Amazon Web Services
 
Cocoapods and Most common used library in Swift
Cocoapods and Most common used library in SwiftCocoapods and Most common used library in Swift
Cocoapods and Most common used library in SwiftWan Muzaffar Wan Hashim
 
The Web on OSGi: Here's How
The Web on OSGi: Here's HowThe Web on OSGi: Here's How
The Web on OSGi: Here's Howmrdon
 
Serverless APIs with JavaScript - Matt Searle - ChocPanda
Serverless APIs with JavaScript - Matt Searle - ChocPandaServerless APIs with JavaScript - Matt Searle - ChocPanda
Serverless APIs with JavaScript - Matt Searle - ChocPandaPaul Dykes
 
Serverless GraphQL for Product Developers
Serverless GraphQL for Product DevelopersServerless GraphQL for Product Developers
Serverless GraphQL for Product DevelopersSashko Stubailo
 
Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptForziatech
 
Parse cloud code
Parse cloud codeParse cloud code
Parse cloud code維佋 唐
 
Managing the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS LambdaManaging the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS LambdaAmazon Web Services
 
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar SeriesContinuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar SeriesAmazon Web Services
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaYevgeniy Brikman
 
Continuous Integration e Delivery per (r)innovare lo sviluppo software e la g...
Continuous Integration e Delivery per (r)innovare lo sviluppo software e la g...Continuous Integration e Delivery per (r)innovare lo sviluppo software e la g...
Continuous Integration e Delivery per (r)innovare lo sviluppo software e la g...Amazon Web Services
 
Developing node-mdb: a Node.js - based clone of SimpleDB
Developing node-mdb: a Node.js - based clone of SimpleDBDeveloping node-mdb: a Node.js - based clone of SimpleDB
Developing node-mdb: a Node.js - based clone of SimpleDBRob Tweed
 
Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020Andrea Scuderi
 

Semelhante a Into The Box | Alexa and ColdBox Api's (20)

Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
 Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
 
AWS Serverless Workshop
AWS Serverless WorkshopAWS Serverless Workshop
AWS Serverless Workshop
 
Building Serverless Applications with AWS Chalice
Building Serverless Applications with AWS ChaliceBuilding Serverless Applications with AWS Chalice
Building Serverless Applications with AWS Chalice
 
MongoDB World 2018: Tutorial - Got Dibs? Building a Real-Time Bidding App wit...
MongoDB World 2018: Tutorial - Got Dibs? Building a Real-Time Bidding App wit...MongoDB World 2018: Tutorial - Got Dibs? Building a Real-Time Bidding App wit...
MongoDB World 2018: Tutorial - Got Dibs? Building a Real-Time Bidding App wit...
 
Migrate your Existing Express Apps to AWS Lambda and Amazon API Gateway
Migrate your Existing Express Apps to AWS Lambda and Amazon API GatewayMigrate your Existing Express Apps to AWS Lambda and Amazon API Gateway
Migrate your Existing Express Apps to AWS Lambda and Amazon API Gateway
 
Itb 2021 - Bulding Quick APIs by Gavin Pickin
Itb 2021 - Bulding Quick APIs by Gavin PickinItb 2021 - Bulding Quick APIs by Gavin Pickin
Itb 2021 - Bulding Quick APIs by Gavin Pickin
 
Releasing Software Quickly and Reliably With AWS CodePipeline by Mark Mansour...
Releasing Software Quickly and Reliably With AWS CodePipeline by Mark Mansour...Releasing Software Quickly and Reliably With AWS CodePipeline by Mark Mansour...
Releasing Software Quickly and Reliably With AWS CodePipeline by Mark Mansour...
 
Cocoapods and Most common used library in Swift
Cocoapods and Most common used library in SwiftCocoapods and Most common used library in Swift
Cocoapods and Most common used library in Swift
 
The Web on OSGi: Here's How
The Web on OSGi: Here's HowThe Web on OSGi: Here's How
The Web on OSGi: Here's How
 
Serverless APIs with JavaScript - Matt Searle - ChocPanda
Serverless APIs with JavaScript - Matt Searle - ChocPandaServerless APIs with JavaScript - Matt Searle - ChocPanda
Serverless APIs with JavaScript - Matt Searle - ChocPanda
 
Serverless GraphQL for Product Developers
Serverless GraphQL for Product DevelopersServerless GraphQL for Product Developers
Serverless GraphQL for Product Developers
 
Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScript
 
Parse cloud code
Parse cloud codeParse cloud code
Parse cloud code
 
Managing the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS LambdaManaging the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS Lambda
 
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar SeriesContinuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
Continuous Integration e Delivery per (r)innovare lo sviluppo software e la g...
Continuous Integration e Delivery per (r)innovare lo sviluppo software e la g...Continuous Integration e Delivery per (r)innovare lo sviluppo software e la g...
Continuous Integration e Delivery per (r)innovare lo sviluppo software e la g...
 
Developing node-mdb: a Node.js - based clone of SimpleDB
Developing node-mdb: a Node.js - based clone of SimpleDBDeveloping node-mdb: a Node.js - based clone of SimpleDB
Developing node-mdb: a Node.js - based clone of SimpleDB
 
Deep Dive on Serverless Stack
Deep Dive on Serverless StackDeep Dive on Serverless Stack
Deep Dive on Serverless Stack
 
Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020
 

Mais de Ortus Solutions, Corp

BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Secure your Secrets and Settings in ColdFusion
Secure your Secrets and Settings in ColdFusionSecure your Secrets and Settings in ColdFusion
Secure your Secrets and Settings in ColdFusionOrtus Solutions, Corp
 
Daniel Garcia ContentBox: CFSummit 2023
Daniel Garcia ContentBox: CFSummit 2023Daniel Garcia ContentBox: CFSummit 2023
Daniel Garcia ContentBox: CFSummit 2023Ortus Solutions, Corp
 
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdfITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdfOrtus Solutions, Corp
 
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdfITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdfOrtus Solutions, Corp
 
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdfITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdfOrtus Solutions, Corp
 
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdfITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdfOrtus Solutions, Corp
 
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfOrtus Solutions, Corp
 
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdfITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdfOrtus Solutions, Corp
 
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdfITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdfOrtus Solutions, Corp
 
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdfITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdfOrtus Solutions, Corp
 
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdfITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdfOrtus Solutions, Corp
 
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdfITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdfOrtus Solutions, Corp
 
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdfITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdfOrtus Solutions, Corp
 
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdfITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdfOrtus Solutions, Corp
 
ITB2023 Developing for Performance - Denard Springle.pdf
ITB2023 Developing for Performance - Denard Springle.pdfITB2023 Developing for Performance - Denard Springle.pdf
ITB2023 Developing for Performance - Denard Springle.pdfOrtus Solutions, Corp
 

Mais de Ortus Solutions, Corp (20)

BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Ortus Government.pdf
Ortus Government.pdfOrtus Government.pdf
Ortus Government.pdf
 
Luis Majano The Battlefield ORM
Luis Majano The Battlefield ORMLuis Majano The Battlefield ORM
Luis Majano The Battlefield ORM
 
Brad Wood - CommandBox CLI
Brad Wood - CommandBox CLI Brad Wood - CommandBox CLI
Brad Wood - CommandBox CLI
 
Secure your Secrets and Settings in ColdFusion
Secure your Secrets and Settings in ColdFusionSecure your Secrets and Settings in ColdFusion
Secure your Secrets and Settings in ColdFusion
 
Daniel Garcia ContentBox: CFSummit 2023
Daniel Garcia ContentBox: CFSummit 2023Daniel Garcia ContentBox: CFSummit 2023
Daniel Garcia ContentBox: CFSummit 2023
 
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdfITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
 
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdfITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
 
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdfITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
 
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdfITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
 
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
 
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdfITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
 
ITB_2023_CBWire_v3_Grant_Copley.pdf
ITB_2023_CBWire_v3_Grant_Copley.pdfITB_2023_CBWire_v3_Grant_Copley.pdf
ITB_2023_CBWire_v3_Grant_Copley.pdf
 
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdfITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
 
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdfITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
 
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdfITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
 
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdfITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
 
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdfITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
 
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdfITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
 
ITB2023 Developing for Performance - Denard Springle.pdf
ITB2023 Developing for Performance - Denard Springle.pdfITB2023 Developing for Performance - Denard Springle.pdf
ITB2023 Developing for Performance - Denard Springle.pdf
 

Último

MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfLivetecs LLC
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 

Último (20)

MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdf
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 

Into The Box | Alexa and ColdBox Api's

  • 1. Alexa & ColdBox APIs Gavin Pickin Into the Box 2018
  • 2. What do you need to start building for Alexa? ● Amazon Developer Account ● AWS Services Account ● Look at Github Alexa Repos
  • 3. Create a AWS Developer Account https://developer.amazon.com/alexa Login with your Amazon login and then register
  • 4. Create a AWS Developer Account App Distribution Agreement
  • 5. Create a AWS Developer Account Payments
  • 6.
  • 7. Setup your AWS Services Account ● https://aws.amazon.com/ ● Does require a credit card ● Does have a free tier which is great Nothing we will be doing here, will incur a cost.
  • 8. Alexa Github Repos ● https://github.com/alexa ● Lots of great examples and templates. ● The Repos have a lot of the getting started information in them
  • 9. Starting Our First Alexa Skill ● Login at https://aws.amazon.com/ with your AWS Services account ● We are going to start with Lambda, so go to Services and click on Lambda under the Compute heading. ● Click ‘Create a function’ on the Lambda page.
  • 10.
  • 11. Lambda - Node Yes Brad, we’re going to look at writing a Lambda in NodeJS.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18. How to get your Skill ID Later when we have created our Alexa Skill, if you pick a Lambda endpoint, you will see this. Copy this and come back here to update your Skill ID
  • 19. Configure the Alexa Skill in Developer Portal
  • 20. Create the new Skill
  • 21. Choose a model to add to your Skill
  • 22.
  • 24.
  • 25. But I’m a programmer ● You don’t like using a mouse? ● Can’t handle typing and clicking and waiting? Don’t fret, there is a JSON editor, so we can cheat a little. Lets get some JSON from the Alexa Github repos https://github.com/alexa/skill-sample-nodejs-fact
  • 26. JSON Editor Simple JSON Very Clear Formatting Quicker than the User Interface BUT You have to know the format
  • 27. Now our Intents are loaded
  • 28. Check out all of our Utterances
  • 29. Lets Skip the interfaces - Advanced
  • 31. Select the Lambda we already created Copy the Amazon Resource Name ARN from AWS services
  • 32. Enter the ARN in your Default Region
  • 33. Build your Model Click the Build Model option from the checklist When you click on a step now you will see something like this
  • 34. Build Successful Once the build is successful, you’ll see a notification like this one pop up.
  • 36. Adding Slots Adding slots into your utterances really give your Alexa App power. You can pass information into your endpoint with these slots, and customize the experience. Alexa ask Forgebox how many hits does {kiwiSays} have? These are similar arguments to your function. Note: there were some difficulties with slots.
  • 37.
  • 38. Slot Requirements and Confirmation For a given Slot, you can set it as required. This allows you and Alexa to ask for this slot directly to ensure you have all the data you need. You can also confirm a slot. You can tell Alexa what to ask, what to expect in response and how to confirm. Alexa: What package would you like me to lookup? You: KiwiSays or Lookup KiwiSays Alexa: Ok, so you want me to lookup KiwiSays? You: Yes
  • 39.
  • 40.
  • 41. Issues with Slots Alexa does not automatically process the Dialog for you. You get a list of the slots, but they are not always defined. An error in your Lambda can break your skill. You should be able to return a Dialog.delegate and then Alexa will process until complete… but I had issues with this.
  • 42. Building a REST API to talk to ● We will be looking at ColdBox REST today ● Its easy to add onto existing ColdBox Apps ● Or start a new app with our AdvancedScript or REST skeleton ● REST Template does most of the REST boilerplate for you ● You can just do your thing
  • 43. Scaffold our App CommandBox has a lot of create commands, today we’ll use the ColdBox Create App command. We could specify a skeleton to use when creating the ColdBox app so we can hit the ground running. We could use the REST Skeleton which you can find out more about here: https://www.forgebox.io/view/cbtemplate-rest You could make your own template and use that from ColdBox Create App ( even if it wasn’t coldbox ) The default is advancedScript - which is fine for this example.
  • 44. Run our CommandBox command Coldbox create app name=myAPI skeleton=rest This will download the REST template, and do a box install. Start commandbox and you’ll see your first API response. http://127.0.0.1:55944/ { "data": "Welcome to my ColdBox RESTFul Service", "error": false, "messages": [] }
  • 45. Lets create a new Handler for Forgebox component extends="handlers.BaseHandler"{ function downloads( event, rc, prc ){ event.paramValue( "slug", "kiwisays" ); var result = ""; cfhttp( method="GET", charset="utf-8", url="https://www.forgebox.io/api/v1/entry/#rc.slug#", result="result" ); var jsonResponse = deserializeJSON( result.filecontent ); if( jsonResponse.error ){ prc.response.setError( true ); prc.response.addMessage( "Error finding Slug" ); } else { prc.response.setData( jsonResponse.data.hits ); } }
  • 46. Lets create a RESTful Route Add this to your routes file: /config/routes.cfm addRoute( pattern = "/forgebox/entry/:slug/:action", handler = "forgebox" );
  • 47. Reinit App and Test the endpoint Reinit the app http://127.0.0.1:55944/?fwreinit=1 Test the endpoint http://127.0.0.1:55944/forgebox/entry/kiwisays/downloads { "data": 1432, "error": false, "messages": [] }
  • 48. Why are we using a API to call an API Short Answer: NODE Using a Lambda, you are using Node. Node doesn’t support http and https requests natively, so you install a module for that. HTTPS is a great tool, BUT if you want to hit an HTTPS site, you have to manually install the SSL cert. So you can load files on the fly to make the call… or you can call a ColdFusion API and let cfhttp do it for you :)
  • 49. Node isn’t always better That comment made Brad happy
  • 50. Create a Lambda for API Call Here is a Gist of a lambda function https://gist.github.com/gpickin/4a57d996df15079abb7b7136e25bf414
  • 51. Parts of the Lambda - Handlers Handlers work just like an MVC framework. This index.js file gets the call, and decides how to return to it. const handlers = { 'LaunchRequest': function () { this.emit('forgeboxDownloads'); },
  • 52. Parts of the Lambda - ForgeboxIntent & Slots Slots are available in a struct. Warning - if that slot was not provided, an undefined will force the lambda to return an null response. BOOM 'forgeboxDownloads': function () { let slug = "kiwisays"; slug = this.event.request.intent.slots.slug.value;
  • 53. Parts of the Lambda - Setup the API Call // npm install http in CLI and then require it const http = require('http'); // Setup the options for the HTTP request const options = { hostname: 'edf6f5f8.ngrok.io', port: 80, path: '/forgebox/entry/' + slug + '/downloads', method: 'GET' };
  • 54. Parts of the Lambda - Make API Call // Store this for inside of closure const $this = this; // Make the request const req = http.request(options, (res) => { res.setEncoding('utf8'); res.on('data', function (chunk) { //console.log('BODY: ' + chunk); const bodyString = chunk; const bodyObject = JSON.parse( chunk ); // process the json }); });
  • 55. Parts of the Lambda - Process the API Response if( bodyObject.error ){ const speechOutput = 'Error loading data'; $this.response.cardRenderer(SKILL_NAME, speechOutput); $this.response.speak(speechOutput); $this.emit(':responseReady'); } else { const speechOutput = GET_FACT_MESSAGE + 'The package with the slug ' + slug + ' has ' + bodyObject.data + ' hits'; $this.response.cardRenderer(SKILL_NAME, 'The package with the slug ' + slug + ' has ' + bodyObject.data + ' hits'); $this.response.speak(speechOutput); $this.emit(':responseReady'); }
  • 56. Parts of the Lamba - Catch API Errror req.on('error', (e) => { console.error(e); const speechOutput = 'Error loading data'; $this.response.cardRenderer(SKILL_NAME, speechOutput); $this.response.speak(speechOutput); $this.emit(':responseReady'); });
  • 57. Parts of a Lambda - Close the Connection // Node gives you the tools, but you have to do everything yourself… including close the request req.end();
  • 58. Let’s Test it with Alexa ask gavin the amazing how many hits does commandbox-migrations have ● Ask - prefix to Invocation name ● Gavin the amazing - the Invocation name ● How many hits does {slug} have - Utterance to call forgeboxIntent ● Commandbox-migrations - this is the slot called slug This will call our Lambda function
  • 59. Let’s Test it with Alexa
  • 60. Why are you using Node?? Brad No like Node :)
  • 61. Alexa SDK There are SDKs for NodeJS, Java etc, but not CFML…. But that’s ok. They have a JSON version you can setup with an HTTPS endpoint. Thanks to Steve Drucker’s repo, we had a solid starting point https://github.com/sdruckerfig/CF-Alexa Note: I had to make a lot of changes to get it to work.
  • 62. Alexa.cfc This is the base object, with the core functions you need to interact with Alexa Included Functions: ● say() ● setTitle() ● setText() ● setImage() ● And many more. To use this, you extend Alexa.cfc in your Service ( AlexaBot in this example )
  • 63. AlexaBot.cfc This is your template for your service. Define your Intents Create functions to handle your incoming Intents Functions respond to Alexa with JSON returns Alexa.cfc handles the DSL to do the hard work for you.
  • 64. AlexaBot.cfc - Update your Intents First edit your intents this.intents = { "testAPI" = "testAPI", "makeMeAMeme" = "makeMeAMeme", "AMAZON.HelpIntent" = "onHelp", "AMAZON.CancelIntent" = "onStop", "AMAZON.StopIntent" = "onStop", "AMAZON.NoIntent" = "onStop", "AMAZON.YesIntent" = "onContinue" }
  • 65. AlexaBot.cfc - Add function to respond Use the Alexa DSL to respond to Alexa Your response can set the Alexa CARD with title & text and/or Speech public void function testAPI( ){ say( "Coldbox is ICE cold" ); setTitle( "How cool is Coldbox?" ); setText( "Coldbox is ICE cold" ); }
  • 66. AlexaBot.cfc - Use slots as arguments public void function makeMeAMeme( memeTemplate="", lineOne="", lineTwo="" ){ if( memeTemplate == "" ){ say( "What meme template would you like?" ); } }
  • 67. Setup the API Route for Alexa Add to your routes file { pattern = "/alexa", handler = "Main", action = { GET = "alexa", POST = "alexa" } },
  • 68. Setup the API Handler for Alexa function alexa( event, rc, prc ){ var content = getHttpRequestData().content; var alexaBot = new models.Alexa.alexabot(); // or use wirebox with getInstance() prc.response.setData( alexaBot.get( content ) ); prc.response.setRaw( true ); // New to REST response model }
  • 69. Test the API Endpoint Return to the Alexa Developer Tools You: ‘ask gavin the cool how cold is coldbox’ Alexa: ColdBox is ICE cold You: ‘ask gavin the cool make me a meme’ Alexa: Meme Generated Visit to view meme: http://127.0.0.1:55944/models/Alexa/index.html
  • 71. What’s next? I hope this was a good introduction to using Alexa, and ColdBox APIs ● We have a lot more information on REST in our REST Roadshow we recorded in 2016 https://www.ortussolutions.com/events/restful-roadshow-2016 ● Check out our blog on Ortussolutions.com ● We offer training online and in person ● We have Brad the monkey manning slack 34 hours a day. ColdBox REST is simple, lots more support in ColdBox 5, and all the ForgeBox modules at your disposal
  • 72. Thanks I hope you enjoyed the session. Visit www.gpickin.com to see my follow up blog post with links to code and slides. Don’t forget to come see my ContentBox + Docker - Friday at 3:25pm Got questions? Find me at Happy Box right after this session and the live panel podcast recording.