2017-04-03 15 views
11

đã đi các tuyến đường khác nhau trong 2 ngày và không thể tìm ra. Có lẽ ai đó có thể làm sáng tỏ vấn đề của tôi. Tôi đang cố gắng chạy một boterver kết nối với nhiều plaforms và đã có khoảng 5 làm việc.Amazon Alexa, alexa-app và middleware

Tôi hiện đang cố gắng tích hợp Alexa. Tôi thấy các yêu cầu của Alexa đến máy chủ của tôi (vì vậy kỹ năng Alexa và cấu hình điểm cuối là chính xác), tuy nhiên điều này cũng đã cho tôi khá nhiều thời gian vì Amazon dường như chỉ gửi lưu lượng tới cổng 443, do đó xác định một số cổng khác trong trung tâm dev của Amazon , nhưng không có gì ... tốt đẹp! Giải quyết bằng cách thêm một cân bằng tải với cổng chuyển tiếp.

Đến câu hỏi thực tế. Tôi cố gắng để sử dụng alexa ứng dụng như khuôn khổ của tôi từ ví dụ sau:

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 

Phần mà tôi không thể hình dung ra là làm thế nào để sử dụng này khi tôi thiết lập máy chủ nhanh của tôi trong một tập tin và sau đó muốn sử dụng chức năng trung gian để thiết lập listener của tôi trong tập tin thứ hai ... một cái gì đó như:

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

Cảm ơn bạn đã giúp đỡ hoặc gợi ý!

+0

Tôi không bị ràng buộc vào alexa-app , vì vậy nếu mọi người có các thư viện khác có thể được sử dụng để đạt được điều này, tôi rất cởi mở với các đề xuất. – lleto

+0

Cuối cùng tôi quản lý để có được điều này làm việc dựa trên Express và Alexa-app. – lleto

+0

bạn có thể đăng giải pháp của mình làm câu trả lời cho câu hỏi này không? –

Trả lời

0

Cuối cùng, tôi đã quản lý kết nối app.js chính thông qua bộ định tuyến epxress với hàm getMessagingHandler của ứng dụng alexa. Vì vậy, trong app.js đường alexa của bạn webhook đến getMessagingHandler trong người nghe của bạn và sau đó trong người nghe:

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; 

Trong app.js chính:

app.use('/alexa', controller.Bot.Alexa.Listener.getMessagingHandler()); 
Các vấn đề liên quan