Skip to content

Instantly share code, notes, and snippets.

@snobu
Created August 5, 2019 07:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save snobu/eac303a15f158e18dff59eca2aab0eea to your computer and use it in GitHub Desktop.
Save snobu/eac303a15f158e18dff59eca2aab0eea to your computer and use it in GitHub Desktop.
azure-functions-fulfill-intent-for-alexa
let Client = require('azure-iothub').Client;
let Message = require('azure-iot-common').Message;
let names = require('docker-names');
let IOTHUB_CONNSTR_SERVICE = process.env.IOTHUB_CONNSTR_SERVICE;
let serviceClient = Client.fromConnectionString(IOTHUB_CONNSTR_SERVICE);
module.exports = function(context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
let intent = req.body.request.intent.name;
context.log('------------------');
context.log('Intent: ' + intent);
serviceClient.open(function(err) {
if (err) {
context.error('Could not connect: ' + err.message);
} else {
context.log('Service client connected');
var message = new Message(intent);
message.messageId = names.getRandomName();
message.expiryTimeUtc = Date.now() + 60000; // one minute
context.log('Sending message: ' + message.getData());
switch(intent) {
case 'juststeve':
context.res = {
version: "1.1",
response: {
outputSpeech: {
type: "PlainText",
text: "Alright, let's play some Steve on the Pi..."
},
shouldEndSession: true
}
};
serviceClient.send('jazzy', message, (err) => {
context.log(err);
});
break;
case 'developers':
context.res = {
version: "1.1",
response: {
outputSpeech: {
type: "PlainText",
text: "Alright, you'll find that out in a few seconds. Just watch the Pi."
},
shouldEndSession: true
}
};
serviceClient.send('jazzy', message, (err) => {
context.log(err);
});
break;
case 'arduino_temperature_cold':
context.res = {
version: "1.1",
response: {
outputSpeech: {
type: "PlainText",
text: "Ok, the temperature is being set to a low-key blue..."
},
shouldEndSession: true
}
};
var arduinoMsg = {
Name: "RunCold",
Parameters: {}
};
message.data = JSON.stringify(arduinoMsg);
context.log(message.data);
serviceClient.send('WINC1500', message, (err) => {
context.log(err);
});
break;
case 'arduino_temperature_hot':
context.res = {
version: "1.1",
response: {
outputSpeech: {
type: "PlainText",
text: "Ok, making it hotter..."
},
shouldEndSession: true
}
};
var arduinoMsg = {
Name: "RunHot",
Parameters: {}
};
message.data = JSON.stringify(arduinoMsg);
context.log(message.data);
serviceClient.send('WINC1500', message, (err) => {
context.log(err);
});
break;
case 'arduino_xmas_lights':
context.res = {
version: "1.1",
response: {
outputSpeech: {
type: "SSML",
ssml: '<speak><prosody pitch="high">HO,</prosody>' +
'<prosody pitch="medium">HO,</prosody>' +
'<prosody pitch="low">HO.</prosody> Hold the servers! ' +
'Summoning the Serverless Christmas spirit!</speak>'
},
shouldEndSession: true
}
};
var arduinoMsg = {
Name: "XmasLights",
Parameters: {}
};
message.data = JSON.stringify(arduinoMsg);
context.log(message.data);
serviceClient.send('WINC1500', message, (err) => {
context.log(err);
});
break;
default:
context.res = {
version: "1.1",
response: {
outputSpeech: {
type: "PlainText",
text: "This is Azure Functions backend, " +
"but i'm not sure what you mean. Try again?"
},
shouldEndSession: true
}
};
}
context.log('-------------------');
context.done();
}
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment