diff --git a/package.json b/package.json index 63d756c..c62e453 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "author": "ben@howdy.ai", "license": "ISC", "dependencies": { + "axios": "^0.18.0", "debug": "^2.6.8", "request": "^2.81.0", "request-promise": "^4.2.1" diff --git a/readme.md b/readme.md index 223f62f..3f5b072 100644 --- a/readme.md +++ b/readme.md @@ -3,14 +3,39 @@ This plugin provides Botkit developers a way to use the [rasa NLU](https://rasa.ai/) open source, self hosted natural language API. -``` -var rasa = require('botkit-rasa')({rasa_uri: 'http://localhost:5000'}); -controller.middleware.receive.use(rasa.receive); -controller.hears(['my_intent'],'message_received', rasa.hears, function(bot, message) { +## Setup + +Add botkit-rasa as a dependency to your Botkit-bot. +`npm install botkit-rasa` + +Enable the middleware: + +```javascript + var rasa = require('botkit-rasa')({ + rasa_uri: "my_rasa_url",//if no url was provided http://localhost:5000 will be used. + project: "my_project",//project to use, if no project was provided project won't be used in the request. + model: "my_model"//model to use, if no model was provided model won't be used in the request. + }); + + //if you chose to not include the project or the model you should adapt your rasa_uri to include these + //mind the 'parse' route in this case. + var rasa = require('botkit-rasa')({ + rasa_uri: "localhost:5000/parse?&model=&project=" + }); + + controller.middleware.receive.use(rasa.receive); + //Eventually set rasa hears as the standard hears method. + controller.changeEars(rasa.hears); +``` +Setup a controller to use the hears middleware. +```javascript +controller.hears(['my_intent'],'message_received', rasa.hears, function(bot, message) { console.log('Intent:', message.intent); console.log('Entities:', message.entities); - }); ``` + + + diff --git a/src/middleware.js b/src/middleware.js index 2b05481..63a52ca 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -1,14 +1,17 @@ -const request = require('request-promise') const debug = require('debug')('botkit:rasa') - +const axios = require('axios'); module.exports = config => { if (!config) { config = {} } - if (!config.rasa_uri) { + if (!config.rasa_uri) { config.rasa_uri = 'http://localhost:5000' } + const rasa = axios.create({ + baseURL: config.rasa_uri + }) + var middleware = { receive: (bot, message, next) => { @@ -18,21 +21,25 @@ module.exports = config => { } debug('Sending message to Rasa', message.text) - const options = { - method: 'POST', - uri: `${config.rasa_uri}/parse`, - body: { + var request={ + method: 'get', + params: { q: message.text - }, - json: true + } + }; + + if(config.project && config.model){ + request.url="/parse" + request.params.project=config.project; + request.params.model=config.model; } - - request(options) - .then(response => { - debug('Rasa response', response) - message.intent = response.intent - message.entities = response.entities - next() + rasa(request).then(function (response) { + debug('Rasa response', response); + message.intent = response.data.intent; + message.entities = response.data.entities; + next(); + }).catch(function (err) { + debug("Couldn't retrieve response from rasa. Check if your url, project and model are set correctly.",err); }) },