2017-04-03 6 views
11

haben seit 2 Tagen verschiedene Routen gehen und kann es nicht herausfinden. Vielleicht kann jemand meine Probleme beleuchten. Ich versuche, einen Botserver zu betreiben, der sich mit mehreren Plattformen verbindet und schon ungefähr 5 hat.Amazon Alexa, Alexa-App und Middleware

Ich versuche jetzt auch Alexa zu integrieren. Ich sehe, dass Alexa-Anfragen auf meinen Server kommen (Alexa-Skill und Endpunkt-Konfiguration sind korrekt), aber das hat auch einige Zeit gedauert, da Amazon anscheinend nur Traffic an Port 443 sendet , tut aber nichts ... nett! Gelöst durch Hinzufügen eines Lastenausgleichsmoduls mit Portweiterleitung.

Auf die eigentliche Frage. Ich versuche, alexa-App als meinen Rahmen aus dem folgende Beispiel zu verwenden:

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 

Der Teil, den ich nicht herausfinden kann, ist, wie diese zu verwenden, wenn ich mein Setup Express-Server in einer Datei und dann will verwenden Sie die Middleware-Funktion zum Einrichten meiner Zuhörer in der zweiten Datei ... so etwas wie:

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

Danke für jede Hilfe oder Hinweise!

+0

Ich bin nicht zu alexa-App gebunden Wenn Leute andere Bibliotheken haben, die dazu verwendet werden können, bin ich sehr offen für Vorschläge. – lleto

+0

Am Ende habe ich es geschafft, das funktioniert basierend auf Express und Alexa-App. – lleto

+0

könnten Sie Ihre Lösung als Antwort auf diese Frage veröffentlichen? –

Antwort

0

Am Ende habe ich es geschafft meine Hauptapp.js via epxress router mit der getMessagingHandler Funktion der Alexa-App zu verbinden. So in der app.js Route Ihre alexa Webhook zum getMessagingHandler in Ihrem Hörer und dann in den Hörer:

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; 

In den wichtigsten app.js:

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