From 609f52c39cc0a8bcf49a6dc0f4511f34fe709512 Mon Sep 17 00:00:00 2001 From: Arne Libbrecht Date: Fri, 29 Mar 2019 10:47:56 +0100 Subject: [PATCH 1/4] Add model and project parameters + update readme. --- package.json | 1 + readme.md | 29 ++++++++++++++++++++++++----- src/middleware.js | 34 +++++++++++++++++++++------------- 3 files changed, 46 insertions(+), 18 deletions(-) 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..468dd3c 100644 --- a/readme.md +++ b/readme.md @@ -3,14 +3,33 @@ 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. + }); + + 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..951120d 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -1,6 +1,5 @@ -const request = require('request-promise') const debug = require('debug')('botkit:rasa') - +const axios = require('axios'); module.exports = config => { if (!config) { config = {} @@ -10,6 +9,8 @@ module.exports = config => { config.rasa_uri = 'http://localhost:5000' } + + var middleware = { receive: (bot, message, next) => { if (!message.text || message.is_echo) { @@ -18,22 +19,29 @@ module.exports = config => { } debug('Sending message to Rasa', message.text) - const options = { - method: 'POST', - uri: `${config.rasa_uri}/parse`, - body: { + var request={ + method: 'get', + url: `${config.rasa_uri}/parse`, + params: { q: message.text - }, - json: true + } + }; + if (config.project) { + request.params.project=config.project; } - - request(options) - .then(response => { + if (config.model) { + request.params.model=config.model; + } + axios(request) + .then(function (response) { debug('Rasa response', response) - message.intent = response.intent - message.entities = response.entities + 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); + }) }, hears: (patterns, message) => { From c65f894a1e9913acaaf7d72eba9884b27a9d0239 Mon Sep 17 00:00:00 2001 From: Arne Libbrecht Date: Fri, 29 Mar 2019 11:01:25 +0100 Subject: [PATCH 2/4] code cleanup --- src/middleware.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/middleware.js b/src/middleware.js index 951120d..690df4d 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -28,18 +28,16 @@ module.exports = config => { }; if (config.project) { request.params.project=config.project; - } + }; if (config.model) { request.params.model=config.model; - } - axios(request) - .then(function (response) { - debug('Rasa response', response) - message.intent = response.data.intent - message.entities = response.data.entities - next() - }) - .catch(function (err) { + }; + axios(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); }) }, From 83f514e2f06393cce02d6506a4bb4280be99ee12 Mon Sep 17 00:00:00 2001 From: Arne Libbrecht Date: Fri, 29 Mar 2019 11:22:29 +0100 Subject: [PATCH 3/4] backwards compatibility --- readme.md | 16 +++++++++++----- src/middleware.js | 15 ++++++++------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/readme.md b/readme.md index 468dd3c..3f5b072 100644 --- a/readme.md +++ b/readme.md @@ -12,11 +12,17 @@ Add botkit-rasa as a dependency to your Botkit-bot. 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. - }); + 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); diff --git a/src/middleware.js b/src/middleware.js index 690df4d..efd428b 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -5,10 +5,12 @@ module.exports = config => { config = {} } - if (!config.rasa_uri) { + if (!config.rasa_uri) { config.rasa_uri = 'http://localhost:5000' } - + const instance = axios.create({ + baseURL: config.rasa_uri + }) var middleware = { @@ -21,17 +23,16 @@ module.exports = config => { debug('Sending message to Rasa', message.text) var request={ method: 'get', - url: `${config.rasa_uri}/parse`, params: { q: message.text } }; - if (config.project) { + + if(config.project && config.model){ + request.url="/parse" request.params.project=config.project; - }; - if (config.model) { request.params.model=config.model; - }; + } axios(request).then(function (response) { debug('Rasa response', response); message.intent = response.data.intent; From e10bb296ecb52fed42c505d22a59995bf9c7f202 Mon Sep 17 00:00:00 2001 From: Arne Libbrecht Date: Fri, 29 Mar 2019 11:33:23 +0100 Subject: [PATCH 4/4] small fix, axios --- src/middleware.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/middleware.js b/src/middleware.js index efd428b..63a52ca 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -8,7 +8,7 @@ module.exports = config => { if (!config.rasa_uri) { config.rasa_uri = 'http://localhost:5000' } - const instance = axios.create({ + const rasa = axios.create({ baseURL: config.rasa_uri }) @@ -33,7 +33,7 @@ module.exports = config => { request.params.project=config.project; request.params.model=config.model; } - axios(request).then(function (response) { + rasa(request).then(function (response) { debug('Rasa response', response); message.intent = response.data.intent; message.entities = response.data.entities;