Blame view
middleware.js
2.62 KB
448732980
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
'use strict'; let request = require('request'); module.exports = function(config) { if (!config) { config = {}; } if (!config.rasa_uri) { config.rasa_uri = 'http://localhost:5000'; } let middleware = { receive: function (bot, message, next) { /*eslint-disable */ let postData = { 'q': message.text.toLowerCase(), }; /*eslint-enable */ let requestOptions = { url: config.rasa_uri + '/parse', body: postData, json: true }; request.post(requestOptions, function (error, response, body) { // TODO // error handling if (body) { /* There will be only one intent for sentences of any length. * Ex query - "Hi. i am arjun. i have 102 fever" * * Output - {"text": "hi. this is arjun. i have 102 fever", * "confidence": 0.49330375056610876, "intent": * "symptom_analyze", * "entities": [{"start": 12, "end": 18, "value": "arjun.", * "entity": "patient_name"}, {"start": 21, "end": 25, * "value": * "have", "entity": "symptom"}, {"start": 26, "end": 29, * "value": "102", "entity": "fever_temp"}, {"start": 30, * "end": 35, "value": "fever", "entity": "symptom"}]} */ let intent = body.intent; // Group all similar entities in an array. let bodyEntities = body.entities; let messageEntities = {}; for (let i = 0; i < bodyEntities.length; i++) { if (bodyEntities[i].entity in messageEntities && messageEntities[bodyEntities[i].entity].indexOf( bodyEntities[i].value) === -1) { // Entity exists already. Push the new entity value into // the same // entity. messageEntities[bodyEntities[i].entity.toLowerCase()].push( bodyEntities[i].value); } else { // This is a new entity. Add it to message entities. messageEntities[bodyEntities[i].entity.toLowerCase()] = [bodyEntities[i].value]; } } // intent.entities = messageEntities; message.intent = intent; message.entities = messageEntities; } next(); }); }, hears: function (patterns, message) { if (patterns.indexOf('*') >= 0) { return true; } for (let t = 0; t < patterns.length; t++) { if (message.intent.name === patterns[t]) { return true; } } } }; return middleware; }; |