Подтвердить что ты не робот

Amazon Alexa, alexa-приложение и промежуточное ПО

уже два дня идут разными путями и не могут понять это. Возможно, кто-то может пролить свет на мои проблемы. Я пытаюсь запустить botserver, который соединяется с несколькими формами и уже имеет около 5 рабочих.

Теперь я также пытаюсь интегрировать Alexa. Я вижу, что запросы Alexa поступают на мой сервер (так что настройки Alexa и конфигурация конечной точки верны), однако это также заняло у меня довольно много времени, поскольку Amazon, по-видимому, только отправляет трафик на порт 443, поэтому разрешается использование другого номера порта в центре Amazon dev, но ничего не делает... приятно! Решено путем добавления балансировщика нагрузки с переадресацией портов.

На реальный вопрос. Я пытаюсь использовать 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 

Часть, которую я не могу понять, заключается в том, как использовать это, когда я настраиваю свой экспресс-сервер в один файл, а затем хочу использовать функцию промежуточного программного обеспечения для настройки моего слушателя во втором файле... что-то вроде:

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>;
}

Спасибо за любую помощь или указатели!

4b9b3361

Ответ 1

В итоге мне удалось подключить основное приложение app.js через маршрутизатор epxress к функции getMessagingHandler для alexa-app. Итак, в app.js пройдите свой веб-сайт alexa в 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());