forked from dialogflow/dialogflow-nodejs-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
voice_request.js
66 lines (44 loc) · 1.62 KB
/
voice_request.js
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
/*!
* apiai
* Copyright(c) 2015 http://api.ai/
* Apache 2.0 Licensed
*/
'use strict';
var QueryRequest = require('./query_request').QueryRequest;
var util = require('util');
exports.VoiceRequest = module.exports.VoiceRequest = VoiceRequest;
var CRLF = '\r\n';
util.inherits(VoiceRequest, QueryRequest);
function VoiceRequest (application, options) {
var self = this;
self.boundary = self._generateBoundary();
VoiceRequest.super_.apply(this, [application, options]);
self._sendMetaData();
}
VoiceRequest.prototype._generateBoundary = function() {
return (new Date()).getTime().toString();
};
VoiceRequest.prototype._headers = function() {
var self = this;
var headers = VoiceRequest.super_.prototype._headers.apply(this, arguments);
headers['Content-Type'] = 'multipart/form-data; boundary=' + self.boundary;
headers['Transfer-Encoding'] = 'chunked';
return headers;
};
VoiceRequest.prototype._sendMetaData = function() {
var self = this;
var data = '--' + self.boundary + CRLF;
data += 'Content-Disposition: form-data; name="request"' + CRLF;
data += "Content-Type: application/json" + CRLF + CRLF;
data += JSON.stringify(self._jsonRequestParameters());
data += CRLF + '--' + self.boundary + CRLF;
data += 'Content-Disposition: form-data; name="voiceData"' + CRLF;
data += 'Content-Type: audio/wav' + CRLF + CRLF;
self.write(data);
};
VoiceRequest.prototype.end = function() {
var self = this;
var lastDataChunk = CRLF + '--' + self.boundary + '--' + CRLF;
self.write(lastDataChunk);
VoiceRequest.super_.prototype.end.apply(this, arguments);
};