Blame view

middleware.js 2.62 KB
448732980   Vijay Krishnavanshi   Initial Commit
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;
  };