-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbot-response-handler.js
More file actions
160 lines (132 loc) · 7.16 KB
/
bot-response-handler.js
File metadata and controls
160 lines (132 loc) · 7.16 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
var service = require('./bot-service');
var WitHelper = require('./bot-wit-helper');
var _ = require('underscore');
var RP = require('request-promise');
const WIT = require('wit-js');
var nodewit = require('node-wit');
var fs = require('fs');
var http = require('http');
var https = require('https');
const execSync = require('child_process').execSync;
module.exports = {
handleRequest: function (event,userObj,CONFIG,questionList) {
//if user not exist, send plain message
if(!userObj){
//send default messsage
service.sendPlainMessage(userObj.userId,CONFIG,CONFIG.defaultAuthMsg);
}else{
//handle response if normal message received
if (event.message){
/***** MESSAGE ATTACHMENT EVENT ****/
if (event.message.attachments) {
eventType = event.message ? (event.message.attachments ? event.message.attachments[0].type : "") : "";
console.log("attachment event recived ");
console.log("eventType",eventType);
if(eventType == 'audio')
{
console.log("event payload url",event.message.attachments[0].payload.url);
console.log("event",event.message.attachments);
var file = fs.createWriteStream("sample.mp3");
file.on('finish', function () {
code = execSync('ffmpeg -i sample.mp3 output.wav -y');
var stream = fs.createReadStream('output.wav');
nodewit.captureSpeechIntent(CONFIG.witToken, stream, "audio/wav", function (err, witKey) {
console.log("Response from Wit for audio stream: ");
if (err) console.log("Error: ", err);
console.log(JSON.stringify(witKey, null, " "));
var data = _.findWhere(questionList,{key : witKey.outcomes ? witKey.outcomes[0].intent : false});
var intentConfidence = witKey.outcomes ? witKey.outcomes[0].confidence : 0 ;
if(data && intentConfidence > 0.5){
//send response
service.sendMessage(event.message.text,userObj,CONFIG,data);
}else{
//send default messsage
service.sendPlainMessage(userObj.userId,CONFIG,CONFIG.defaultQueryMsg);
}
});
}); // file on finished
var request = https.get(event.message.attachments[0].payload.url, function(response) {
response.pipe(file);
});
}
}
else if (event.message.text && event.message.quick_reply == undefined)
{
//get message
var text = event.message.text,
client = new WIT.Client({apiToken : CONFIG.witToken});
console.log('text');
//Send message to WIT
client.message(text, {})
.then(function(witKey){
console.log('wit response',witKey);
//Get question
var data = _.findWhere(questionList,{key : witKey.outcomes ? witKey.outcomes[0].intent : false});
var intentConfidence = witKey.outcomes ? witKey.outcomes[0].confidence : 0 ;
if(data && intentConfidence > 0.5){
//send response
service.sendMessage(event.message.text,userObj,CONFIG,data);
}else{
//send default messsage
service.sendPlainMessage(userObj.userId,CONFIG,CONFIG.defaultQueryMsg);
}
//send notification message to end user, in every 5 chat with bot
/*if(userObj.notifyCounter % 4 === 0){
service.sendPlainMessage(userObj.userId,CONFIG,CONFIG.notifyMsg);
}*/
//increase notification counter on every message from bot
/*userObj.notifyCounter = userObj.notifyCounter + 1;
*/
})
.catch(function(err){
console.log("WIT reponse fails",err);
});
}
else if (event.message.text && event.message.quick_reply) {
var data = _.findWhere(questionList,{key : event.message.quick_reply.payload ? event.message.quick_reply.payload : false});
if(data){
//send response
console.log("response for QR :",data);
service.sendMessage(data,userObj,CONFIG,data);
}
else{
//send default messsage
console.log("response not found for QR");
service.sendPlainMessage(userObj.userId,CONFIG,CONFIG.defaultQueryMsg);
}
}
}
//Handle postbask reponse
else if (event.postback) {
console.log(event.postback.payload);
var payload = event.postback.payload.split("&&");
console.log(payload);
if(payload.length == 0)
{
//send default messsage
console.log("payload is 0");
service.sendPlainMessage(userObj.userId,CONFIG,CONFIG.defaultQueryMsg);
}
else
payload.forEach(function(p,i){
var data = _.findWhere(questionList,{key : p ? p : false});
(function(data,i){
setTimeout( function(){
if(data){
//send response
console.log("response for :",p);
service.sendMessage(p,userObj,CONFIG,data);
}
else{
//send default messsage
console.log("response not found");
service.sendPlainMessage(userObj.userId,CONFIG,CONFIG.defaultQueryMsg);
}
},1800*i);
})(data,i)
})
//Code need to written...
}
}
}
};