mirror of
https://github.com/bckelley/cgm-remote-monitor.git
synced 2026-08-24 03:14:12 -05:00
* re-enable auth check for device status routes * Resolve eslint errors * Add npm script for eslint * Correct regex for express extension middleware and add tests for expected behaviour * Resolve lint error in virtual assistant base * Update index.js * Update index.js
97 lines
3.1 KiB
JavaScript
97 lines
3.1 KiB
JavaScript
var _ = require('lodash');
|
|
var async = require('async');
|
|
|
|
function init () {
|
|
console.log('Configuring Google Home...');
|
|
function googleHome() {
|
|
return googleHome;
|
|
}
|
|
var intentHandlers = {};
|
|
var rollup = {};
|
|
|
|
// There is no protection for a previously handled metric - one plugin can overwrite the handler of another plugin.
|
|
googleHome.configureIntentHandler = function configureIntentHandler(intent, handler, metrics) {
|
|
if (!intentHandlers[intent]) {
|
|
intentHandlers[intent] = {};
|
|
}
|
|
if (metrics) {
|
|
for (var i = 0, len = metrics.length; i < len; i++) {
|
|
if (!intentHandlers[intent][metrics[i]]) {
|
|
intentHandlers[intent][metrics[i]] = {};
|
|
}
|
|
console.log('Storing handler for intent \'' + intent + '\' for metric \'' + metrics[i] + '\'');
|
|
intentHandlers[intent][metrics[i]].handler = handler;
|
|
}
|
|
} else {
|
|
console.log('Storing handler for intent \'' + intent + '\'');
|
|
intentHandlers[intent].handler = handler;
|
|
}
|
|
};
|
|
|
|
// This function retrieves a handler based on the intent name and metric requested.
|
|
googleHome.getIntentHandler = function getIntentHandler(intentName, metric) {
|
|
console.log('Looking for handler for intent \'' + intentName + '\' for metric \'' + metric + '\'');
|
|
if (intentName && intentHandlers[intentName]) {
|
|
if (intentHandlers[intentName][metric] && intentHandlers[intentName][metric].handler) {
|
|
console.log('Found!');
|
|
return intentHandlers[intentName][metric].handler
|
|
} else if (intentHandlers[intentName].handler) {
|
|
console.log('Found!');
|
|
return intentHandlers[intentName].handler;
|
|
}
|
|
console.log('Not found!');
|
|
return null;
|
|
} else {
|
|
console.log('Not found!');
|
|
return null;
|
|
}
|
|
};
|
|
|
|
googleHome.addToRollup = function(rollupGroup, handler, rollupName) {
|
|
if (!rollup[rollupGroup]) {
|
|
console.log('Creating the rollup group: ', rollupGroup);
|
|
rollup[rollupGroup] = [];
|
|
}
|
|
rollup[rollupGroup].push({handler: handler, name: rollupName});
|
|
};
|
|
|
|
googleHome.getRollup = function(rollupGroup, sbx, slots, locale, callback) {
|
|
var handlers = _.map(rollup[rollupGroup], 'handler');
|
|
console.log('Rollup array for ', rollupGroup);
|
|
console.log(rollup[rollupGroup]);
|
|
var nHandlers = [];
|
|
_.each(handlers, function (handler) {
|
|
nHandlers.push(handler.bind(null, slots, sbx));
|
|
});
|
|
async.parallelLimit(nHandlers, 10, function(err, results) {
|
|
if (err) {
|
|
console.error('Error: ', err);
|
|
}
|
|
callback(_.map(_.orderBy(results, ['priority'], ['asc']), 'results').join(' '));
|
|
});
|
|
};
|
|
|
|
// This creates the expected Google Home response
|
|
googleHome.buildSpeechletResponse = function buildSpeechletResponse(output, expectUserResponse) {
|
|
return {
|
|
payload: {
|
|
google: {
|
|
expectUserResponse: expectUserResponse,
|
|
richResponse: {
|
|
items: [
|
|
{
|
|
simpleResponse: {
|
|
textToSpeech: output
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
return googleHome;
|
|
}
|
|
|
|
module.exports = init; |