亚马逊Alexa,alexa-app和中间件

现在已经走了两天不一样的路线,不能弄明白。 也许有人可以解释我的问题。 我试图运行一个连接到多个平台的botserver,已经有5个左右的工作。

我现在也试图整合Alexa。 我看到Alexa请求进入我的服务器(所以Alexa的技能和端点configuration是正确的),但是这也花了我相当一段时间,亚马逊显然只发送stream量到端口443,所以在亚马逊开发中心定义另一个端口号是允许的,但什么都不做…好的! 通过添加端口转发负载平衡器解决。

在真正的问题上。 我正在尝试使用以下示例中的alexa-app作为我的框架:

var express = require("express"); var alexa = require("alexa-app"); var express_app = express(); var app = new alexa.app("sample"); app.intent("number", { "slots": { "number": "AMAZON.NUMBER" }, "utterances": ["say the number {-|number}"] }, function(request, response) { var number = request.slot("number"); response.say("You asked for the number " + number); } ); // setup the alexa app and attach it to express before anything else app.express({ expressApp: express_app }); // now POST calls to /sample in express will be handled by the app.request() function // GET calls will not be handled // from here on, you can setup any other express routes or middleware as normal 

我无法弄清楚的部分是如何使用这个当我设置我的快递服务器在一个文件,然后想要使用中间件function来设置我的听众在第二个文件…像这样:

app.js:

 var express = require("express"); var express_app = express(); https.createServer({ key: fs.readFileSync(key), cert: fs.readFileSync(cert), ca: fs.readFileSync(ca) }, app).listen(port, function () { console.log("http: api server listening on port " + port); }); app.use('/alexa', controller.Bot.Messenger.Listener.botMiddleWare()); 

listener.js:

 var alexa = require("alexa-app"); var app = new alexa.app("sample"); bot.botMiddleWare = function botMiddleWare () { return <return function to connect to express in app.js>; } 

感谢您的帮助或指点!

最后,我设法通过epxress路由器将我的主要app.js连接到alexa-app的getMessagingHandler函数。 所以在app.js路由你的alexa webhook到你的监听器中的getMessagingHandler,然后在监听器中:

 var bot = new alexa.app('my_bot'); bot.getMessagingHandler = function getMessagingHandler() { return function (req, res) { req.on('end', function(){ var jsonData = JSON.parse(requestBody); if(jsonData.request.type == "LaunchRequest") { // handle response here } } } } module.exports = bot; 

在主要的app.js中:

 app.use('/alexa', controller.Bot.Alexa.Listener.getMessagingHandler());