@jambonz/node-red-contrib-jambonz 2.5.3 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -25
- package/package.json +7 -12
- package/src/nodes/_template.html +2 -2
- package/src/nodes/answer.html +1 -1
- package/src/nodes/auth.html +1 -34
- package/src/nodes/auth.js +0 -14
- package/src/nodes/conference.html +1 -1
- package/src/nodes/config.html +2 -1
- package/src/nodes/create_call.html +9 -4
- package/src/nodes/dequeue.html +1 -1
- package/src/nodes/dial.html +10 -10
- package/src/nodes/dialogflow.html +2 -1
- package/src/nodes/dtmf.html +1 -1
- package/src/nodes/dub.html +1 -1
- package/src/nodes/enqueue.html +1 -1
- package/src/nodes/gather.html +2 -3
- package/src/nodes/generic-verb.html +1 -1
- package/src/nodes/hangup.html +1 -1
- package/src/nodes/lcc.html +2 -2
- package/src/nodes/lcc.js +0 -1
- package/src/nodes/leave.html +1 -1
- package/src/nodes/listen.html +1 -1
- package/src/nodes/message.html +0 -4
- package/src/nodes/pause.html +1 -1
- package/src/nodes/play.html +1 -1
- package/src/nodes/rasa.html +1 -1
- package/src/nodes/redirect.html +1 -1
- package/src/nodes/say.html +2 -1
- package/src/nodes/sip-decline.html +1 -1
- package/src/nodes/sip-refer.html +1 -1
- package/src/nodes/sip-request.html +2 -2
- package/src/nodes/tag.html +1 -1
- package/src/nodes/webhooks.html +2 -2
- package/examples/Voicemail using Listen into S3 bucket.json +0 -130
- package/examples/lex.json +0 -1
- package/src/nodes/jambonz.html +0 -3548
- package/src/nodes/lex.html +0 -281
- package/src/nodes/lex.js +0 -69
- package/src/nodes/s3-upload.html +0 -66
- package/src/nodes/s3-upload.js +0 -140
package/src/nodes/jambonz.html
DELETED
|
@@ -1,3548 +0,0 @@
|
|
|
1
|
-
<!-- speech helpers -->
|
|
2
|
-
<script type="text/javascript">
|
|
3
|
-
"use strict";
|
|
4
|
-
|
|
5
|
-
let mapGoogle = {};
|
|
6
|
-
let googleLanguageOptions = '';
|
|
7
|
-
let mapAws = {};
|
|
8
|
-
let awsLanguageOptions = '';
|
|
9
|
-
//let mapSpeechRec = {};
|
|
10
|
-
let sttLanguagesGoogle = '';
|
|
11
|
-
let sttLanguagesAws = '';
|
|
12
|
-
let mapDialogflow = {};
|
|
13
|
-
let dialogFlowOptions = '';
|
|
14
|
-
|
|
15
|
-
var googleUrl = (RED.settings.httpNodeRoot || RED.settings.httpAdminRoot || "").replace(/\/$/, "") + '/googleTts';
|
|
16
|
-
$.getJSON(googleUrl, function (data) {
|
|
17
|
-
//console.log('retrieved data ' + JSON.stringify(data));
|
|
18
|
-
data.forEach(function(l) {
|
|
19
|
-
mapGoogle[l.code] = {
|
|
20
|
-
name: l.name,
|
|
21
|
-
voices: l.voices
|
|
22
|
-
};
|
|
23
|
-
googleLanguageOptions += `<option value="${l.code}">${l.name}</option>`;
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
var awsUrl = (RED.settings.httpNodeRoot || RED.settings.httpAdminRoot || "").replace(/\/$/, "") + '/awsTts';
|
|
27
|
-
$.getJSON(awsUrl, function (data) {
|
|
28
|
-
//console.log('retrieved data ' + JSON.stringify(data));
|
|
29
|
-
data.forEach(function(l) {
|
|
30
|
-
mapAws[l.code] = {
|
|
31
|
-
name: l.name,
|
|
32
|
-
voices: l.voices
|
|
33
|
-
};
|
|
34
|
-
awsLanguageOptions += `<option value="${l.code}">${l.name}</option>`;
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
var googleSttUrl = (RED.settings.httpNodeRoot || RED.settings.httpAdminRoot || "").replace(/\/$/, "") + '/googleSpeech';
|
|
38
|
-
$.getJSON(googleSttUrl, function (data) {
|
|
39
|
-
//console.log('retrieved data for recognizer voices: ' + JSON.stringify(data));
|
|
40
|
-
data.forEach(function(l) {
|
|
41
|
-
//mapSpeechRec[l.code] = l.name;
|
|
42
|
-
sttLanguagesGoogle += `<option value="${l.code}">${l.name}</option>`;
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
var awsSttUrl = (RED.settings.httpNodeRoot || RED.settings.httpAdminRoot || "").replace(/\/$/, "") + '/awsSpeech';
|
|
46
|
-
$.getJSON(awsSttUrl, function (data) {
|
|
47
|
-
//console.log('retrieved data for recognizer voices: ' + JSON.stringify(data));
|
|
48
|
-
data.forEach(function(l) {
|
|
49
|
-
//mapSpeechRec[l.code] = l.name;
|
|
50
|
-
sttLanguagesAws += `<option value="${l.code}">${l.name}</option>`;
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
var dialogflowUrl = (RED.settings.httpNodeRoot || RED.settings.httpAdminRoot || "").replace(/\/$/, "") + '/dialogflow';
|
|
55
|
-
$.getJSON(dialogflowUrl, function (data) {
|
|
56
|
-
console.log('retrieved data for dialogflow languages: ' + JSON.stringify(data));
|
|
57
|
-
data.forEach(function(l) {
|
|
58
|
-
mapDialogflow[l.code] = l.name;
|
|
59
|
-
dialogFlowOptions += `<option value="${l.code}">${l.name}</option>`;
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
function testCredentials() {
|
|
64
|
-
const baseUrl = $("#node-config-input-url").val();
|
|
65
|
-
const accountSid = $("#node-config-input-accountSid").val();
|
|
66
|
-
const token = $("#node-config-input-apiToken").val();
|
|
67
|
-
const status = $("#node-config-test-status");
|
|
68
|
-
|
|
69
|
-
status.text('');
|
|
70
|
-
|
|
71
|
-
$.ajax({
|
|
72
|
-
url: `${baseUrl}/v1/Accounts/${accountSid}/ApiKeys`,
|
|
73
|
-
headers: {
|
|
74
|
-
'Authorization': `Bearer ${token}`
|
|
75
|
-
},
|
|
76
|
-
dataType: 'json',
|
|
77
|
-
timeout: 500,
|
|
78
|
-
error: (err) => {
|
|
79
|
-
status.text('Failed');
|
|
80
|
-
console.log(err);
|
|
81
|
-
},
|
|
82
|
-
success: (res) => {
|
|
83
|
-
if (Array.isArray(res)) status.text('Success!');
|
|
84
|
-
else status.text('Failed');
|
|
85
|
-
console.log(`response from fetch of api keys: ${JSON.stringify(res)}`);
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
function prepareSttControls(node) {
|
|
91
|
-
var vendorElem = $('#node-input-transcriptionvendor');
|
|
92
|
-
var languageElem = $('#node-input-recognizerlang');
|
|
93
|
-
var mixtypeElem = $('#node-input-mixtype');
|
|
94
|
-
|
|
95
|
-
console.log('entering prepareSttControls');
|
|
96
|
-
|
|
97
|
-
var setTranscriptionLanguage = function(vendor) {
|
|
98
|
-
console.log(`setting transcription vendor to ${vendor}`);
|
|
99
|
-
languageElem.find('option').remove();
|
|
100
|
-
switch (vendor) {
|
|
101
|
-
case 'google':
|
|
102
|
-
languageElem.append('<option value="default">--application default--</option>');
|
|
103
|
-
languageElem.append(sttLanguagesGoogle);
|
|
104
|
-
$('#google-stt-options').show();
|
|
105
|
-
$('#aws-stt-options').hide();
|
|
106
|
-
$('#interim').show();
|
|
107
|
-
if (node.mixtype === 'stereo') $('#stt-identify-channels').show();
|
|
108
|
-
else $('#stt-identify-channels').hide();
|
|
109
|
-
break;
|
|
110
|
-
case 'aws':
|
|
111
|
-
languageElem.append('<option value="default">--application default--</option>');
|
|
112
|
-
languageElem.append(sttLanguagesAws);
|
|
113
|
-
$('#google-stt-options').hide();
|
|
114
|
-
$('#aws-stt-options').show();
|
|
115
|
-
$('#interim').show();
|
|
116
|
-
if (node.mixtype === 'stereo') $('#stt-identify-channels').show();
|
|
117
|
-
else $('#stt-identify-channels').hide();
|
|
118
|
-
break
|
|
119
|
-
default:
|
|
120
|
-
languageElem.append('<option value="default">--application default--</option>');
|
|
121
|
-
node.transcriptionvendor = 'default';
|
|
122
|
-
$('#google-stt-options').hide();
|
|
123
|
-
$('#aws-stt-options').hide();
|
|
124
|
-
$('#stt-identify-channels').hide();
|
|
125
|
-
$('#interim').hide();
|
|
126
|
-
break;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
var onVendorChanged = function() {
|
|
131
|
-
var vendor = vendorElem.find(':selected').val();
|
|
132
|
-
console.log(`stt vendor changed to ${node.transcriptionvendor}`);
|
|
133
|
-
setTranscriptionLanguage(vendor);
|
|
134
|
-
if (vendor === 'default') node.recognizerlang = 'default';
|
|
135
|
-
console.log(`initializing transcription language to ${node.recognizerlang}`);
|
|
136
|
-
languageElem.val(node.recognizerlang);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
var onLangChanged = function() {
|
|
140
|
-
var lang = languageElem.find(':selected').val();
|
|
141
|
-
console.log(`lang dropdown changed to ${lang}`);
|
|
142
|
-
node.recognizerlang = lang;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
var onMixtypeChange = function() {
|
|
146
|
-
var mix = mixtypeElem.find(':selected').val();
|
|
147
|
-
console.log(`mixtype is now ${mix}`);
|
|
148
|
-
if (mix === 'stereo') $('#stt-identify-channels').show();
|
|
149
|
-
else $('#stt-identify-channels').hide();
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
vendorElem.change(onVendorChanged);
|
|
153
|
-
languageElem.change(onLangChanged);
|
|
154
|
-
mixtypeElem.change(onMixtypeChange);
|
|
155
|
-
|
|
156
|
-
console.log(`initializing transcription vendor to ${node.transcriptionvendor}`);
|
|
157
|
-
vendorElem.val(node.transcriptionvendor);
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
function prepareTtsControls(node) {
|
|
162
|
-
var vendorElem = $('#node-input-vendor');
|
|
163
|
-
var langElem = $('#node-input-lang');
|
|
164
|
-
var xlangElem = $('#node-input-xlang');
|
|
165
|
-
var voiceElem = $('#node-input-voice');
|
|
166
|
-
var xvoiceElem = $('#node-input-xvoice');
|
|
167
|
-
|
|
168
|
-
console.log(`oneditprepare tts vendor: ${node.vendor}, lang: ${node.lang}, voice: ${node.voice}`);
|
|
169
|
-
|
|
170
|
-
var onVendorChanged = function() {
|
|
171
|
-
node.vendor = vendorElem.val();
|
|
172
|
-
console.log(`tts vendor changed to ${node.vendor}`);
|
|
173
|
-
setLanguage(node.vendor);
|
|
174
|
-
}
|
|
175
|
-
var setLanguage = function(v) {
|
|
176
|
-
xlangElem.find('option').remove();
|
|
177
|
-
xvoiceElem.find('option').remove();
|
|
178
|
-
|
|
179
|
-
switch (v) {
|
|
180
|
-
case 'default':
|
|
181
|
-
xlangElem.append('<option value="default" selected>--application default--</option>');
|
|
182
|
-
xvoiceElem.append('<option value="default" selected>--application default--</option>');
|
|
183
|
-
langElem.val('default');
|
|
184
|
-
voiceElem.val('default');
|
|
185
|
-
break;
|
|
186
|
-
|
|
187
|
-
case 'google':
|
|
188
|
-
xlangElem.append(googleLanguageOptions);
|
|
189
|
-
break;
|
|
190
|
-
|
|
191
|
-
case 'aws':
|
|
192
|
-
xlangElem.append(awsLanguageOptions);
|
|
193
|
-
break;
|
|
194
|
-
}
|
|
195
|
-
console.log(`installed language choices for ${v}`);
|
|
196
|
-
xlangElem.val(langElem.val());
|
|
197
|
-
}
|
|
198
|
-
var onLangChanged = function() {
|
|
199
|
-
console.log(`lang edit changed to ${langElem.val()}`);
|
|
200
|
-
}
|
|
201
|
-
var onXLangChanged = function() {
|
|
202
|
-
var lang = xlangElem.find(':selected').val();
|
|
203
|
-
console.log(`lang dropdown changed to ${lang}`);
|
|
204
|
-
node.lang = lang;
|
|
205
|
-
langElem.val(node.lang);
|
|
206
|
-
setVoice(node.vendor, node.lang)
|
|
207
|
-
}
|
|
208
|
-
var setVoice = function(vendor, lang) {
|
|
209
|
-
xvoiceElem.find('option').remove();
|
|
210
|
-
|
|
211
|
-
console.log(`installing voices for ${vendor} ${lang}`);
|
|
212
|
-
switch (vendor) {
|
|
213
|
-
case 'default':
|
|
214
|
-
xvoiceElem.append('<option value="default" selected>--application default--</option>');
|
|
215
|
-
break;
|
|
216
|
-
|
|
217
|
-
case 'google':
|
|
218
|
-
case 'aws':
|
|
219
|
-
var obj = 'google' === vendor ? mapGoogle[lang] : mapAws[lang];
|
|
220
|
-
if (obj) {
|
|
221
|
-
var options = '';
|
|
222
|
-
for (var i = 0; i < obj.voices.length; i++) {
|
|
223
|
-
if (i) options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
|
|
224
|
-
else options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
|
|
225
|
-
}
|
|
226
|
-
xvoiceElem.append(options);
|
|
227
|
-
}
|
|
228
|
-
break;
|
|
229
|
-
}
|
|
230
|
-
console.log(`installed voice choices for ${vendor} ${lang}`);
|
|
231
|
-
if (voiceElem.val()) xvoiceElem.val(voiceElem.val());
|
|
232
|
-
}
|
|
233
|
-
var onVoiceChanged = function() {
|
|
234
|
-
console.log(`voice edit changed to ${voiceElem.val()}`);
|
|
235
|
-
xvoiceElem.val(voiceElem.val());
|
|
236
|
-
}
|
|
237
|
-
var onXVoiceChanged = function() {
|
|
238
|
-
var voice = xvoiceElem.find(':selected').val();
|
|
239
|
-
node.voice = voice;
|
|
240
|
-
console.log(`voice dropdown changed to ${voice}`);
|
|
241
|
-
voiceElem.val(voice);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
vendorElem.change(onVendorChanged);
|
|
245
|
-
langElem.change(onLangChanged);
|
|
246
|
-
xlangElem.change(onXLangChanged);
|
|
247
|
-
voiceElem.change(onVoiceChanged);
|
|
248
|
-
xvoiceElem.change(onXVoiceChanged);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
RED.nodes.registerType('user auth',{
|
|
252
|
-
category: 'jambonz',
|
|
253
|
-
color:"#c1f986",
|
|
254
|
-
defaults: {
|
|
255
|
-
name: {value: ''},
|
|
256
|
-
password: {},
|
|
257
|
-
passwordType: {},
|
|
258
|
-
ha1: {},
|
|
259
|
-
ha1Type: {}
|
|
260
|
-
},
|
|
261
|
-
inputs:1,
|
|
262
|
-
outputs:1,
|
|
263
|
-
icon: "font-awesome/fa-id-badge",
|
|
264
|
-
label: function() { return this.name || 'user auth';},
|
|
265
|
-
oneditprepare: function() {
|
|
266
|
-
$('#node-input-password').typedInput({
|
|
267
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
268
|
-
typeField: $('#node-input-passwordType')
|
|
269
|
-
});
|
|
270
|
-
$('#node-input-ha1').typedInput({
|
|
271
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
272
|
-
typeField: $('#node-input-ha1Type')
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
RED.nodes.registerType('conference',{
|
|
278
|
-
category: 'jambonz',
|
|
279
|
-
color: '#bbabaa',
|
|
280
|
-
defaults: {
|
|
281
|
-
name: {value: ''},
|
|
282
|
-
conference: {required: true, value: ''},
|
|
283
|
-
conferenceType: {value: 'str'},
|
|
284
|
-
beep: {value: false},
|
|
285
|
-
endConferenceOnExit: {value: false},
|
|
286
|
-
startConferenceOnEnter: {value: false},
|
|
287
|
-
maxParticipants: {},
|
|
288
|
-
maxParticipantsType: {value: 'num'},
|
|
289
|
-
enterHook: {},
|
|
290
|
-
enterHookType: {value: 'str'},
|
|
291
|
-
waitHook: {},
|
|
292
|
-
waitHookType: {value: 'str'},
|
|
293
|
-
joinMuted : {value: false}
|
|
294
|
-
},
|
|
295
|
-
inputs:1,
|
|
296
|
-
outputs:1,
|
|
297
|
-
icon: "font-awesome/fa-cubes",
|
|
298
|
-
label: function() {
|
|
299
|
-
return this.name || 'conference';
|
|
300
|
-
},
|
|
301
|
-
oneditprepare: function() {
|
|
302
|
-
$('#node-input-conference').typedInput({
|
|
303
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
304
|
-
typeField: $('#node-input-conferenceType')
|
|
305
|
-
});
|
|
306
|
-
$('#node-input-enterHook').typedInput({
|
|
307
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
308
|
-
typeField: $('#node-input-enterHookType')
|
|
309
|
-
});
|
|
310
|
-
$('#node-input-waitHook').typedInput({
|
|
311
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
312
|
-
typeField: $('#node-input-waitHookType')
|
|
313
|
-
});
|
|
314
|
-
$('#node-input-maxParticipants').typedInput({
|
|
315
|
-
types: ['num', 'msg', 'flow', 'global'],
|
|
316
|
-
typeField: $('#node-input-maxParticipantsType')
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
RED.nodes.registerType('dequeue',{
|
|
322
|
-
category: 'jambonz',
|
|
323
|
-
color: '#bbabaa',
|
|
324
|
-
defaults: {
|
|
325
|
-
name: {value: ''},
|
|
326
|
-
queue: {required: true, value: ''},
|
|
327
|
-
queueType: {value: 'str'},
|
|
328
|
-
actionHook: {},
|
|
329
|
-
actionHookType: {value: 'str'},
|
|
330
|
-
confirmHook: {},
|
|
331
|
-
confirmHookType: {value: 'str'},
|
|
332
|
-
beep: {value: false},
|
|
333
|
-
timeout: {},
|
|
334
|
-
timeoutType: {value: 'num'}
|
|
335
|
-
},
|
|
336
|
-
inputs:1,
|
|
337
|
-
outputs:1,
|
|
338
|
-
icon: "font-awesome/fa-cubes",
|
|
339
|
-
label: function() {
|
|
340
|
-
return this.name || 'dequeue';
|
|
341
|
-
},
|
|
342
|
-
oneditprepare: function() {
|
|
343
|
-
$('#node-input-queue').typedInput({
|
|
344
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
345
|
-
typeField: $('#node-input-queueType')
|
|
346
|
-
});
|
|
347
|
-
$('#node-input-actionHook').typedInput({
|
|
348
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
349
|
-
typeField: $('#node-input-actionHookType')
|
|
350
|
-
});
|
|
351
|
-
$('#node-input-confirmHook').typedInput({
|
|
352
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
353
|
-
typeField: $('#node-input-confirmHookType')
|
|
354
|
-
});
|
|
355
|
-
$('#node-input-timeout').typedInput({
|
|
356
|
-
types: ['num', 'msg', 'flow', 'global'],
|
|
357
|
-
typeField: $('#node-input-timeoutType')
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
});
|
|
361
|
-
|
|
362
|
-
RED.nodes.registerType('dial',{
|
|
363
|
-
category: 'jambonz',
|
|
364
|
-
color: '#bbabaa',
|
|
365
|
-
defaults: {
|
|
366
|
-
name: {value: ''},
|
|
367
|
-
targets:{value:[{type: 'phone', dest: '', user: '', pass: '', varType: 'str', trunk: ''}]},
|
|
368
|
-
headers: {value: []},
|
|
369
|
-
actionhook: {value: ''},
|
|
370
|
-
actionhookType: {value: 'str'},
|
|
371
|
-
answeronbridge: {value: false},
|
|
372
|
-
callerid: {value: ''},
|
|
373
|
-
calleridType: {value: ''},
|
|
374
|
-
confirmhook: {value: ''},
|
|
375
|
-
confirmhookType: {value: 'str'},
|
|
376
|
-
dialmusic: {value: ''},
|
|
377
|
-
dialmusicType: {value: 'str'},
|
|
378
|
-
dtmfcapture: {value: ''},
|
|
379
|
-
dtmfcaptureType: {value: 'str'},
|
|
380
|
-
dtmfhook: {value: ''},
|
|
381
|
-
dtmfhookType: {value: 'str'},
|
|
382
|
-
timelimit: {validate:RED.validators.regex(/^\d*$/) },
|
|
383
|
-
timeout: {validate:RED.validators.regex(/^\d*$/) },
|
|
384
|
-
listenurl: {value: ''},
|
|
385
|
-
listenurlType: {value: 'str'},
|
|
386
|
-
transcriptionhook: {},
|
|
387
|
-
transcriptionhookType: {value: 'str'},
|
|
388
|
-
transcriptionvendor: {value: 'default'},
|
|
389
|
-
recognizerlang: {value: 'default'},
|
|
390
|
-
recognizeraltlang: {},
|
|
391
|
-
recognizeraltlangType: {val: 'str'},
|
|
392
|
-
interim: {value: false},
|
|
393
|
-
profanityfilter: {value: false},
|
|
394
|
-
transcriptionhints: {},
|
|
395
|
-
transcriptionhintsType: {val: 'str'},
|
|
396
|
-
separaterecog: {value: false},
|
|
397
|
-
useenhanced: {value: false},
|
|
398
|
-
words: {value: false},
|
|
399
|
-
punctuation: {value: false},
|
|
400
|
-
diarization: {value: false},
|
|
401
|
-
diarizationmin: {value: 2},
|
|
402
|
-
diarizationminType: {value: 'num'},
|
|
403
|
-
diarizationmax: {value: 6},
|
|
404
|
-
diarizationmaxType: {value: 'num'},
|
|
405
|
-
interactiontype: {value: 'unspecified'},
|
|
406
|
-
naics: {value: 0},
|
|
407
|
-
naicsType: {value: 'num'},
|
|
408
|
-
identifychannels: {value: false},
|
|
409
|
-
speakerlabel: {value: false},
|
|
410
|
-
vocabularyname: {},
|
|
411
|
-
vocabularynameType: {value: 'str'},
|
|
412
|
-
vocabularyfiltername: {},
|
|
413
|
-
vocabularyfilternameType: {value: 'str'},
|
|
414
|
-
vocabularyfiltermethod: {}
|
|
415
|
-
},
|
|
416
|
-
inputs:1,
|
|
417
|
-
outputs:1,
|
|
418
|
-
icon: "font-awesome/fa-cubes",
|
|
419
|
-
label: function() { return this.name || 'dial';},
|
|
420
|
-
oneditprepare: function() {
|
|
421
|
-
var node = this;
|
|
422
|
-
$('#node-input-callerid').typedInput({
|
|
423
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
424
|
-
typeField: $('#node-input-calleridType')
|
|
425
|
-
});
|
|
426
|
-
$('#node-input-actionhook').typedInput({
|
|
427
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
428
|
-
typeField: $('#node-input-actionhookType')
|
|
429
|
-
});
|
|
430
|
-
$('#node-input-confirmhook').typedInput({
|
|
431
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
432
|
-
typeField: $('#node-input-confirmhookType')
|
|
433
|
-
});
|
|
434
|
-
$('#node-input-dialmusic').typedInput({
|
|
435
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
436
|
-
typeField: $('#node-input-dialmusicType')
|
|
437
|
-
});
|
|
438
|
-
$('#node-input-dtmfcapture').typedInput({
|
|
439
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
440
|
-
typeField: $('#node-input-dtmfcaptureType')
|
|
441
|
-
});
|
|
442
|
-
$('#node-input-dtmfhook').typedInput({
|
|
443
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
444
|
-
typeField: $('#node-input-dtmfhookType')
|
|
445
|
-
});
|
|
446
|
-
$('#node-input-transcribeurl').typedInput({
|
|
447
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
448
|
-
typeField: $('#node-input-transcribeurlType')
|
|
449
|
-
});
|
|
450
|
-
$('#node-input-listenurl').typedInput({
|
|
451
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
452
|
-
typeField: $('#node-input-listenurlType')
|
|
453
|
-
});
|
|
454
|
-
$('#node-input-transcriptionhook').typedInput({
|
|
455
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
456
|
-
typeField: $('#node-input-transcriptionhookType')
|
|
457
|
-
});
|
|
458
|
-
$('#node-input-transcriptionhints').typedInput({
|
|
459
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
460
|
-
typeField: $('#node-input-transcriptionhintsType')
|
|
461
|
-
});
|
|
462
|
-
$('#node-input-recognizeraltlang').typedInput({
|
|
463
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
464
|
-
typeField: $('#node-recognizeraltlangType')
|
|
465
|
-
});
|
|
466
|
-
$('#node-input-diarizationmin').typedInput({
|
|
467
|
-
types: ['num', 'msg', 'flow', 'global'],
|
|
468
|
-
typeField: $('#node-input-diarizationminType')
|
|
469
|
-
});
|
|
470
|
-
$('#node-input-diarizationmax').typedInput({
|
|
471
|
-
types: ['num', 'msg', 'flow', 'global'],
|
|
472
|
-
typeField: $('#node-input-diarizationmaxType')
|
|
473
|
-
});
|
|
474
|
-
$('#node-input-naics').typedInput({
|
|
475
|
-
types: ['num', 'msg', 'flow', 'global'],
|
|
476
|
-
typeField: $('#node-input-naicsType')
|
|
477
|
-
});
|
|
478
|
-
|
|
479
|
-
console.log('oneditprepare - dial');
|
|
480
|
-
prepareSttControls(node);
|
|
481
|
-
|
|
482
|
-
$('#node-input-target-container').css('min-height','180px').css('min-width','450px').editableList({
|
|
483
|
-
addItem: function(container, i, opt) {
|
|
484
|
-
var target = opt;
|
|
485
|
-
console.log(`addItem: ${JSON.stringify(opt)}, keys ${Object.keys(opt).length}`);
|
|
486
|
-
if (!target.hasOwnProperty('type')) {
|
|
487
|
-
target = {
|
|
488
|
-
type: 'phone',
|
|
489
|
-
dest: '',
|
|
490
|
-
user: '',
|
|
491
|
-
pass: '',
|
|
492
|
-
varType: 'str'
|
|
493
|
-
};
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
container.css({
|
|
497
|
-
overflow: 'hidden',
|
|
498
|
-
whiteSpace: 'nowrap'
|
|
499
|
-
});
|
|
500
|
-
let fragment = document.createDocumentFragment();
|
|
501
|
-
var row1 = $('<div/>',{style:"display:flex;"}).appendTo(fragment);
|
|
502
|
-
var row2 = $('<div/>',{style:"display:flex;margin-top:8px;"}).appendTo(fragment);
|
|
503
|
-
var row3 = $('<div/>',{style:"margin-top:8px;"}).appendTo(fragment);
|
|
504
|
-
var row4 = $('<div/>',{style:"display:flex;margin-top:8px;"}).appendTo(fragment);
|
|
505
|
-
var row5 = $('<div/>',{style:"margin-top:8px;"}).appendTo(fragment);
|
|
506
|
-
|
|
507
|
-
var selectField = $('<select/>',{class:"node-input-target-type",style:"width:110px; margin-right:10px;"})
|
|
508
|
-
.appendTo(row1);
|
|
509
|
-
var selectOptions = ['phone', 'user', 'sip', 'teams'];
|
|
510
|
-
for (var i = 0; i < 4; i++) {
|
|
511
|
-
selectField.append($("<option></option>").val(selectOptions[i]).text(selectOptions[i]));
|
|
512
|
-
}
|
|
513
|
-
var propertyName = $('<input/>', {class:"node-input-target-property-name", type:"text"})
|
|
514
|
-
.appendTo(row1)
|
|
515
|
-
.typedInput({types: ['str', 'msg', 'flow', 'global']});
|
|
516
|
-
|
|
517
|
-
$('<label style="padding-top:8px; padding-right:20px">Auth Username:</label>')
|
|
518
|
-
.appendTo(row2);
|
|
519
|
-
|
|
520
|
-
$('<input/>',{
|
|
521
|
-
class:"node-input-target-property-authuser",
|
|
522
|
-
type:"text",
|
|
523
|
-
placeholder: '(if required by remote endpoint)'
|
|
524
|
-
})
|
|
525
|
-
.appendTo(row2);
|
|
526
|
-
|
|
527
|
-
$('<label style="padding-top:8px; padding-right:20px">Auth Password:</label>')
|
|
528
|
-
.appendTo(row3);
|
|
529
|
-
$('<input/>',{
|
|
530
|
-
class:"node-input-target-property-authpassword",
|
|
531
|
-
type:"text",
|
|
532
|
-
placeholder: '(if required by remote endpoint)'
|
|
533
|
-
})
|
|
534
|
-
.appendTo(row3);
|
|
535
|
-
|
|
536
|
-
$('<label style="padding-top:8px; padding-right:20px">Trunk:</label>')
|
|
537
|
-
.appendTo(row5);
|
|
538
|
-
|
|
539
|
-
$('<input/>',{
|
|
540
|
-
class:"node-input-target-property-trunk",
|
|
541
|
-
type:"text",
|
|
542
|
-
placeholder: 'Specify the name of the trunk used for this outbound call'
|
|
543
|
-
})
|
|
544
|
-
.appendTo(row5);
|
|
545
|
-
|
|
546
|
-
selectField.on('change', function() {
|
|
547
|
-
var type = $(this).val();
|
|
548
|
-
console.log(`type changed to ${type}`);
|
|
549
|
-
var input = $(this).parent().find('input.red-ui-typedInput-input');
|
|
550
|
-
input.focus();
|
|
551
|
-
switch (type) {
|
|
552
|
-
case 'phone':
|
|
553
|
-
input.attr('placeholder', 'E.164 number to dial');
|
|
554
|
-
break;
|
|
555
|
-
case 'teams':
|
|
556
|
-
input.attr('placeholder', 'Microsoft Teams phone number or extension');
|
|
557
|
-
break;
|
|
558
|
-
case 'user':
|
|
559
|
-
input.attr('placeholder', 'user@domain');
|
|
560
|
-
break;
|
|
561
|
-
case 'sip':
|
|
562
|
-
input.attr('placeholder', 'sip:number@ip-address');
|
|
563
|
-
break;
|
|
564
|
-
}
|
|
565
|
-
if (type !== 'sip') {
|
|
566
|
-
row2.hide();
|
|
567
|
-
row3.hide();
|
|
568
|
-
}
|
|
569
|
-
else {
|
|
570
|
-
row2.show();
|
|
571
|
-
row3.show();
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
if(type !== 'phone') {
|
|
575
|
-
row5.hide();
|
|
576
|
-
} else {
|
|
577
|
-
row5.show();
|
|
578
|
-
}
|
|
579
|
-
});
|
|
580
|
-
selectField.val(target.type);
|
|
581
|
-
propertyName.typedInput('value', target.dest);
|
|
582
|
-
propertyName.typedInput('type', target.varType);
|
|
583
|
-
|
|
584
|
-
var datafield = row1.find('.node-input-target-property-name');
|
|
585
|
-
var userfield = row2.find('.node-input-target-property-authuser');
|
|
586
|
-
var passfield = row3.find('.node-input-target-property-authpassword');
|
|
587
|
-
var trunkfield = row5.find('.node-input-target-property-trunk');
|
|
588
|
-
|
|
589
|
-
datafield.typedInput('type', target.varType);
|
|
590
|
-
|
|
591
|
-
switch (target.type) {
|
|
592
|
-
case 'phone':
|
|
593
|
-
trunkfield.val(target.trunk);
|
|
594
|
-
case 'sip':
|
|
595
|
-
userfield.val(target.user);
|
|
596
|
-
passfield.val(target.pass);
|
|
597
|
-
default:
|
|
598
|
-
datafield.typedInput('value', target.dest);
|
|
599
|
-
break;
|
|
600
|
-
}
|
|
601
|
-
selectField.change();
|
|
602
|
-
container[0].appendChild(fragment);
|
|
603
|
-
},
|
|
604
|
-
removable: true,
|
|
605
|
-
addButton: 'add target'
|
|
606
|
-
});
|
|
607
|
-
console.log(`oneditprepare: coming in with targets: ${JSON.stringify(this.targets)}`);
|
|
608
|
-
if (!this.targets) {
|
|
609
|
-
var target = {
|
|
610
|
-
type: 'phone',
|
|
611
|
-
dest: '',
|
|
612
|
-
user: '',
|
|
613
|
-
pass: '',
|
|
614
|
-
trunk: '',
|
|
615
|
-
varType: 'str'
|
|
616
|
-
}
|
|
617
|
-
this.targets = [target];
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
for (var i=0; i < this.targets.length; i++) {
|
|
621
|
-
var target = this.targets[i];
|
|
622
|
-
$("#node-input-target-container").editableList('addItem', target);
|
|
623
|
-
}
|
|
624
|
-
// populate headers editable list
|
|
625
|
-
$('#node-input-headers-container').css('min-height','120px').css('min-width','450px').editableList({
|
|
626
|
-
addItem: function(container, i, opt) {
|
|
627
|
-
var header = opt;
|
|
628
|
-
if (!header.hasOwnProperty('h')) {
|
|
629
|
-
header = {h: '', v: ''};
|
|
630
|
-
}
|
|
631
|
-
container.css({
|
|
632
|
-
overflow: 'hidden',
|
|
633
|
-
whiteSpace: 'nowrap'
|
|
634
|
-
});
|
|
635
|
-
let fragment = document.createDocumentFragment();
|
|
636
|
-
var row1 = $('<div/>',{style:"display:flex;"}).appendTo(fragment);
|
|
637
|
-
$('<input/>', {
|
|
638
|
-
class:"node-input-header-property-name",
|
|
639
|
-
type:"text",
|
|
640
|
-
placeholder: 'SIP Header'
|
|
641
|
-
})
|
|
642
|
-
.appendTo(row1);
|
|
643
|
-
$('<input/>', {
|
|
644
|
-
class:"node-input-value-property-name",
|
|
645
|
-
type:"text",
|
|
646
|
-
placeholder: 'value'
|
|
647
|
-
})
|
|
648
|
-
.appendTo(row1);
|
|
649
|
-
|
|
650
|
-
row1.find('.node-input-header-property-name').val(header.h);
|
|
651
|
-
row1.find('.node-input-value-property-name').val(header.v);
|
|
652
|
-
|
|
653
|
-
container[0].appendChild(fragment);
|
|
654
|
-
},
|
|
655
|
-
removable: true
|
|
656
|
-
});
|
|
657
|
-
console.log(`oneditprepare: coming in with headers: ${JSON.stringify(this.headers)}`);
|
|
658
|
-
if (!this.headers) {
|
|
659
|
-
var header = {
|
|
660
|
-
h: '',
|
|
661
|
-
v: '',
|
|
662
|
-
};
|
|
663
|
-
this.headers = [header];
|
|
664
|
-
}
|
|
665
|
-
|
|
666
|
-
for (var i=0; i < this.headers.length; i++) {
|
|
667
|
-
var header = this.headers[i];
|
|
668
|
-
$("#node-input-headers-container").editableList('addItem', header);
|
|
669
|
-
}
|
|
670
|
-
},
|
|
671
|
-
oneditsave: function () {
|
|
672
|
-
var targets = $("#node-input-target-container").editableList('items');
|
|
673
|
-
var node = this;
|
|
674
|
-
node.targets = [];
|
|
675
|
-
console.log(`entering oneditsave with ${targets.length} targets`);
|
|
676
|
-
|
|
677
|
-
targets.each(function(i) {
|
|
678
|
-
var target = $(this);
|
|
679
|
-
var type = target.find('.node-input-target-type').val();
|
|
680
|
-
var varType = target.find('.node-input-target-property-name').typedInput('type');
|
|
681
|
-
var dest = target.find('.node-input-target-property-name').typedInput('value');
|
|
682
|
-
var user = target.find('.node-input-target-property-authuser').val();
|
|
683
|
-
var pass = target.find('.node-input-target-property-authpassword').val();
|
|
684
|
-
var trunk = target.find('.node-input-target-property-trunk').val();
|
|
685
|
-
if (!['phone', 'user', 'sip', 'teams'].includes(type) || 0 === dest.length) return;
|
|
686
|
-
|
|
687
|
-
var t = {
|
|
688
|
-
type,
|
|
689
|
-
varType,
|
|
690
|
-
dest
|
|
691
|
-
};
|
|
692
|
-
if ('sip' === type && user.length > 0 && pass.length > 0) {
|
|
693
|
-
Object.assign(t, {user, pass});
|
|
694
|
-
}
|
|
695
|
-
if ('phone' === type && trunk.length > 0) {
|
|
696
|
-
t.trunk = trunk;
|
|
697
|
-
}
|
|
698
|
-
node.targets.push(t);
|
|
699
|
-
});
|
|
700
|
-
console.log(`saved targets ${JSON.stringify(node.targets)}`);
|
|
701
|
-
|
|
702
|
-
var headers = [];
|
|
703
|
-
$("#node-input-headers-container").editableList('items').each(function(i) {
|
|
704
|
-
var header = $(this);
|
|
705
|
-
console.log(`header: ${JSON.stringify(header)}`);
|
|
706
|
-
var h = header.find(".node-input-header-property-name").val();
|
|
707
|
-
var v = header.find(".node-input-value-property-name").val();
|
|
708
|
-
console.log(`added ${h}: ${v}`);
|
|
709
|
-
var obj = {};
|
|
710
|
-
obj[h] = v;
|
|
711
|
-
headers.push({h, v});
|
|
712
|
-
});
|
|
713
|
-
node.headers = headers;
|
|
714
|
-
console.log(`saved headers ${JSON.stringify(node.headers)}`);
|
|
715
|
-
},
|
|
716
|
-
});
|
|
717
|
-
|
|
718
|
-
RED.nodes.registerType('dialogflow',{
|
|
719
|
-
category: 'jambonz',
|
|
720
|
-
color: '#bbabaa',
|
|
721
|
-
defaults: {
|
|
722
|
-
name: {value: ''},
|
|
723
|
-
recognizerlang: {value: 'en-US'},
|
|
724
|
-
serviceAccountCredentials: {required: true, value: ''},
|
|
725
|
-
serviceAccountCredentialsType: {value: 'msg'},
|
|
726
|
-
project: {required: true, value: ''},
|
|
727
|
-
projectType: {value: 'str'},
|
|
728
|
-
environment: {value: ''},
|
|
729
|
-
environmentType: {value: 'str'},
|
|
730
|
-
welcomeEvent: {},
|
|
731
|
-
welcomeEventType: {value: 'str'},
|
|
732
|
-
welcomeEventParams: {},
|
|
733
|
-
welcomeEventParamsType: {value: 'json'},
|
|
734
|
-
passDtmf: {value: false},
|
|
735
|
-
inputTimeout: {},
|
|
736
|
-
inputTimeoutType: {value: 'num'},
|
|
737
|
-
noInputEvent: {},
|
|
738
|
-
noInputEventType: {value: 'str'},
|
|
739
|
-
bargein: {value: false},
|
|
740
|
-
eventHook: {},
|
|
741
|
-
eventHookType: {value: 'str'},
|
|
742
|
-
actionHook: {},
|
|
743
|
-
actionHookType: {value: 'str'},
|
|
744
|
-
evtAll: {value: true},
|
|
745
|
-
evtIntent: {value: false},
|
|
746
|
-
evtTranscript: {value: false},
|
|
747
|
-
evtInterimTranscript: {value: false},
|
|
748
|
-
evtDtmf: {value: false},
|
|
749
|
-
evtEndUtterance: {value: false},
|
|
750
|
-
evtStartPlay: {value: false},
|
|
751
|
-
evtEndPlay: {value: false},
|
|
752
|
-
evtNoInput: {value: false},
|
|
753
|
-
prompt: {value: 'dialogflow', required: true},
|
|
754
|
-
vendor: {value: 'default'},
|
|
755
|
-
lang: {value: 'default'},
|
|
756
|
-
voice: {value: 'default'},
|
|
757
|
-
xlang: {},
|
|
758
|
-
xvoice: {}
|
|
759
|
-
},
|
|
760
|
-
inputs:1,
|
|
761
|
-
outputs:1,
|
|
762
|
-
icon: "font-awesome/fa-cubes",
|
|
763
|
-
label: function() { return this.name || 'dialogflow';},
|
|
764
|
-
oneditprepare: function() {
|
|
765
|
-
var node = this;
|
|
766
|
-
$('#node-input-serviceAccountCredentials').typedInput({
|
|
767
|
-
typeField: $('#node-input-serviceAccountCredentialsType'),
|
|
768
|
-
types: ['json', 'msg', 'flow', 'global']
|
|
769
|
-
});
|
|
770
|
-
$('#node-input-project').typedInput({
|
|
771
|
-
typeField: $('#node-input-projectType'),
|
|
772
|
-
types: ['str','msg', 'flow', 'global']
|
|
773
|
-
});
|
|
774
|
-
$('#node-input-environment').typedInput({
|
|
775
|
-
typeField: $('#node-input-environmentType'),
|
|
776
|
-
types: ['str','msg', 'flow', 'global']
|
|
777
|
-
});
|
|
778
|
-
$('#node-input-welcomeEvent').typedInput({
|
|
779
|
-
typeField: $('#node-input-welcomeEventType'),
|
|
780
|
-
types: ['str','msg', 'flow', 'global']
|
|
781
|
-
});
|
|
782
|
-
$('#node-input-welcomeEventParams').typedInput({
|
|
783
|
-
typeField: $('#node-input-welcomeEventParamsType'),
|
|
784
|
-
types: ['json', 'msg', 'flow', 'global']
|
|
785
|
-
});
|
|
786
|
-
$('#node-input-eventHook').typedInput({
|
|
787
|
-
typeField: $('#node-input-eventHookType'),
|
|
788
|
-
types: ['str','msg', 'flow', 'global']
|
|
789
|
-
});
|
|
790
|
-
$('#node-input-actionHook').typedInput({
|
|
791
|
-
typeField: $('#node-input-actionHookType'),
|
|
792
|
-
types: ['str','msg', 'flow', 'global']
|
|
793
|
-
});
|
|
794
|
-
$('#node-input-inputTimeout').typedInput({
|
|
795
|
-
typeField: $('#node-input-inputTimeout'),
|
|
796
|
-
types: ['num','msg', 'flow', 'global']
|
|
797
|
-
});
|
|
798
|
-
$('#node-input-noinputEvent').typedInput({
|
|
799
|
-
typeField: $('#node-input-noinputEventType'),
|
|
800
|
-
types: ['str','msg', 'flow', 'global']
|
|
801
|
-
});
|
|
802
|
-
var promptElem = $('#node-input-prompt');
|
|
803
|
-
var ttsDiv = $('#tts-options');
|
|
804
|
-
var recLangElem = $('#node-input-recognizerlang');
|
|
805
|
-
|
|
806
|
-
prepareTtsControls(node);
|
|
807
|
-
var onPromptChanged = function () {
|
|
808
|
-
node.action = promptElem.find(':selected').val();
|
|
809
|
-
if ('tts' === node.action) ttsDiv.show();
|
|
810
|
-
else ttsDiv.hide();
|
|
811
|
-
}
|
|
812
|
-
promptElem.change(onPromptChanged);
|
|
813
|
-
|
|
814
|
-
var setTranscriptionLanguage = function() {
|
|
815
|
-
console.log(`setting transcription languages: ${dialogFlowOptions}`);
|
|
816
|
-
recLangElem.find('option').remove();
|
|
817
|
-
recLangElem.append(dialogFlowOptions);
|
|
818
|
-
}
|
|
819
|
-
|
|
820
|
-
setTranscriptionLanguage();
|
|
821
|
-
console.log(`setting lang to ${node.recognizerlang}`);
|
|
822
|
-
recLangElem.val(node.recognizerlang);
|
|
823
|
-
}
|
|
824
|
-
});
|
|
825
|
-
|
|
826
|
-
RED.nodes.registerType('enqueue',{
|
|
827
|
-
category: 'jambonz',
|
|
828
|
-
color: '#bbabaa',
|
|
829
|
-
defaults: {
|
|
830
|
-
name: {value: ''},
|
|
831
|
-
queue: {required: true, value: ''},
|
|
832
|
-
queueType: {value: 'str'},
|
|
833
|
-
actionHook: {},
|
|
834
|
-
actionHookType: {value: 'str'},
|
|
835
|
-
waitHook: {},
|
|
836
|
-
waitHookType: {value: 'str'}
|
|
837
|
-
},
|
|
838
|
-
inputs:1,
|
|
839
|
-
outputs:1,
|
|
840
|
-
icon: "font-awesome/fa-cubes",
|
|
841
|
-
label: function() {
|
|
842
|
-
return this.name || 'enqueue';
|
|
843
|
-
},
|
|
844
|
-
oneditprepare: function() {
|
|
845
|
-
$('#node-input-queue').typedInput({
|
|
846
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
847
|
-
typeField: $('#node-input-queueType')
|
|
848
|
-
});
|
|
849
|
-
$('#node-input-actionHook').typedInput({
|
|
850
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
851
|
-
typeField: $('#node-input-actionHookType')
|
|
852
|
-
});
|
|
853
|
-
$('#node-input-waitHook').typedInput({
|
|
854
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
855
|
-
typeField: $('#node-input-waitHookType')
|
|
856
|
-
});
|
|
857
|
-
}
|
|
858
|
-
});
|
|
859
|
-
|
|
860
|
-
RED.nodes.registerType('gather',{
|
|
861
|
-
category: 'jambonz',
|
|
862
|
-
color: '#bbabaa',
|
|
863
|
-
defaults: {
|
|
864
|
-
name: {value: ''},
|
|
865
|
-
actionhook: {value: ''},
|
|
866
|
-
finishonkey: {value: ''},
|
|
867
|
-
dtmfinput: {value: 0},
|
|
868
|
-
speechinput: {value: 1},
|
|
869
|
-
numdigits: {value: ''},
|
|
870
|
-
timeout: {value: ''},
|
|
871
|
-
prompttype: {value: 'say'},
|
|
872
|
-
playurl: {value: ''},
|
|
873
|
-
playurlType: {value: 'str'},
|
|
874
|
-
text: {value: ''},
|
|
875
|
-
vendor: {value: 'default'},
|
|
876
|
-
lang: {value: 'default'},
|
|
877
|
-
voice: {value: 'default'},
|
|
878
|
-
xvoice: {},
|
|
879
|
-
xlang: {},
|
|
880
|
-
transcriptionvendor: {value: 'default'},
|
|
881
|
-
recognizerlang: {value: 'default'},
|
|
882
|
-
recognizeraltlang: {},
|
|
883
|
-
recognizeraltlangType: {val: 'str'},
|
|
884
|
-
interim: {value: false},
|
|
885
|
-
profanityfilter: {value: false},
|
|
886
|
-
transcriptionhints: {},
|
|
887
|
-
transcriptionhintsType: {val: 'str'},
|
|
888
|
-
separaterecog: {value: false},
|
|
889
|
-
useenhanced: {value: false},
|
|
890
|
-
words: {value: false},
|
|
891
|
-
punctuation: {value: false},
|
|
892
|
-
diarization: {value: false},
|
|
893
|
-
diarizationmin: {value: 2},
|
|
894
|
-
diarizationminType: {value: 'num'},
|
|
895
|
-
diarizationmax: {value: 6},
|
|
896
|
-
diarizationmaxType: {value: 'num'},
|
|
897
|
-
interactiontype: {value: 'voice_command'},
|
|
898
|
-
naics: {value: 0},
|
|
899
|
-
naicsType: {value: 'num'},
|
|
900
|
-
identifychannels: {value: false},
|
|
901
|
-
speakerlabel: {value: false},
|
|
902
|
-
vocabularyname: {},
|
|
903
|
-
vocabularynameType: {value: 'str'},
|
|
904
|
-
vocabularyfiltername: {},
|
|
905
|
-
vocabularyfilternameType: {value: 'str'},
|
|
906
|
-
vocabularyfiltermethod: {}
|
|
907
|
-
},
|
|
908
|
-
inputs:1,
|
|
909
|
-
outputs:1,
|
|
910
|
-
icon: "font-awesome/fa-cubes",
|
|
911
|
-
label: function() { return this.name || 'gather';},
|
|
912
|
-
oneditprepare: function() {
|
|
913
|
-
var node = this;
|
|
914
|
-
prepareTtsControls(node);
|
|
915
|
-
prepareSttControls(node);
|
|
916
|
-
|
|
917
|
-
$('#node-input-playurl').typedInput({
|
|
918
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
919
|
-
typeField: $('#node-input-playurlType')
|
|
920
|
-
});
|
|
921
|
-
$('#node-input-transcriptionhints').typedInput({
|
|
922
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
923
|
-
typeField: $('#node-input-transcriptionhintsType')
|
|
924
|
-
});
|
|
925
|
-
$('#node-input-recognizeraltlang').typedInput({
|
|
926
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
927
|
-
typeField: $('#node-recognizeraltlangType')
|
|
928
|
-
});
|
|
929
|
-
$('#node-input-naics').typedInput({
|
|
930
|
-
types: ['num', 'msg', 'flow', 'global'],
|
|
931
|
-
typeField: $('#node-input-naicsType')
|
|
932
|
-
});
|
|
933
|
-
|
|
934
|
-
var enableSpeech = function(enabled) {
|
|
935
|
-
console.log(`enable speech: ${enabled}`);
|
|
936
|
-
if (enabled) $('#speech-input-container').show();
|
|
937
|
-
else $('#speech-input-container').hide();
|
|
938
|
-
}
|
|
939
|
-
var enableDtmf = function(enabled) {
|
|
940
|
-
console.log(`enable dtmf: ${enabled}`);
|
|
941
|
-
if (enabled) $('#dtmf-input-container').show();
|
|
942
|
-
else $('#dtmf-input-container').hide();
|
|
943
|
-
}
|
|
944
|
-
|
|
945
|
-
$('#node-input-speechinput').change(function() {
|
|
946
|
-
var doSpeech = $('#node-input-speechinput:checked').val();
|
|
947
|
-
enableSpeech(doSpeech);
|
|
948
|
-
});
|
|
949
|
-
$('#node-input-dtmfinput').change(function() {
|
|
950
|
-
var doDtmf = $('#node-input-dtmfinput:checked').val();
|
|
951
|
-
enableDtmf(doDtmf);
|
|
952
|
-
});
|
|
953
|
-
|
|
954
|
-
var onSayPlayChanged = function () {
|
|
955
|
-
var type = $('#node-input-prompttype').find(':selected').val();
|
|
956
|
-
console.log(`prompt type changed to ${type}`);
|
|
957
|
-
if (type === 'say') {
|
|
958
|
-
$('#say-container').show();
|
|
959
|
-
$('#play-container').hide();
|
|
960
|
-
}
|
|
961
|
-
else {
|
|
962
|
-
$('#play-container').show();
|
|
963
|
-
$('#say-container').hide();
|
|
964
|
-
}
|
|
965
|
-
}
|
|
966
|
-
|
|
967
|
-
$('#node-input-prompttype').change(onSayPlayChanged);
|
|
968
|
-
}
|
|
969
|
-
});
|
|
970
|
-
|
|
971
|
-
RED.nodes.registerType('hangup',{
|
|
972
|
-
category: 'jambonz',
|
|
973
|
-
color: '#bbabaa',
|
|
974
|
-
defaults: {
|
|
975
|
-
name: {value: ''},
|
|
976
|
-
},
|
|
977
|
-
inputs:1,
|
|
978
|
-
outputs:1,
|
|
979
|
-
icon: "font-awesome/fa-cubes",
|
|
980
|
-
label: function() { return this.name || 'hangup';},
|
|
981
|
-
});
|
|
982
|
-
|
|
983
|
-
RED.nodes.registerType('leave',{
|
|
984
|
-
category: 'jambonz',
|
|
985
|
-
color: '#bbabaa',
|
|
986
|
-
defaults: {
|
|
987
|
-
name: {value: ''},
|
|
988
|
-
},
|
|
989
|
-
inputs:1,
|
|
990
|
-
outputs:1,
|
|
991
|
-
icon: "font-awesome/fa-cubes",
|
|
992
|
-
label: function() { return this.name || 'leave';}
|
|
993
|
-
});
|
|
994
|
-
|
|
995
|
-
RED.nodes.registerType('lex',{
|
|
996
|
-
category: 'jambonz',
|
|
997
|
-
color: '#bbabaa',
|
|
998
|
-
defaults: {
|
|
999
|
-
name: {value: ''},
|
|
1000
|
-
aws: {value: '', type: 'aws_auth'},
|
|
1001
|
-
bot: {required: true},
|
|
1002
|
-
botType: {value: 'str'},
|
|
1003
|
-
alias: {required: true},
|
|
1004
|
-
aliasType: {value: 'str'},
|
|
1005
|
-
region: {required: true, value: 'us-east-1'},
|
|
1006
|
-
locale: {value: 'en_US'},
|
|
1007
|
-
localeType: {value: 'str'},
|
|
1008
|
-
specifyIntent: {value: true},
|
|
1009
|
-
intent: {value: ''},
|
|
1010
|
-
intentType: {value: 'str'},
|
|
1011
|
-
slots: {value: ''},
|
|
1012
|
-
slotsType: {value: 'json'},
|
|
1013
|
-
metadata: {value: ''},
|
|
1014
|
-
metadataType: {value: 'json'},
|
|
1015
|
-
welcomeMessage: {value: 'str'},
|
|
1016
|
-
eventHook: {},
|
|
1017
|
-
eventHookType: {value: 'str'},
|
|
1018
|
-
actionHook: {},
|
|
1019
|
-
actionHookType: {value: 'str'},
|
|
1020
|
-
bargein: {value: true},
|
|
1021
|
-
inputTimeout: {},
|
|
1022
|
-
inputTimeoutType: {value: 'num'},
|
|
1023
|
-
passDtmf: {value: true},
|
|
1024
|
-
prompt: {value: 'lex', required: true},
|
|
1025
|
-
vendor: {value: 'default'},
|
|
1026
|
-
lang: {value: 'default'},
|
|
1027
|
-
voice: {value: 'default'},
|
|
1028
|
-
xlang: {},
|
|
1029
|
-
xvoice: {}
|
|
1030
|
-
},
|
|
1031
|
-
inputs:1,
|
|
1032
|
-
outputs:1,
|
|
1033
|
-
icon: "font-awesome/fa-cubes",
|
|
1034
|
-
label: function() { return this.name || 'lex';},
|
|
1035
|
-
oneditprepare: () => {
|
|
1036
|
-
var node = this;
|
|
1037
|
-
var promptElem = $('#node-input-prompt');
|
|
1038
|
-
var ttsDiv = $('#tts-options');
|
|
1039
|
-
|
|
1040
|
-
prepareTtsControls(node);
|
|
1041
|
-
|
|
1042
|
-
$('#node-input-bot').typedInput({
|
|
1043
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
1044
|
-
typeField: $('#node-input-botType')
|
|
1045
|
-
});
|
|
1046
|
-
$('#node-input-alias').typedInput({
|
|
1047
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
1048
|
-
typeField: $('#node-input-aliasType')
|
|
1049
|
-
});
|
|
1050
|
-
$('#node-input-locale').typedInput({
|
|
1051
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
1052
|
-
typeField: $('#node-input-localeType')
|
|
1053
|
-
});
|
|
1054
|
-
$('#node-input-intent').typedInput({
|
|
1055
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
1056
|
-
typeField: $('#node-input-intentType')
|
|
1057
|
-
});
|
|
1058
|
-
$('#node-input-inputTimeout').typedInput({
|
|
1059
|
-
types: ['num', 'msg', 'flow', 'global'],
|
|
1060
|
-
typeField: $('#node-input-inputTimeoutType')
|
|
1061
|
-
});
|
|
1062
|
-
$('#node-input-slots').typedInput({
|
|
1063
|
-
typeField: $('#node-input-slotsType'),
|
|
1064
|
-
types: ['json', 'msg', 'flow', 'global']
|
|
1065
|
-
});
|
|
1066
|
-
$('#node-input-metadata').typedInput({
|
|
1067
|
-
typeField: $('#node-input-metadataType'),
|
|
1068
|
-
types: ['json', 'msg', 'flow', 'global']
|
|
1069
|
-
});
|
|
1070
|
-
|
|
1071
|
-
var onPromptChanged = function () {
|
|
1072
|
-
node.action = promptElem.find(':selected').val();
|
|
1073
|
-
if ('tts' === node.action) ttsDiv.show();
|
|
1074
|
-
else ttsDiv.hide();
|
|
1075
|
-
}
|
|
1076
|
-
|
|
1077
|
-
promptElem.change(onPromptChanged);
|
|
1078
|
-
$('#node-input-specifyIntent').change(function() {
|
|
1079
|
-
const doIntent = $('#node-input-specifyIntent:checked').val();
|
|
1080
|
-
console.log('intent? ' + doIntent);
|
|
1081
|
-
if (doIntent) {
|
|
1082
|
-
$('#intent-options').show();
|
|
1083
|
-
$('#welcome-msg-options').hide();
|
|
1084
|
-
}
|
|
1085
|
-
else {
|
|
1086
|
-
$('#intent-options').hide();
|
|
1087
|
-
$('#welcome-msg-options').show();
|
|
1088
|
-
}
|
|
1089
|
-
});
|
|
1090
|
-
}
|
|
1091
|
-
});
|
|
1092
|
-
|
|
1093
|
-
RED.nodes.registerType('listen',{
|
|
1094
|
-
category: 'jambonz',
|
|
1095
|
-
color: '#bbabaa',
|
|
1096
|
-
defaults: {
|
|
1097
|
-
name: {value: ''},
|
|
1098
|
-
actionhook: {},
|
|
1099
|
-
actionhookType: {value: 'str'},
|
|
1100
|
-
url: {required: true},
|
|
1101
|
-
urlType: {value: 'str'},
|
|
1102
|
-
authuser: {},
|
|
1103
|
-
authuserType: {val: 'str'},
|
|
1104
|
-
authpass: {},
|
|
1105
|
-
authpassType: {val: 'str'},
|
|
1106
|
-
finishonkey: {},
|
|
1107
|
-
maxlength: {},
|
|
1108
|
-
metadata: {},
|
|
1109
|
-
metadataType: {value: 'json'},
|
|
1110
|
-
mixtype: {value: 'mono'},
|
|
1111
|
-
beep: {value: false},
|
|
1112
|
-
samplerate: {value: 8000},
|
|
1113
|
-
timeout: {},
|
|
1114
|
-
transcriptionhook: {},
|
|
1115
|
-
transcriptionhookType: {value: 'str'},
|
|
1116
|
-
transcriptionvendor: {value: 'default'},
|
|
1117
|
-
recognizerlang: {value: 'default'},
|
|
1118
|
-
recognizeraltlang: {},
|
|
1119
|
-
recognizeraltlangType: {val: 'str'},
|
|
1120
|
-
interim: {value: false},
|
|
1121
|
-
profanityfilter: {value: false},
|
|
1122
|
-
transcriptionhints: {},
|
|
1123
|
-
transcriptionhintsType: {val: 'str'},
|
|
1124
|
-
separaterecog: {value: false},
|
|
1125
|
-
useenhanced: {value: false},
|
|
1126
|
-
words: {value: false},
|
|
1127
|
-
punctuation: {value: false},
|
|
1128
|
-
diarization: {value: false},
|
|
1129
|
-
diarizationmin: {value: 2},
|
|
1130
|
-
diarizationminType: {value: 'num'},
|
|
1131
|
-
diarizationmax: {value: 6},
|
|
1132
|
-
diarizationmaxType: {value: 'num'},
|
|
1133
|
-
interactiontype: {value: 'unspecified'},
|
|
1134
|
-
naics: {value: 0},
|
|
1135
|
-
naicsType: {value: 'num'},
|
|
1136
|
-
identifychannels: {value: false},
|
|
1137
|
-
speakerlabel: {value: false},
|
|
1138
|
-
vocabularyname: {},
|
|
1139
|
-
vocabularynameType: {value: 'str'},
|
|
1140
|
-
vocabularyfiltername: {},
|
|
1141
|
-
vocabularyfilternameType: {value: 'str'},
|
|
1142
|
-
vocabularyfiltermethod: {}
|
|
1143
|
-
},
|
|
1144
|
-
inputs:1,
|
|
1145
|
-
outputs:1,
|
|
1146
|
-
icon: "font-awesome/fa-cubes",
|
|
1147
|
-
label: function() { return this.name || 'listen';},
|
|
1148
|
-
oneditprepare: function() {
|
|
1149
|
-
var node = this;
|
|
1150
|
-
$('#node-input-actionhook').typedInput({
|
|
1151
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
1152
|
-
typeField: $('#node-input-actionhookType')
|
|
1153
|
-
});
|
|
1154
|
-
$('#node-input-url').typedInput({
|
|
1155
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
1156
|
-
typeField: $('#node-input-urlType')
|
|
1157
|
-
});
|
|
1158
|
-
$('#node-input-authuser').typedInput({
|
|
1159
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
1160
|
-
typeField: $('#node-input-authuserType')
|
|
1161
|
-
});
|
|
1162
|
-
$('#node-input-authpassword').typedInput({
|
|
1163
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
1164
|
-
typeField: $('#node-input-authpasswordType')
|
|
1165
|
-
});
|
|
1166
|
-
$('#node-input-metadata').typedInput({
|
|
1167
|
-
types: ['json', 'msg', 'flow', 'global'],
|
|
1168
|
-
typeField: $('#node-input-metadataType')
|
|
1169
|
-
});
|
|
1170
|
-
$('#node-input-transcriptionhook').typedInput({
|
|
1171
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
1172
|
-
typeField: $('#node-input-transcriptionhookType')
|
|
1173
|
-
});
|
|
1174
|
-
$('#node-input-transcriptionhints').typedInput({
|
|
1175
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
1176
|
-
typeField: $('#node-input-transcriptionhintsType')
|
|
1177
|
-
});
|
|
1178
|
-
$('#node-input-recognizeraltlang').typedInput({
|
|
1179
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
1180
|
-
typeField: $('#node-recognizeraltlangType')
|
|
1181
|
-
});
|
|
1182
|
-
$('#node-input-diarizationmin').typedInput({
|
|
1183
|
-
types: ['num', 'msg', 'flow', 'global'],
|
|
1184
|
-
typeField: $('#node-input-diarizationminType')
|
|
1185
|
-
});
|
|
1186
|
-
$('#node-input-diarizationmax').typedInput({
|
|
1187
|
-
types: ['num', 'msg', 'flow', 'global'],
|
|
1188
|
-
typeField: $('#node-input-diarizationmaxType')
|
|
1189
|
-
});
|
|
1190
|
-
$('#node-input-naics').typedInput({
|
|
1191
|
-
types: ['num', 'msg', 'flow', 'global'],
|
|
1192
|
-
typeField: $('#node-input-naicsType')
|
|
1193
|
-
});
|
|
1194
|
-
|
|
1195
|
-
prepareSttControls(node);
|
|
1196
|
-
}
|
|
1197
|
-
});
|
|
1198
|
-
|
|
1199
|
-
RED.nodes.registerType('message', {
|
|
1200
|
-
category: 'jambonz',
|
|
1201
|
-
color: '#bbabaa',
|
|
1202
|
-
defaults: {
|
|
1203
|
-
name: {value: ''},
|
|
1204
|
-
from: {value: '', required: true},
|
|
1205
|
-
fromType: {value: ''},
|
|
1206
|
-
to: {value: '', required: true},
|
|
1207
|
-
toType: {value: ''},
|
|
1208
|
-
text: {value: '', required: true},
|
|
1209
|
-
textType: {value: ''},
|
|
1210
|
-
provider: {value: ''},
|
|
1211
|
-
providerType: {value: ''},
|
|
1212
|
-
},
|
|
1213
|
-
inputs:1,
|
|
1214
|
-
outputs:1,
|
|
1215
|
-
icon: "font-awesome/fa-cubes",
|
|
1216
|
-
label: function() {
|
|
1217
|
-
return this.name || 'message';
|
|
1218
|
-
},
|
|
1219
|
-
oneditprepare: function() {
|
|
1220
|
-
var node = this;
|
|
1221
|
-
|
|
1222
|
-
$('#node-input-from').typedInput({
|
|
1223
|
-
default: $('#node-input-fromType').val(),
|
|
1224
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1225
|
-
typeField: $('#node-input-fromType')
|
|
1226
|
-
});
|
|
1227
|
-
$('#node-input-to').typedInput({
|
|
1228
|
-
default: $('#node-input-toType').val(),
|
|
1229
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1230
|
-
typeField: $('#node-input-toType')
|
|
1231
|
-
});
|
|
1232
|
-
$('#node-input-text').typedInput({
|
|
1233
|
-
default: $('#node-input-textType').val(),
|
|
1234
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1235
|
-
typeField: $('#node-input-textType')
|
|
1236
|
-
});
|
|
1237
|
-
$('#node-input-provider').typedInput({
|
|
1238
|
-
default: $('#node-input-providerType').val(),
|
|
1239
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1240
|
-
typeField: $('#node-input-providerType')
|
|
1241
|
-
});
|
|
1242
|
-
}
|
|
1243
|
-
});
|
|
1244
|
-
|
|
1245
|
-
RED.nodes.registerType('pause',{
|
|
1246
|
-
category: 'jambonz',
|
|
1247
|
-
color: '#bbabaa',
|
|
1248
|
-
defaults: {
|
|
1249
|
-
name: {value: ''},
|
|
1250
|
-
len: {required: true},
|
|
1251
|
-
lenType: {value: 'num'},
|
|
1252
|
-
|
|
1253
|
-
},
|
|
1254
|
-
inputs:1,
|
|
1255
|
-
outputs:1,
|
|
1256
|
-
icon: "font-awesome/fa-cubes",
|
|
1257
|
-
label: function() { return this.name || 'pause';},
|
|
1258
|
-
oneditprepare: function() {
|
|
1259
|
-
$('#node-input-len').typedInput({
|
|
1260
|
-
default: $('#node-input-lenType').val(),
|
|
1261
|
-
types: ['num','msg', 'flow', 'global'],
|
|
1262
|
-
typeField: $('#node-input-lenType')
|
|
1263
|
-
});
|
|
1264
|
-
}
|
|
1265
|
-
});
|
|
1266
|
-
|
|
1267
|
-
RED.nodes.registerType('play',{
|
|
1268
|
-
category: 'jambonz',
|
|
1269
|
-
color: '#bbabaa',
|
|
1270
|
-
defaults: {
|
|
1271
|
-
name: {value: ''},
|
|
1272
|
-
url: {required: true},
|
|
1273
|
-
urlType: {value: 'str'},
|
|
1274
|
-
early: {value: false},
|
|
1275
|
-
loop: {value: 1, required: true, validate: RED.validators.number()},
|
|
1276
|
-
},
|
|
1277
|
-
inputs:1,
|
|
1278
|
-
outputs:1,
|
|
1279
|
-
icon: "font-awesome/fa-cubes",
|
|
1280
|
-
label: function() { return this.name || 'play';},
|
|
1281
|
-
oneditprepare: function() {
|
|
1282
|
-
$('#node-input-url').typedInput({
|
|
1283
|
-
default: $('#node-input-urlType').val(),
|
|
1284
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1285
|
-
typeField: $('#node-input-urlType')
|
|
1286
|
-
});
|
|
1287
|
-
}
|
|
1288
|
-
});
|
|
1289
|
-
|
|
1290
|
-
RED.nodes.registerType('redirect', {
|
|
1291
|
-
category: 'jambonz',
|
|
1292
|
-
color: '#bbabaa',
|
|
1293
|
-
defaults: {
|
|
1294
|
-
name: {value: ''},
|
|
1295
|
-
hook: {required: true},
|
|
1296
|
-
hookType: {value: 'str'}
|
|
1297
|
-
},
|
|
1298
|
-
inputs:1,
|
|
1299
|
-
outputs:1,
|
|
1300
|
-
icon: "font-awesome/fa-cubes",
|
|
1301
|
-
label: function() {
|
|
1302
|
-
return this.name || 'redirect';
|
|
1303
|
-
},
|
|
1304
|
-
oneditprepare: function() {
|
|
1305
|
-
$('#node-input-hook').typedInput({
|
|
1306
|
-
types: ['str', 'msg', 'flow', 'global', 'jsonata', 'env'],
|
|
1307
|
-
typeField: $('#node-input-hookType')
|
|
1308
|
-
});
|
|
1309
|
-
}
|
|
1310
|
-
});
|
|
1311
|
-
|
|
1312
|
-
RED.nodes.registerType('say',{
|
|
1313
|
-
category: 'jambonz',
|
|
1314
|
-
color: '#bbabaa',
|
|
1315
|
-
defaults: {
|
|
1316
|
-
name: {value: ''},
|
|
1317
|
-
text: {required: true},
|
|
1318
|
-
early: {value: false},
|
|
1319
|
-
loop: {value: 1},
|
|
1320
|
-
vendor: {value: 'default'},
|
|
1321
|
-
lang: {value: 'default'},
|
|
1322
|
-
xlang: {},
|
|
1323
|
-
voice: {value: 'default'},
|
|
1324
|
-
xvoice: {}
|
|
1325
|
-
},
|
|
1326
|
-
inputs:1,
|
|
1327
|
-
outputs:1,
|
|
1328
|
-
icon: "font-awesome/fa-cubes",
|
|
1329
|
-
label: function() { return this.name || 'say';},
|
|
1330
|
-
oneditprepare: () => {
|
|
1331
|
-
var node = this;
|
|
1332
|
-
prepareTtsControls(node);
|
|
1333
|
-
}
|
|
1334
|
-
});
|
|
1335
|
-
|
|
1336
|
-
RED.nodes.registerType('sip:decline',{
|
|
1337
|
-
category: 'jambonz',
|
|
1338
|
-
color: '#bbabaa',
|
|
1339
|
-
defaults: {
|
|
1340
|
-
name: {value: ''},
|
|
1341
|
-
status: {},
|
|
1342
|
-
statusType: {value: 'num'},
|
|
1343
|
-
reason: {value: ''},
|
|
1344
|
-
reasonType: {value: 'str'}
|
|
1345
|
-
},
|
|
1346
|
-
inputs:1,
|
|
1347
|
-
outputs:1,
|
|
1348
|
-
icon: "font-awesome/fa-cubes",
|
|
1349
|
-
label: function() { return this.name || 'sip:decline';},
|
|
1350
|
-
oneditprepare: function() {
|
|
1351
|
-
$('#node-input-status').typedInput({
|
|
1352
|
-
default: $('#node-input-statusType').val(),
|
|
1353
|
-
types: ['num','msg', 'flow', 'global'],
|
|
1354
|
-
typeField: $('#node-input-statusType')
|
|
1355
|
-
});
|
|
1356
|
-
$('#node-input-reason').typedInput({
|
|
1357
|
-
default: $('#node-input-reasonType').val(),
|
|
1358
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1359
|
-
typeField: $('#node-input-reasonType')
|
|
1360
|
-
});
|
|
1361
|
-
}
|
|
1362
|
-
});
|
|
1363
|
-
|
|
1364
|
-
RED.nodes.registerType('tag',{
|
|
1365
|
-
category: 'jambonz',
|
|
1366
|
-
color: '#bbabaa',
|
|
1367
|
-
defaults: {
|
|
1368
|
-
name: {value: ''},
|
|
1369
|
-
data: {required: true},
|
|
1370
|
-
dataType: {value: 'json'}
|
|
1371
|
-
},
|
|
1372
|
-
inputs:1,
|
|
1373
|
-
outputs:1,
|
|
1374
|
-
icon: "font-awesome/fa-cubes",
|
|
1375
|
-
label: function() { return this.name || 'tag';},
|
|
1376
|
-
oneditprepare: function() {
|
|
1377
|
-
$('#node-input-data').typedInput({
|
|
1378
|
-
default: $('#node-input-dataType').val(),
|
|
1379
|
-
types: ['json', 'msg', 'flow', 'global'],
|
|
1380
|
-
typeField: $('#node-input-dataType')
|
|
1381
|
-
});
|
|
1382
|
-
}
|
|
1383
|
-
});
|
|
1384
|
-
|
|
1385
|
-
RED.nodes.registerType('jambonz_auth',{
|
|
1386
|
-
category: 'config',
|
|
1387
|
-
credentials: {
|
|
1388
|
-
url: {type: 'text'},
|
|
1389
|
-
accountSid: {type: 'text'},
|
|
1390
|
-
apiToken: {type: 'text'}
|
|
1391
|
-
},
|
|
1392
|
-
label: function() {
|
|
1393
|
-
return this.credentials ? this.credentials.url : null;
|
|
1394
|
-
},
|
|
1395
|
-
oneditprepare: function() {
|
|
1396
|
-
$('#btn-test-credentials').on('click', testCredentials);
|
|
1397
|
-
}
|
|
1398
|
-
});
|
|
1399
|
-
|
|
1400
|
-
RED.nodes.registerType('aws_auth',{
|
|
1401
|
-
category: 'config',
|
|
1402
|
-
credentials: {
|
|
1403
|
-
accessKey: {type: 'text'},
|
|
1404
|
-
secretAccessKey: {type: 'text'}
|
|
1405
|
-
},
|
|
1406
|
-
label: function() {
|
|
1407
|
-
if (!this.credentials) return null;
|
|
1408
|
-
const akey = this.credentials.accessKey;
|
|
1409
|
-
let mask = '';
|
|
1410
|
-
for (let i = 4; i < akey.length; i++) mask += '*';
|
|
1411
|
-
return akey.substr(0, 4) + mask;
|
|
1412
|
-
}
|
|
1413
|
-
});
|
|
1414
|
-
|
|
1415
|
-
RED.nodes.registerType('lcc',{
|
|
1416
|
-
category: 'jambonz',
|
|
1417
|
-
color: '#aebfb9',
|
|
1418
|
-
defaults: {
|
|
1419
|
-
name: {value: ''},
|
|
1420
|
-
server: {value: '', required: true, type: 'jambonz_auth'},
|
|
1421
|
-
callSid: {required: true},
|
|
1422
|
-
callSidType: {value: 'msg'},
|
|
1423
|
-
action: {value: 'hangup', required: true},
|
|
1424
|
-
text: {value: '', validate: function(v) {
|
|
1425
|
-
const action = $('#node-input-action').val();
|
|
1426
|
-
return action !== 'whisper' || v.length > 0;
|
|
1427
|
-
}},
|
|
1428
|
-
vendor: {value: 'default'},
|
|
1429
|
-
lang: {value: 'default'},
|
|
1430
|
-
voice: {value: 'default'},
|
|
1431
|
-
callHook: {value: '', validate: function(v) {
|
|
1432
|
-
const action = $('#node-input-action').val();
|
|
1433
|
-
return action !== 'redirect' || v.length > 0;
|
|
1434
|
-
}},
|
|
1435
|
-
callHookType: {value: 'str'},
|
|
1436
|
-
waitHook: {value: '', validate: function(v) {
|
|
1437
|
-
const action = $('#node-input-action').val();
|
|
1438
|
-
return action !== 'hold_conf' || v.length > 0;
|
|
1439
|
-
}},
|
|
1440
|
-
waitHookType: {value: 'str'},
|
|
1441
|
-
},
|
|
1442
|
-
inputs:1,
|
|
1443
|
-
outputs:1,
|
|
1444
|
-
icon: "font-awesome/fa-cubes",
|
|
1445
|
-
label: function() {
|
|
1446
|
-
return this.name || (this.action ? `LCC - ${this.action}` : 'LCC');
|
|
1447
|
-
},
|
|
1448
|
-
oneditprepare: function() {
|
|
1449
|
-
var node = this;
|
|
1450
|
-
var actionElem = $('#node-input-action');
|
|
1451
|
-
var vendorElem = $('#node-input-vendor');
|
|
1452
|
-
var langElem = $('#node-input-lang');
|
|
1453
|
-
var voiceElem = $('#node-input-voice');
|
|
1454
|
-
var sayDiv = $('#say-options');
|
|
1455
|
-
var redirectDiv = $('#redirect-options');
|
|
1456
|
-
var waitHookDiv = $('#wait-options');
|
|
1457
|
-
sayDiv.hide();
|
|
1458
|
-
waitHookDiv.hide();
|
|
1459
|
-
|
|
1460
|
-
$('#node-input-callSid').typedInput({
|
|
1461
|
-
default: $('#node-input-callSidType').val(),
|
|
1462
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1463
|
-
typeField: $('#node-input-callSidType')
|
|
1464
|
-
});
|
|
1465
|
-
$('#node-input-callHook').typedInput({
|
|
1466
|
-
default: $('#node-input-callHookType').val(),
|
|
1467
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1468
|
-
typeField: $('#node-input-callHookType')
|
|
1469
|
-
});
|
|
1470
|
-
$('#node-input-waitHook').typedInput({
|
|
1471
|
-
default: $('#node-input-waitHookType').val(),
|
|
1472
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1473
|
-
typeField: $('#node-input-waitHookType')
|
|
1474
|
-
});
|
|
1475
|
-
|
|
1476
|
-
var onActionChanged = function () {
|
|
1477
|
-
node.action = actionElem.find(':selected').val();
|
|
1478
|
-
if ('whisper' === node.action) sayDiv.show();
|
|
1479
|
-
else sayDiv.hide();
|
|
1480
|
-
if ('redirect' === node.action) redirectDiv.show();
|
|
1481
|
-
else redirectDiv.hide();
|
|
1482
|
-
if ('hold_conf' === node.action) waitHookDiv.show();
|
|
1483
|
-
else waitHookDiv.hide();
|
|
1484
|
-
}
|
|
1485
|
-
|
|
1486
|
-
var onVendorChanged = function() {
|
|
1487
|
-
node.vendor = vendorElem.find(':selected').val();
|
|
1488
|
-
console.log(`say vendor changed to ${node.vendor}`);
|
|
1489
|
-
setLanguage(node.vendor);
|
|
1490
|
-
}
|
|
1491
|
-
|
|
1492
|
-
var onLangChanged = function() {
|
|
1493
|
-
node.lang = langElem.find(':selected').val();
|
|
1494
|
-
console.log(`language changed to ${node.lang}`);
|
|
1495
|
-
setVoice(node.vendor, node.lang)
|
|
1496
|
-
}
|
|
1497
|
-
|
|
1498
|
-
var onVoiceChanged = function() {
|
|
1499
|
-
node.voice = voiceElem.find(':selected').val();
|
|
1500
|
-
console.log(`voice changed to ${node.voice}`);
|
|
1501
|
-
}
|
|
1502
|
-
|
|
1503
|
-
var setLanguage = function(v) {
|
|
1504
|
-
langElem.find('option').remove();
|
|
1505
|
-
voiceElem.find('option').remove();
|
|
1506
|
-
|
|
1507
|
-
switch (v) {
|
|
1508
|
-
case 'default':
|
|
1509
|
-
langElem.append('<option value="default" selected>--application default--</option>');
|
|
1510
|
-
voiceElem.append('<option value="default" selected>--application default--</option>');
|
|
1511
|
-
node.lang = 'default';
|
|
1512
|
-
node.voice = 'default';
|
|
1513
|
-
break;
|
|
1514
|
-
|
|
1515
|
-
case 'google':
|
|
1516
|
-
langElem.append(googleLanguageOptions);
|
|
1517
|
-
break;
|
|
1518
|
-
|
|
1519
|
-
case 'aws':
|
|
1520
|
-
langElem.append(awsLanguageOptions);
|
|
1521
|
-
break;
|
|
1522
|
-
}
|
|
1523
|
-
langElem.val(node.lang);
|
|
1524
|
-
}
|
|
1525
|
-
|
|
1526
|
-
var setVoice = function(vendor, lang) {
|
|
1527
|
-
console.log(`say set voice for language ${lang} vendor ${vendor}`);
|
|
1528
|
-
voiceElem.find('option').remove();
|
|
1529
|
-
|
|
1530
|
-
switch (vendor) {
|
|
1531
|
-
case 'default':
|
|
1532
|
-
voiceElem.append('<option value="default" selected>--application default--</option>');
|
|
1533
|
-
break;
|
|
1534
|
-
|
|
1535
|
-
case 'google':
|
|
1536
|
-
case 'aws':
|
|
1537
|
-
var obj = 'google' === vendor ? mapGoogle[lang] : mapAws[lang];
|
|
1538
|
-
if (obj) {
|
|
1539
|
-
var options = '';
|
|
1540
|
-
for (var i = 0; i < obj.voices.length; i++) {
|
|
1541
|
-
if (i) options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
|
|
1542
|
-
else options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
|
|
1543
|
-
}
|
|
1544
|
-
voiceElem.append(options);
|
|
1545
|
-
}
|
|
1546
|
-
break;
|
|
1547
|
-
}
|
|
1548
|
-
voiceElem.val(node.voice);
|
|
1549
|
-
}
|
|
1550
|
-
|
|
1551
|
-
actionElem.change(onActionChanged);
|
|
1552
|
-
vendorElem.change(onVendorChanged);
|
|
1553
|
-
langElem.change(onLangChanged);
|
|
1554
|
-
voiceElem.change(onVoiceChanged);
|
|
1555
|
-
}
|
|
1556
|
-
});
|
|
1557
|
-
|
|
1558
|
-
RED.nodes.registerType('create-call',{
|
|
1559
|
-
category: 'jambonz',
|
|
1560
|
-
color: '#aebfb9',
|
|
1561
|
-
defaults: {
|
|
1562
|
-
name: {value: ''},
|
|
1563
|
-
server: {value: '', required: true, type: 'jambonz_auth'},
|
|
1564
|
-
from: {value: '', required: true},
|
|
1565
|
-
fromType: {value: ''},
|
|
1566
|
-
to: {value: '', required: true},
|
|
1567
|
-
toType: {value: ''},
|
|
1568
|
-
dest: {value: 'phone', required: true},
|
|
1569
|
-
timeout: {},
|
|
1570
|
-
application: {value: '', required: true},
|
|
1571
|
-
appName: {}
|
|
1572
|
-
},
|
|
1573
|
-
inputs:1,
|
|
1574
|
-
outputs:1,
|
|
1575
|
-
icon: "font-awesome/fa-cubes",
|
|
1576
|
-
label: function() {
|
|
1577
|
-
return this.name || 'create call';
|
|
1578
|
-
},
|
|
1579
|
-
oneditprepare: function() {
|
|
1580
|
-
var node = this;
|
|
1581
|
-
var destElem = $('#node-input-dest');
|
|
1582
|
-
var serverElem = $('#node-input-server');
|
|
1583
|
-
var applicationElem = $('#node-input-application');
|
|
1584
|
-
|
|
1585
|
-
$('#node-input-from').typedInput({
|
|
1586
|
-
default: $('#node-input-fromType').val(),
|
|
1587
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1588
|
-
typeField: $('#node-input-fromType')
|
|
1589
|
-
});
|
|
1590
|
-
$('#node-input-to').typedInput({
|
|
1591
|
-
default: $('#node-input-toType').val(),
|
|
1592
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1593
|
-
typeField: $('#node-input-toType')
|
|
1594
|
-
});
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
var populateApplications = function() {
|
|
1598
|
-
var serverId = $('#node-input-server option:selected').val();
|
|
1599
|
-
var conn = RED.nodes.node(serverId);
|
|
1600
|
-
console.log(`server id ${serverId} has conn`, conn);
|
|
1601
|
-
if (conn && conn.credentials) {
|
|
1602
|
-
const {url, accountSid, apiToken} = conn.credentials;
|
|
1603
|
-
|
|
1604
|
-
$.ajax({
|
|
1605
|
-
url: `${url}/v1/Applications`,
|
|
1606
|
-
headers: {
|
|
1607
|
-
'Authorization': `Bearer ${apiToken}`
|
|
1608
|
-
},
|
|
1609
|
-
dataType: 'json',
|
|
1610
|
-
timeout: 500,
|
|
1611
|
-
error: (err) => {
|
|
1612
|
-
console.log(err);
|
|
1613
|
-
},
|
|
1614
|
-
success: (res) => {
|
|
1615
|
-
console.log(`response from fetch of applications: ${JSON.stringify(res)}`);
|
|
1616
|
-
console.log(`selected app is ${JSON.stringify(node.application)}`);
|
|
1617
|
-
applicationElem.find('option').remove();
|
|
1618
|
-
var options = '';
|
|
1619
|
-
res.forEach((app) => {
|
|
1620
|
-
if (node.application === app.application_sid) {
|
|
1621
|
-
options += `<option value="${app.application_sid}" selected>${app.name}</option>`;
|
|
1622
|
-
node.appName = app.name;
|
|
1623
|
-
}
|
|
1624
|
-
else {
|
|
1625
|
-
options += `<option value="${app.application_sid}">${app.name}</option>`;
|
|
1626
|
-
}
|
|
1627
|
-
});
|
|
1628
|
-
if (options.length) applicationElem.append(options);
|
|
1629
|
-
}
|
|
1630
|
-
});
|
|
1631
|
-
}
|
|
1632
|
-
else {
|
|
1633
|
-
console.log(`can't retrieve config, but application_sid is '${node.appName}': ${node.application}`);
|
|
1634
|
-
applicationElem.find('option').remove();
|
|
1635
|
-
applicationElem.append(`<option value="${node.application}">${node.appName}</option>`);
|
|
1636
|
-
}
|
|
1637
|
-
}
|
|
1638
|
-
serverElem.change(populateApplications);
|
|
1639
|
-
applicationElem.change(() => {
|
|
1640
|
-
node.appName = $('#node-input-application option:selected').text();
|
|
1641
|
-
console.log(`setting appName to ${node.appName}`);
|
|
1642
|
-
});
|
|
1643
|
-
}
|
|
1644
|
-
});
|
|
1645
|
-
|
|
1646
|
-
RED.nodes.registerType('create-sms',{
|
|
1647
|
-
category: 'jambonz',
|
|
1648
|
-
color: '#aebfb9',
|
|
1649
|
-
defaults: {
|
|
1650
|
-
name: {value: ''},
|
|
1651
|
-
server: {value: '', required: true, type: 'jambonz_auth'},
|
|
1652
|
-
from: {value: '', required: true},
|
|
1653
|
-
fromType: {value: ''},
|
|
1654
|
-
to: {value: '', required: true},
|
|
1655
|
-
toType: {value: ''},
|
|
1656
|
-
text: {value: '', required: true},
|
|
1657
|
-
textType: {value: ''},
|
|
1658
|
-
provider: {value: ''},
|
|
1659
|
-
providerType: {value: ''},
|
|
1660
|
-
},
|
|
1661
|
-
inputs:1,
|
|
1662
|
-
outputs:1,
|
|
1663
|
-
icon: "font-awesome/fa-cubes",
|
|
1664
|
-
label: function() {
|
|
1665
|
-
return this.name || 'create sms';
|
|
1666
|
-
},
|
|
1667
|
-
oneditprepare: function() {
|
|
1668
|
-
var node = this;
|
|
1669
|
-
|
|
1670
|
-
$('#node-input-from').typedInput({
|
|
1671
|
-
default: $('#node-input-fromType').val(),
|
|
1672
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1673
|
-
typeField: $('#node-input-fromType')
|
|
1674
|
-
});
|
|
1675
|
-
$('#node-input-to').typedInput({
|
|
1676
|
-
default: $('#node-input-toType').val(),
|
|
1677
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1678
|
-
typeField: $('#node-input-toType')
|
|
1679
|
-
});
|
|
1680
|
-
$('#node-input-text').typedInput({
|
|
1681
|
-
default: $('#node-input-textType').val(),
|
|
1682
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1683
|
-
typeField: $('#node-input-textType')
|
|
1684
|
-
});
|
|
1685
|
-
$('#node-input-provider').typedInput({
|
|
1686
|
-
default: $('#node-input-providerType').val(),
|
|
1687
|
-
types: ['str','msg', 'flow', 'global'],
|
|
1688
|
-
typeField: $('#node-input-providerType')
|
|
1689
|
-
});
|
|
1690
|
-
}
|
|
1691
|
-
});
|
|
1692
|
-
|
|
1693
|
-
</script>
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
<!-- user auth -->
|
|
1697
|
-
<script type="text/html" data-template-name="user auth">
|
|
1698
|
-
<div class="form-row">
|
|
1699
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
1700
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
1701
|
-
</div>
|
|
1702
|
-
<fieldset>
|
|
1703
|
-
<legend>Enter either a plain-text or hashed password</legend>
|
|
1704
|
-
<div class="form-row">
|
|
1705
|
-
<label for="node-input-password">Plain text password</label>
|
|
1706
|
-
<input type="text" id="node-input-password">
|
|
1707
|
-
<input type="hidden" id="node-input-passwordType">
|
|
1708
|
-
</div>
|
|
1709
|
-
<div class="form-row">
|
|
1710
|
-
<label for="node-input-ha1">Hashed</label>
|
|
1711
|
-
<input type="text" id="node-input-ha1">
|
|
1712
|
-
<input type="hidden" id="node-input-ha1Type">
|
|
1713
|
-
</div>
|
|
1714
|
-
</fieldset>
|
|
1715
|
-
</script>
|
|
1716
|
-
|
|
1717
|
-
<script type="text/html" data-help-name="user auth">
|
|
1718
|
-
<p>Authenticate a user</p>
|
|
1719
|
-
<h3>Inputs</h3>
|
|
1720
|
-
<dl class="message-properties">
|
|
1721
|
-
<dt>authRequest<span class="property-type">object</span></dt>
|
|
1722
|
-
<dd>The digest parameters provided by the user</dd>
|
|
1723
|
-
</dl>
|
|
1724
|
-
|
|
1725
|
-
<h3>Outputs</h3>
|
|
1726
|
-
<dl class="message-properties">
|
|
1727
|
-
<dt>authResponse<span class="property-type">object</span></dt>
|
|
1728
|
-
<dd>An object containing a status property indicating whether the password provided has successfully authenticated the user</dd>
|
|
1729
|
-
</dl>
|
|
1730
|
-
|
|
1731
|
-
<h3>Details</h3>
|
|
1732
|
-
The user auth command is used to authenticate a user based on the sip digest they presented and a password retrieved by some means by the application.
|
|
1733
|
-
You may provide either a plaintext password, or a precomputed hash based on <a href="https://tools.ietf.org/html/rfc2617">RFC 2617</a>, i.e. MD5( username ":" realm ":" password ).<br/><br/>
|
|
1734
|
-
It is valid to provide neither the plaintext nor hashed password, and in this case the user authentication will fail.
|
|
1735
|
-
It is useful to do this, for instance, when either the presented domain or username are unrecognized.<br/><br/>
|
|
1736
|
-
The output of this node is to set <code>msg.authResponse</code> accordingly, and the <code>webhook out</code> node should then be used to send the result back to the jambonz server.
|
|
1737
|
-
<h3>References</h3>
|
|
1738
|
-
<ul>
|
|
1739
|
-
<li><a href="https://docs.jambonz.org/register-hook">Jambonz user authentication reference</a></li>
|
|
1740
|
-
</ul>
|
|
1741
|
-
</script>
|
|
1742
|
-
|
|
1743
|
-
<!-- conference -->
|
|
1744
|
-
<script type="text/html" data-template-name="conference">
|
|
1745
|
-
<div class="form-row">
|
|
1746
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
1747
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
1748
|
-
</div>
|
|
1749
|
-
<div class="form-row">
|
|
1750
|
-
<label for="node-input-conference">Conference name</label>
|
|
1751
|
-
<input type="text" id="node-input-conference" placeholder="conference to join">
|
|
1752
|
-
<input type="hidden" id="node-input-conferenceType">
|
|
1753
|
-
</div>
|
|
1754
|
-
<div class="form-row">
|
|
1755
|
-
<label for="node-input-enterHook">Enter hook</label>
|
|
1756
|
-
<input type="text" id="node-input-enterHook" placeholder="webhook url">
|
|
1757
|
-
<input type="hidden" id="node-input-enterHookType">
|
|
1758
|
-
</div>
|
|
1759
|
-
<div class="form-row">
|
|
1760
|
-
<label for="node-input-waitHook">Wait hook</label>
|
|
1761
|
-
<input type="text" id="node-input-waitHook" placeholder="webhook url">
|
|
1762
|
-
<input type="hidden" id="node-input-waitHookType">
|
|
1763
|
-
</div>
|
|
1764
|
-
<div class="form-row">
|
|
1765
|
-
<label for="node-input-beep">Beep on entry</label>
|
|
1766
|
-
<input type="checkbox" id="node-input-beep">
|
|
1767
|
-
</div>
|
|
1768
|
-
<div class="form-row">
|
|
1769
|
-
<label for="node-input-startConferenceOnEnter">Start on entry</label>
|
|
1770
|
-
<input type="checkbox" id="node-input-startConferenceOnEnter">
|
|
1771
|
-
</div>
|
|
1772
|
-
<div class="form-row">
|
|
1773
|
-
<label for="node-input-endConferenceOnExit">End on exit</label>
|
|
1774
|
-
<input type="checkbox" id="node-input-endConferenceOnExit">
|
|
1775
|
-
</div>
|
|
1776
|
-
<div class="form-row">
|
|
1777
|
-
<label for="node-input-joinMuted">Join Muted</label>
|
|
1778
|
-
<input type="checkbox" id="node-input-joinMuted">
|
|
1779
|
-
</div>
|
|
1780
|
-
<div class="form-row">
|
|
1781
|
-
<label for="node-input-maxParticipants">Max participants</label>
|
|
1782
|
-
<input type="text" id="node-input-maxParticipants">
|
|
1783
|
-
<input type="hidden" id="node-input-maxParticipantsType">
|
|
1784
|
-
</div>
|
|
1785
|
-
</script>
|
|
1786
|
-
|
|
1787
|
-
<script type="text/html" data-help-name="conference">
|
|
1788
|
-
<p>places a caller in a queue.</p>
|
|
1789
|
-
<h3>Inputs</h3>
|
|
1790
|
-
<dl class="message-properties">
|
|
1791
|
-
<dt>Conference Name<span class="property-type">string</span></dt>
|
|
1792
|
-
<dd>The name of the conference to join the caller to.</dd>
|
|
1793
|
-
<dt>Enter hook<span class="property-type">string</span></dt>
|
|
1794
|
-
<dd>A webhook to retrieve something to play or say to the caller just before they are put into a conference after waiting for it to start</dd>
|
|
1795
|
-
<dt>Wait hook<span class="property-type">string</span></dt>
|
|
1796
|
-
<dd>A webhook to retrieve commands to play or say while the caller is waiting for the conference to start</dd>
|
|
1797
|
-
<dt>Beep on entry<span class="property-type">boolean</span></dt>
|
|
1798
|
-
<dd>if checked, play a beep tone to the conference when caller enters </dd>
|
|
1799
|
-
<dt>Start on entry<span class="property-type">boolean</span></dt>
|
|
1800
|
-
<dd>if checked, start the conference only when this caller enters</dd>
|
|
1801
|
-
<dt>End on exit<span class="property-type">boolean</span></dt>
|
|
1802
|
-
<dd>if checked, end the conference when this caller hangs up</dd>
|
|
1803
|
-
<dt>Max participants<span class="property-type">number</span></dt>
|
|
1804
|
-
<dd>maximum number of participants that will be allowed in the conference</dd>
|
|
1805
|
-
</dl>
|
|
1806
|
-
|
|
1807
|
-
<h3>Outputs</h3>
|
|
1808
|
-
<dl class="message-properties">
|
|
1809
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
1810
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>conference</code> action appended </dd>
|
|
1811
|
-
</dl>
|
|
1812
|
-
|
|
1813
|
-
<h3>Details</h3>
|
|
1814
|
-
The conference verb places a call into a conference.
|
|
1815
|
-
<h3>References</h3>
|
|
1816
|
-
<ul>
|
|
1817
|
-
<li><a href="https://docs.jambonz.org/jambonz/#conference">Jambonz conference reference</a></li>
|
|
1818
|
-
</ul>
|
|
1819
|
-
</script>
|
|
1820
|
-
|
|
1821
|
-
<!-- dequeue -->
|
|
1822
|
-
<script type="text/html" data-template-name="dequeue">
|
|
1823
|
-
<div class="form-row">
|
|
1824
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
1825
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
1826
|
-
</div>
|
|
1827
|
-
<div class="form-row">
|
|
1828
|
-
<label for="node-input-queue">Queue name</label>
|
|
1829
|
-
<input type="text" id="node-input-queue" placeholder="name of queue to remove caller from">
|
|
1830
|
-
<input type="hidden" id="node-input-queueType">
|
|
1831
|
-
</div>
|
|
1832
|
-
<div class="form-row">
|
|
1833
|
-
<label for="node-input-beep">Play beep on connecting</label>
|
|
1834
|
-
<input type="checkbox" id="node-input-beep">
|
|
1835
|
-
</div>
|
|
1836
|
-
<div class="form-row">
|
|
1837
|
-
<label for="node-input-actionHook">Action hook</label>
|
|
1838
|
-
<input type="text" id="node-input-actionHook" placeholder="webhook url">
|
|
1839
|
-
<input type="hidden" id="node-input-actionHookType">
|
|
1840
|
-
</div>
|
|
1841
|
-
<div class="form-row">
|
|
1842
|
-
<label for="node-input-confirmHook">Confirm hook</label>
|
|
1843
|
-
<input type="text" id="node-input-confirmHook" placeholder="webhook url">
|
|
1844
|
-
<input type="hidden" id="node-input-confirmHookType">
|
|
1845
|
-
</div>
|
|
1846
|
-
<div class="form-row">
|
|
1847
|
-
<label for="node-input-timeout">Timeout</label>
|
|
1848
|
-
<input type="text" id="node-input-timeout" placeholder="seconds to wait if queue is empty">
|
|
1849
|
-
<input type="hidden" id="node-input-timeoutType">
|
|
1850
|
-
</div>
|
|
1851
|
-
</script>
|
|
1852
|
-
|
|
1853
|
-
<script type="text/html" data-help-name="dequeue">
|
|
1854
|
-
<p>removes the a call from the front of a queue and bridges that call to the current caller.</p>
|
|
1855
|
-
<h3>Inputs</h3>
|
|
1856
|
-
<dl class="message-properties">
|
|
1857
|
-
<dt>Queue name<span class="property-type">string</span></dt>
|
|
1858
|
-
<dd>Name of the queue.</dd>
|
|
1859
|
-
<dt>Play beep on connecting<span class="property-type">boolean</span></dt>
|
|
1860
|
-
<dd>Play a beep tone to this caller only just prior to connecting the queued call.</dd>
|
|
1861
|
-
<dt>Action hook<span class="property-type">string</span></dt>
|
|
1862
|
-
<dd>A webhook invoke when call ends.</dd>
|
|
1863
|
-
<dt>Confirm hook<span class="property-type">string</span></dt>
|
|
1864
|
-
<dd>A webhook for an application to run on the callee's end before the call is bridged.</dd>
|
|
1865
|
-
<dt>Timeout<span class="property-type">number</span></dt>
|
|
1866
|
-
<dd>number of seconds to wait on an empty queue before returning.</dd>
|
|
1867
|
-
</dl>
|
|
1868
|
-
|
|
1869
|
-
<h3>Outputs</h3>
|
|
1870
|
-
<dl class="message-properties">
|
|
1871
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
1872
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>dequeue</code> action appended </dd>
|
|
1873
|
-
</dl>
|
|
1874
|
-
|
|
1875
|
-
<h3>Details</h3>
|
|
1876
|
-
The dequeue verb removes the a call from the front of a specified queue and bridges that call to the current caller.
|
|
1877
|
-
<h3>References</h3>
|
|
1878
|
-
<ul>
|
|
1879
|
-
<li><a href="https://docs.jambonz.org/jambonz/#dequeue">Jambonz dequeue reference</a></li>
|
|
1880
|
-
</ul>
|
|
1881
|
-
</script>
|
|
1882
|
-
|
|
1883
|
-
<!-- dial -->
|
|
1884
|
-
<script type="text/html" data-template-name="dial">
|
|
1885
|
-
<style>
|
|
1886
|
-
ol#node-input-target-container .red-ui-typedInput-container {
|
|
1887
|
-
flex:1;
|
|
1888
|
-
}
|
|
1889
|
-
</style>
|
|
1890
|
-
<div class="form-row">
|
|
1891
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
1892
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
1893
|
-
</div>
|
|
1894
|
-
<div class="form-row" style="margin-bottom:0;">
|
|
1895
|
-
<label><i class="fa fa-list"></i><span>Dial Targets</span></label>
|
|
1896
|
-
</div>
|
|
1897
|
-
<div class="form-row node-input-target-container-row">
|
|
1898
|
-
<ol id="node-input-target-container"></ol>
|
|
1899
|
-
</div>
|
|
1900
|
-
<div class="form-row">
|
|
1901
|
-
<label for="node-input-actionhook">Action hook</label>
|
|
1902
|
-
<input type="text" id="node-input-actionhook" placeholder="webhook to invoke when the call ends">
|
|
1903
|
-
<input type="hidden" id="node-input-actionhookType">
|
|
1904
|
-
</div>
|
|
1905
|
-
<div class="form-row">
|
|
1906
|
-
<label for="node-input-answeronbridge">Answer on bridge</label>
|
|
1907
|
-
<input type="checkbox" id="node-input-answeronbridge">
|
|
1908
|
-
</div>
|
|
1909
|
-
<div class="form-row">
|
|
1910
|
-
<label for="node-input-callerid">Caller ID</label>
|
|
1911
|
-
<input type="text" id="node-input-callerid" placeholder="Caller ID to place on outbound call">
|
|
1912
|
-
<input type="hidden" id="node-input-calleridType">
|
|
1913
|
-
</div>
|
|
1914
|
-
<div class="form-row">
|
|
1915
|
-
<label for="node-input-confirmhook">Confirm hook</label>
|
|
1916
|
-
<input type="text" id="node-input-confirmhook" placeholder="webhook to run on called party after answer">
|
|
1917
|
-
<input type="hidden" id="node-input-confirmhookType">
|
|
1918
|
-
</div>
|
|
1919
|
-
<div class="form-row">
|
|
1920
|
-
<label for="node-input-dialmusic">Dial music</label>
|
|
1921
|
-
<input type="text" id="node-input-dialmusic" placeholder="url to .wav or .mp3 file to play during dial">
|
|
1922
|
-
<input type="hidden" id="node-input-dialMusicType">
|
|
1923
|
-
</div>
|
|
1924
|
-
<div class="form-row">
|
|
1925
|
-
<label for="node-input-dtmfcapture">Dtmf capture</label>
|
|
1926
|
-
<input type="text" id="node-input-dtmfcapture" placeholder="comma-separated list of dtmf captures">
|
|
1927
|
-
<input type="hidden" id="node-input-dtmfcaptureType">
|
|
1928
|
-
</div>
|
|
1929
|
-
<div class="form-row">
|
|
1930
|
-
<label for="node-input-dtmfhook">Dtmf hook</label>
|
|
1931
|
-
<input type="text" id="node-input-dtmfhook" placeholder="webhook to call when dtmf is captured">
|
|
1932
|
-
<input type="hidden" id="node-input-dtmfhookType">
|
|
1933
|
-
</div>
|
|
1934
|
-
<div class="form-row">
|
|
1935
|
-
<label for="node-input-timelimit">Time limit</label>
|
|
1936
|
-
<input type="text" id="node-input-timelimit" placeholder="max duration of call in secs">
|
|
1937
|
-
</div>
|
|
1938
|
-
<div class="form-row">
|
|
1939
|
-
<label for="node-input-timeout"><i class="icon-tag"></i> Timeout</label>
|
|
1940
|
-
<input type="text" id="node-input-timeout" placeholder="ring no answer timeout in secs (default: 60)">
|
|
1941
|
-
</div>
|
|
1942
|
-
<fieldset>
|
|
1943
|
-
<legend>Live audio</legend>
|
|
1944
|
-
<div class="form-row">
|
|
1945
|
-
<label for="node-input-listenurl"><i class="icon-tag"></i> Websocket server url</label>
|
|
1946
|
-
<input type="text" id="node-input-listenurl" placeholder="ws://example.com">
|
|
1947
|
-
<input type="hidden" id="node-input-listenurlType">
|
|
1948
|
-
</div>
|
|
1949
|
-
</fieldset>
|
|
1950
|
-
<fieldset>
|
|
1951
|
-
<legend>Transcription (optional)</legend>
|
|
1952
|
-
<div class="form-row">
|
|
1953
|
-
<label for="node-input-transcriptionhook"><i class="icon-tag"></i> Transcription hook</label>
|
|
1954
|
-
<input type="text" id="node-input-transcriptionhook" placeholder="transcription webhook">
|
|
1955
|
-
<input type="hidden" id="node-input-transcriptionhookType">
|
|
1956
|
-
</div>
|
|
1957
|
-
<div class="form-row">
|
|
1958
|
-
<label for="node-input-transcriptionvendor">Vendor</label>
|
|
1959
|
-
<select id="node-input-transcriptionvendor">
|
|
1960
|
-
<option value="default" selected>--application default--</option>
|
|
1961
|
-
<option value="google">Google</option>
|
|
1962
|
-
<option value="aws">AWS</option>
|
|
1963
|
-
</select>
|
|
1964
|
-
</div>
|
|
1965
|
-
<div class="form-row">
|
|
1966
|
-
<label for="node-input-recognizerlang"><i class="icon-tag"></i> Language</label>
|
|
1967
|
-
<select id="node-input-recognizerlang">
|
|
1968
|
-
</select>
|
|
1969
|
-
</div>
|
|
1970
|
-
<div id="interim" class="form-row">
|
|
1971
|
-
<label for="node-input-interim">Interim transcriptions</label>
|
|
1972
|
-
<input type="checkbox" id="node-input-interim">
|
|
1973
|
-
</div>
|
|
1974
|
-
<div id="stt-identify-channels" class="form-row">
|
|
1975
|
-
<label for="node-input-separaterecog">Separate recognition per channel</label>
|
|
1976
|
-
<input type="checkbox" id="node-input-separaterecog">
|
|
1977
|
-
</div>
|
|
1978
|
-
<div id="google-stt-options">
|
|
1979
|
-
<legend>Google Transcription Options</legend>
|
|
1980
|
-
<div class="form-row">
|
|
1981
|
-
<label for="node-input-transcriptionhints">Hints</label>
|
|
1982
|
-
<input type="text" id="node-input-transcriptionhints" placeholder="comma-separated list of phrases">
|
|
1983
|
-
<input type="hidden" id="node-input-transcriptionhintsType">
|
|
1984
|
-
</div>
|
|
1985
|
-
<div class="form-row">
|
|
1986
|
-
<label for="node-input-recognizeraltlang">Alternative languages</label>
|
|
1987
|
-
<input type="text" id="node-input-recognizeraltlang" placeholder="comma-separated list of add'l lang codes">
|
|
1988
|
-
<input type="hidden" id="node-input-recognizeraltlangType">
|
|
1989
|
-
</div>
|
|
1990
|
-
<div class="form-row">
|
|
1991
|
-
<label for="node-input-useenhanced">Use enhanced model</label>
|
|
1992
|
-
<input type="checkbox" id="node-input-useenhanced">
|
|
1993
|
-
</div>
|
|
1994
|
-
<div class="form-row">
|
|
1995
|
-
<label for="node-input-profanityfilter">Profanity filter</label>
|
|
1996
|
-
<input type="checkbox" id="node-input-profanityfilter">
|
|
1997
|
-
</div>
|
|
1998
|
-
<div class="form-row">
|
|
1999
|
-
<label for="node-input-words">Word time offsets</label>
|
|
2000
|
-
<input type="checkbox" id="node-input-words">
|
|
2001
|
-
</div>
|
|
2002
|
-
<div class="form-row">
|
|
2003
|
-
<label for="node-input-punctuation">Automatic punctuation</label>
|
|
2004
|
-
<input type="checkbox" id="node-input-punctuation">
|
|
2005
|
-
</div>
|
|
2006
|
-
<div class="form-row">
|
|
2007
|
-
<label for="node-input-diarization">Speaker diarization</label>
|
|
2008
|
-
<input type="checkbox" id="node-input-diarization">
|
|
2009
|
-
</div>
|
|
2010
|
-
<div class="form-row">
|
|
2011
|
-
<label for="node-input-diarizationmin">Min speaker count</label>
|
|
2012
|
-
<input type="text" id="node-input-diarizationmin" placeholder="2">
|
|
2013
|
-
<input type="hidden" id="node-input-diarizationminType">
|
|
2014
|
-
</div>
|
|
2015
|
-
<div class="form-row">
|
|
2016
|
-
<label for="node-input-diarizationmax">Max speaker count</label>
|
|
2017
|
-
<input type="text" id="node-input-diarizationmax" placeholder="6">
|
|
2018
|
-
<input type="hidden" id="node-input-diarizationmaxType">
|
|
2019
|
-
</div>
|
|
2020
|
-
<div class="form-row">
|
|
2021
|
-
<label for="node-input-interactiontype">Type of Interaction</label>
|
|
2022
|
-
<select id="node-input-interactiontype">
|
|
2023
|
-
<option value="unspecified" selected>Unspecified</option>
|
|
2024
|
-
<option value="discussion">Discusssion</option>
|
|
2025
|
-
<option value="presentation">Presentation</option>
|
|
2026
|
-
<option value="phone_call">Phone call</option>
|
|
2027
|
-
<option value="voicemail">Voicemail</option>
|
|
2028
|
-
<option value="voice_search">Voice search</option>
|
|
2029
|
-
<option value="voice_command">Voice command</option>
|
|
2030
|
-
<option value="dictation">Dictation</option>
|
|
2031
|
-
</select>
|
|
2032
|
-
</div>
|
|
2033
|
-
<div class="form-row">
|
|
2034
|
-
<label for="node-input-naics">Industry NAICS code</label>
|
|
2035
|
-
<input type="text" id="node-input-naics">
|
|
2036
|
-
<input type="hidden" id="node-input-naicsType">
|
|
2037
|
-
</div>
|
|
2038
|
-
</div>
|
|
2039
|
-
<div id="aws-stt-options">
|
|
2040
|
-
<legend>AWS Transcription Options</legend>
|
|
2041
|
-
<div class="form-row">
|
|
2042
|
-
<label for="node-input-identifychannels">Enable channel identification</label>
|
|
2043
|
-
<input type="checkbox" id="node-input-identifychannels">
|
|
2044
|
-
</div>
|
|
2045
|
-
<div class="form-row">
|
|
2046
|
-
<label for="node-input-speakerlabel">Show speaker labels</label>
|
|
2047
|
-
<input type="checkbox" id="node-input-speakerlabel">
|
|
2048
|
-
</div>
|
|
2049
|
-
<div class="form-row">
|
|
2050
|
-
<label for="node-input-vocabularyname">Vocabulary name</label>
|
|
2051
|
-
<input type="text" id="node-input-vocabularyname">
|
|
2052
|
-
<input type="hidden" id="node-input-vocabularynameType">
|
|
2053
|
-
</div>
|
|
2054
|
-
<div class="form-row">
|
|
2055
|
-
<label for="node-input-vocabularyfiltername">Vocabulary filter name</label>
|
|
2056
|
-
<input type="text" id="node-input-vocabularyfiltername">
|
|
2057
|
-
<input type="hidden" id="node-input-vocabularyfilternameType">
|
|
2058
|
-
</div>
|
|
2059
|
-
<div class="form-row">
|
|
2060
|
-
<label for="node-input-vocabularyfiltermethod">Filter method</label>
|
|
2061
|
-
<select id="node-input-vocabularyfiltermethod">
|
|
2062
|
-
<option value="remove" selected>Remove</option>
|
|
2063
|
-
<option value="mask" selected>Mask</option>
|
|
2064
|
-
<option value="tag" selected>Tag</option>
|
|
2065
|
-
</select>
|
|
2066
|
-
</div>
|
|
2067
|
-
</div>
|
|
2068
|
-
</fieldset>
|
|
2069
|
-
<fieldset>
|
|
2070
|
-
<legend>SIP Headers</legend>
|
|
2071
|
-
<div class="form-row" style="margin-bottom:0;">
|
|
2072
|
-
<label style="width:100%"><i class="fa fa-list"></i> <span>Add custom headers on outdial</span></label>
|
|
2073
|
-
</div>
|
|
2074
|
-
<div class="form-row node-input-headers-container-row">
|
|
2075
|
-
<ol id="node-input-headers-container"></ol>
|
|
2076
|
-
</div>
|
|
2077
|
-
</fieldset>
|
|
2078
|
-
</div>
|
|
2079
|
-
</script>
|
|
2080
|
-
|
|
2081
|
-
<script type="text/html" data-help-name="dial">
|
|
2082
|
-
<p>Dial out to a phone number, registered user, sip endpoint, or Microsoft teams user</p>
|
|
2083
|
-
<h3>Inputs</h3>
|
|
2084
|
-
<dl class="message-properties">
|
|
2085
|
-
<dt>Dial target - phone<span class="property-type">string</span></dt>
|
|
2086
|
-
<dd>A telephone number to dial in E.164 format</dd>
|
|
2087
|
-
<dt>Dial target - user<span class="property-type">string</span></dt>
|
|
2088
|
-
<dd>A registered sip user in user@domain format</dd>
|
|
2089
|
-
<dt>Dial target - sip<span class="property-type">string</span></dt>
|
|
2090
|
-
<dd>A sip endpoint in sip uri format, optionally with sip username and password</dd>
|
|
2091
|
-
<dt>Dial target - teams<span class="property-type">string</span></dt>
|
|
2092
|
-
<dd>A phone number that is associated with a user in the Microsoft Teams tenant associated with this account</dd>
|
|
2093
|
-
<dt>Action hook<span class="property-type">string</span></dt>
|
|
2094
|
-
<dd>webhook to invoke when the call ends. </dd>
|
|
2095
|
-
<dt>Answer on bridge<span class="property-type">string</span></dt>
|
|
2096
|
-
<dd>If set to true, the inbound call will ring until the number that was dialed answers the call, and at that point a 200 OK will be sent on the inbound leg. If false, the inbound call will be answered immediately as the outbound call is placed.</dd>
|
|
2097
|
-
<dt>Action hook<span class="property-type">string</span></dt>
|
|
2098
|
-
<dd>webhook to invoke when the call ends. </dd>
|
|
2099
|
-
<dt>Caller ID<span class="property-type">string</span></dt>
|
|
2100
|
-
<dd>Calling phone number to display on outgoing call.</dd>
|
|
2101
|
-
<dt>Confirm hook<span class="property-type">string</span></dt>
|
|
2102
|
-
<dd>webhook for an application to run on the callee's end after the dialed number answers but before the call is connected.</dd>
|
|
2103
|
-
<dt>Dial music<span class="property-type">string</span></dt>
|
|
2104
|
-
<dd>url that specifies a .wav or .mp3 audio file of custom audio or ringback to play to the caller while the outbound call is ringing.</dd>
|
|
2105
|
-
<dt>Dtmf capture<span class="property-type">string</span></dt>
|
|
2106
|
-
<dd>an array of strings that represent dtmf sequence which, when detected, will trigger a mid-call notification to the application via the configured dtmfHook.</dd>
|
|
2107
|
-
<dt>DTMF hook<span class="property-type">string</span></dt>
|
|
2108
|
-
<dd>webhook to call when a dtmfCapture entry is matched.</dd>
|
|
2109
|
-
<dt>Time limit<span class="property-type">number</span></dt>
|
|
2110
|
-
<dd>max length of call in seconds.</dd>
|
|
2111
|
-
<dt>Time limit<span class="property-type">number</span></dt>
|
|
2112
|
-
<dd>max length of call in seconds.</dd>
|
|
2113
|
-
<dt>Timeout<span class="property-type">number</span></dt>
|
|
2114
|
-
<dd>ring no answer timeout in seconds.</dd>
|
|
2115
|
-
<dt>Websocket server url<span class="property-type">string</span></dt>
|
|
2116
|
-
<dd>url of remote websocket server to send live audio to.</dd>
|
|
2117
|
-
<dt>Transcription hook<span class="property-type">string</span></dt>
|
|
2118
|
-
<dd>webhook to call when a transcription is received.</dd>
|
|
2119
|
-
<dt>Language<span class="property-type">string</span></dt>
|
|
2120
|
-
<dd>language to use for speech transcription.</dd>
|
|
2121
|
-
<dt>Send interim transcriptions<span class="property-type">boolean</span></dt>
|
|
2122
|
-
<dd>if true interim transcriptions are sent.</dd>
|
|
2123
|
-
</dl>
|
|
2124
|
-
|
|
2125
|
-
<h3>Outputs</h3>
|
|
2126
|
-
<dl class="message-properties">
|
|
2127
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
2128
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>dial</code> action appended </dd>
|
|
2129
|
-
</dl>
|
|
2130
|
-
|
|
2131
|
-
<h3>Details</h3>
|
|
2132
|
-
The dial verb is used to create a new call by dialing out to a number, a registered sip user, or sip endpoint
|
|
2133
|
-
<ul>
|
|
2134
|
-
<li><a href="https://docs.jambonz.org/jambonz/#dial">Jambonz dial reference</a></li>
|
|
2135
|
-
</ul>
|
|
2136
|
-
</script>
|
|
2137
|
-
|
|
2138
|
-
<!-- enqueue -->
|
|
2139
|
-
<script type="text/html" data-template-name="enqueue">
|
|
2140
|
-
<div class="form-row">
|
|
2141
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
2142
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
2143
|
-
</div>
|
|
2144
|
-
<div class="form-row">
|
|
2145
|
-
<label for="node-input-queue">Queue name</label>
|
|
2146
|
-
<input type="text" id="node-input-queue" placeholder="name of queue">
|
|
2147
|
-
<input type="hidden" id="node-input-queueType">
|
|
2148
|
-
</div>
|
|
2149
|
-
<div class="form-row">
|
|
2150
|
-
<label for="node-input-actionHook">Action hook</label>
|
|
2151
|
-
<input type="text" id="node-input-actionHook" placeholder="webhook url">
|
|
2152
|
-
<input type="hidden" id="node-input-actionHookType">
|
|
2153
|
-
</div>
|
|
2154
|
-
<div class="form-row">
|
|
2155
|
-
<label for="node-input-waitHook">Wait hook</label>
|
|
2156
|
-
<input type="text" id="node-input-waitHook" placeholder="webhook url">
|
|
2157
|
-
<input type="hidden" id="node-input-waitHookType">
|
|
2158
|
-
</div>
|
|
2159
|
-
</script>
|
|
2160
|
-
|
|
2161
|
-
<script type="text/html" data-help-name="enqueue">
|
|
2162
|
-
<p>places a caller in a queue.</p>
|
|
2163
|
-
<h3>Inputs</h3>
|
|
2164
|
-
<dl class="message-properties">
|
|
2165
|
-
<dt>Queue name<span class="property-type">string</span></dt>
|
|
2166
|
-
<dd>The name of the queue</dd>
|
|
2167
|
-
<dt>Action hook<span class="property-type">string</span></dt>
|
|
2168
|
-
<dd>A webhook invoke when operation completes.</dd>
|
|
2169
|
-
<dt>Wait hook<span class="property-type">string</span></dt>
|
|
2170
|
-
<dd>A webhook to invoke while the caller is in queue. The only allowed verbs in the application returned from this webhook are say, play, pause, and leave,.</dd>
|
|
2171
|
-
</dl>
|
|
2172
|
-
|
|
2173
|
-
<h3>Outputs</h3>
|
|
2174
|
-
<dl class="message-properties">
|
|
2175
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
2176
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>enqueue</code> action appended </dd>
|
|
2177
|
-
</dl>
|
|
2178
|
-
|
|
2179
|
-
<h3>Details</h3>
|
|
2180
|
-
The enqueue command is used to place a caller in a queue.
|
|
2181
|
-
<h3>References</h3>
|
|
2182
|
-
<ul>
|
|
2183
|
-
<li><a href="https://docs.jambonz.org/jambonz/#enqueue">Jambonz enqueue reference</a></li>
|
|
2184
|
-
</ul>
|
|
2185
|
-
</script>
|
|
2186
|
-
|
|
2187
|
-
<!-- gather -->
|
|
2188
|
-
<script type="text/html" data-template-name="gather">
|
|
2189
|
-
<div class="form-row">
|
|
2190
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
2191
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
2192
|
-
</div>
|
|
2193
|
-
<div class="form-row">
|
|
2194
|
-
<label for="node-input-actionhook"><i class="icon-tag"></i> Action hook</label>
|
|
2195
|
-
<input type="text" id="node-input-actionhook" placeholder="webhook with results of gather">
|
|
2196
|
-
</div>
|
|
2197
|
-
<fieldset>
|
|
2198
|
-
<legend>Prompt</legend>
|
|
2199
|
-
<div class="form-row">
|
|
2200
|
-
<label for="node-input-prompttype"><i class="icon-tag"></i> Verb</label>
|
|
2201
|
-
<select id="node-input-prompttype">
|
|
2202
|
-
<option>play</option>
|
|
2203
|
-
<option selected>say</option>
|
|
2204
|
-
</select>
|
|
2205
|
-
</div>
|
|
2206
|
-
|
|
2207
|
-
<div id="say-container">
|
|
2208
|
-
<div class="form-row">
|
|
2209
|
-
<label for="node-input-text"><i class="icon-tag"></i> Text</label>
|
|
2210
|
-
<textarea id="node-input-text" rows="4" placeholder="Text or SSML to speak" style="width:70%"></textarea>
|
|
2211
|
-
</div>
|
|
2212
|
-
<div class="form-row">
|
|
2213
|
-
<label for="node-input-vendor"> Vendor</label>
|
|
2214
|
-
<select id="node-input-vendor">
|
|
2215
|
-
<option value="default" selected>--application default--</option>
|
|
2216
|
-
<option value="google">google</option>
|
|
2217
|
-
<option value="aws">aws/polly</option>
|
|
2218
|
-
</select>
|
|
2219
|
-
</div>
|
|
2220
|
-
<div class="form-row" style="display: none;">
|
|
2221
|
-
<label for="node-input-lang"> Lang</label>
|
|
2222
|
-
<input type="text" id="node-input-lang">
|
|
2223
|
-
</div>
|
|
2224
|
-
<div class="form-row">
|
|
2225
|
-
<label for="node-input-xlang">Language</label>
|
|
2226
|
-
<select id="node-input-xlang">
|
|
2227
|
-
<option value="default" selected>--application default--</option>
|
|
2228
|
-
</select>
|
|
2229
|
-
</div>
|
|
2230
|
-
<div class="form-row" style="display: none;">
|
|
2231
|
-
<label for="node-input-voice"> Voice</label>
|
|
2232
|
-
<input type="text" id="node-input-voice">
|
|
2233
|
-
</div>
|
|
2234
|
-
<div class="form-row">
|
|
2235
|
-
<label for="node-input-xvoice">Voice</label>
|
|
2236
|
-
<select id="node-input-xvoice">
|
|
2237
|
-
<option value="default" selected>--application default--</option>
|
|
2238
|
-
</select>
|
|
2239
|
-
</div>
|
|
2240
|
-
</div>
|
|
2241
|
-
|
|
2242
|
-
<div id="play-container">
|
|
2243
|
-
<div class="form-row">
|
|
2244
|
-
<label for="node-input-playurl"> Url</label>
|
|
2245
|
-
<input type="text" id="node-input-playurl" placeholder="url of file to play">
|
|
2246
|
-
<input type="hidden" id="node-input-playurlType">
|
|
2247
|
-
</div>
|
|
2248
|
-
</div>
|
|
2249
|
-
</fieldset>
|
|
2250
|
-
<fieldset>
|
|
2251
|
-
<legend>DTMF Input</legend>
|
|
2252
|
-
<div class="form-row">
|
|
2253
|
-
<label for="node-input-dtmfinput">Accept DTMF input</label>
|
|
2254
|
-
<input type="checkbox" id="node-input-dtmfinput">
|
|
2255
|
-
</div>
|
|
2256
|
-
<div id="dtmf-input-container">
|
|
2257
|
-
<div class="form-row">
|
|
2258
|
-
<label for="node-input-finishonkey"><i class="icon-tag"></i> Finish key</label>
|
|
2259
|
-
<input type="text" id="node-input-finishonkey" placeholder="dtmf key to signal end of input">
|
|
2260
|
-
</div>
|
|
2261
|
-
<div class="form-row">
|
|
2262
|
-
<label for="node-input-numdigits"><i class="icon-tag"></i> Num. digits</label>
|
|
2263
|
-
<input type="text" id="node-input-numdigits" placeholder="number of digits to collect">
|
|
2264
|
-
</div>
|
|
2265
|
-
<div class="form-row">
|
|
2266
|
-
<label for="node-input-numtimeout"><i class="icon-tag"></i> Timeout</label>
|
|
2267
|
-
<input type="text" id="node-input-timeout" placeholder="dtmf timeout in secs">
|
|
2268
|
-
</div>
|
|
2269
|
-
</div>
|
|
2270
|
-
</fieldset>
|
|
2271
|
-
<fieldset>
|
|
2272
|
-
<legend>Speech Input</legend>
|
|
2273
|
-
<div class="form-row">
|
|
2274
|
-
<label for="node-input-speechinput">Accept Speech input</label>
|
|
2275
|
-
<input type="checkbox" id="node-input-speechinput">
|
|
2276
|
-
</div>
|
|
2277
|
-
<div id="speech-input-container">
|
|
2278
|
-
<div class="form-row">
|
|
2279
|
-
<label for="node-input-transcriptionvendor">Vendor</label>
|
|
2280
|
-
<select id="node-input-transcriptionvendor">
|
|
2281
|
-
<option value="default" selected>--application default--</option>
|
|
2282
|
-
<option value="google">Google</option>
|
|
2283
|
-
<option value="aws">AWS</option>
|
|
2284
|
-
</select>
|
|
2285
|
-
</div>
|
|
2286
|
-
<div class="form-row">
|
|
2287
|
-
<label for="node-input-recognizerlang"><i class="icon-tag"></i> Language</label>
|
|
2288
|
-
<select id="node-input-recognizerlang">
|
|
2289
|
-
</select>
|
|
2290
|
-
</div>
|
|
2291
|
-
<div id="google-stt-options">
|
|
2292
|
-
<legend>Google Transcription Options</legend>
|
|
2293
|
-
<div class="form-row">
|
|
2294
|
-
<label for="node-input-transcriptionhints">Hints</label>
|
|
2295
|
-
<input type="text" id="node-input-transcriptionhints" placeholder="comma-separated list of phrases">
|
|
2296
|
-
<input type="hidden" id="node-input-transcriptionhintsType">
|
|
2297
|
-
</div>
|
|
2298
|
-
<div class="form-row">
|
|
2299
|
-
<label for="node-input-recognizeraltlang">Alternative languages</label>
|
|
2300
|
-
<input type="text" id="node-input-recognizeraltlang" placeholder="comma-separated list of add'l lang codes">
|
|
2301
|
-
<input type="hidden" id="node-input-recognizeraltlangType">
|
|
2302
|
-
</div>
|
|
2303
|
-
<div class="form-row">
|
|
2304
|
-
<label for="node-input-naics">Industry NAICS code</label>
|
|
2305
|
-
<input type="text" id="node-input-naics">
|
|
2306
|
-
<input type="hidden" id="node-input-naicsType">
|
|
2307
|
-
</div>
|
|
2308
|
-
</div>
|
|
2309
|
-
<div id="aws-stt-options">
|
|
2310
|
-
<legend>AWS Transcription Options</legend>
|
|
2311
|
-
<div class="form-row">
|
|
2312
|
-
<label for="node-input-vocabularyname">Vocabulary name</label>
|
|
2313
|
-
<input type="text" id="node-input-vocabularyname">
|
|
2314
|
-
<input type="hidden" id="node-input-vocabularynameType">
|
|
2315
|
-
</div>
|
|
2316
|
-
<div class="form-row">
|
|
2317
|
-
<label for="node-input-vocabularyfiltername">Vocabulary filter name</label>
|
|
2318
|
-
<input type="text" id="node-input-vocabularyfiltername">
|
|
2319
|
-
<input type="hidden" id="node-input-vocabularyfilternameType">
|
|
2320
|
-
</div>
|
|
2321
|
-
<div class="form-row">
|
|
2322
|
-
<label for="node-input-vocabularyfiltermethod">Filter method</label>
|
|
2323
|
-
<select id="node-input-vocabularyfiltermethod">
|
|
2324
|
-
<option value="remove" selected>Remove</option>
|
|
2325
|
-
<option value="mask" selected>Mask</option>
|
|
2326
|
-
<option value="tag" selected>Tag</option>
|
|
2327
|
-
</select>
|
|
2328
|
-
</div>
|
|
2329
|
-
</div>
|
|
2330
|
-
</div>
|
|
2331
|
-
</fieldset>
|
|
2332
|
-
</script>
|
|
2333
|
-
|
|
2334
|
-
<script type="text/html" data-help-name="gather">
|
|
2335
|
-
<p>Collect speech or dtmf input from the caller</p>
|
|
2336
|
-
<h3>Inputs</h3>
|
|
2337
|
-
<dl class="message-properties">
|
|
2338
|
-
<dt>Action hook<span class="property-type">string</span></dt>
|
|
2339
|
-
<dd>A webhook invoke when operation completes.</dd>
|
|
2340
|
-
<dt>Speech<span class="property-type">boolean</span></dt>
|
|
2341
|
-
<dd>Enable speech input.</dd>
|
|
2342
|
-
<dt>Digits<span class="property-type">boolean</span></dt>
|
|
2343
|
-
<dd>Enable DTMF input.</dd>
|
|
2344
|
-
<dt>Language<span class="property-type">string</span></dt>
|
|
2345
|
-
<dd>Language to use for speech recognition</dd>
|
|
2346
|
-
<dt>Hints<span class="property-type">string</span></dt>
|
|
2347
|
-
<dd>Comma-separate list of words or phrases to assist speech detection</dd>
|
|
2348
|
-
<dt>Verb<span class="property-type">string</span></dt>
|
|
2349
|
-
<dd>Whether to use the play or say verb to prompt the caller</dd>
|
|
2350
|
-
<dt>Url<span class="property-type">string</span></dt>
|
|
2351
|
-
<dd>Url of prompt to play</dd>
|
|
2352
|
-
<dt>Text<span class="property-type">string</span></dt>
|
|
2353
|
-
<dd>Text to speak as a prompt to caller</dd>
|
|
2354
|
-
<dt>Vendor<span class="property-type">string</span></dt>
|
|
2355
|
-
<dd>TTS vendor</dd>
|
|
2356
|
-
<dt>Language<span class="property-type">string</span></dt>
|
|
2357
|
-
<dd>TTS language</dd>
|
|
2358
|
-
<dt>Voice<span class="property-type">string</span></dt>
|
|
2359
|
-
<dd>TTS voice</dd>
|
|
2360
|
-
</dl>
|
|
2361
|
-
|
|
2362
|
-
<h3>Outputs</h3>
|
|
2363
|
-
<dl class="message-properties">
|
|
2364
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
2365
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>gather</code> action appended </dd>
|
|
2366
|
-
</dl>
|
|
2367
|
-
|
|
2368
|
-
<h3>Details</h3>
|
|
2369
|
-
The gather command is used to collect dtmf or speech input.
|
|
2370
|
-
<h3>References</h3>
|
|
2371
|
-
<ul>
|
|
2372
|
-
<li><a href="https://docs.jambonz.org/jambonz/#gather">Jambonz gather reference</a></li>
|
|
2373
|
-
</ul>
|
|
2374
|
-
</script>
|
|
2375
|
-
|
|
2376
|
-
<!-- hangup -->
|
|
2377
|
-
<script type="text/html" data-template-name="hangup">
|
|
2378
|
-
<div class="form-row">
|
|
2379
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
2380
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
2381
|
-
</div>
|
|
2382
|
-
</script>
|
|
2383
|
-
|
|
2384
|
-
<script type="text/html" data-help-name="hangup">
|
|
2385
|
-
<p>Hangup the call</p>
|
|
2386
|
-
<h3>Inputs</h3>
|
|
2387
|
-
<dl class="message-properties">
|
|
2388
|
-
</dl>
|
|
2389
|
-
|
|
2390
|
-
<h3>Outputs</h3>
|
|
2391
|
-
<dl class="message-properties">
|
|
2392
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
2393
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>hangup</code> action appended </dd>
|
|
2394
|
-
</dl>
|
|
2395
|
-
|
|
2396
|
-
<h3>Details</h3>
|
|
2397
|
-
The hangup verb hangs up the current call.
|
|
2398
|
-
<h3>References</h3>
|
|
2399
|
-
<ul>
|
|
2400
|
-
<li><a href="https://docs.jambonz.org/jambonz/#hangup">Jambonz hangup reference</a></li>
|
|
2401
|
-
</ul>
|
|
2402
|
-
</script>
|
|
2403
|
-
|
|
2404
|
-
<!-- leave -->
|
|
2405
|
-
<script type="text/html" data-template-name="leave">
|
|
2406
|
-
<div class="form-row">
|
|
2407
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
2408
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
2409
|
-
</div>
|
|
2410
|
-
</script>
|
|
2411
|
-
|
|
2412
|
-
<script type="text/html" data-help-name="leave">
|
|
2413
|
-
<p>transfer call out of queue</p>
|
|
2414
|
-
<h3>Inputs</h3>
|
|
2415
|
-
<dl class="message-properties">
|
|
2416
|
-
</dl>
|
|
2417
|
-
|
|
2418
|
-
<h3>Outputs</h3>
|
|
2419
|
-
<dl class="message-properties">
|
|
2420
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
2421
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>leave</code> action appended </dd>
|
|
2422
|
-
</dl>
|
|
2423
|
-
|
|
2424
|
-
<h3>Details</h3>
|
|
2425
|
-
The leave verb transfers a call out of a queue. The call then returns to the flow of execution following the enqueue verb that parked the call, or the document returned by that verbs actionHook property, if provided.<h3>References</h3>
|
|
2426
|
-
<ul>
|
|
2427
|
-
<li><a href="https://docs.jambonz.org/jambonz/#leave">Jambonz leave reference</a></li>
|
|
2428
|
-
</ul>
|
|
2429
|
-
</script>
|
|
2430
|
-
|
|
2431
|
-
<!-- lex -->
|
|
2432
|
-
<script type="text/html" data-template-name="lex">
|
|
2433
|
-
<div class="form-row">
|
|
2434
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
2435
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
2436
|
-
</div>
|
|
2437
|
-
<div class="form-row">
|
|
2438
|
-
<label for="node-input-aws">AWS credentials</label>
|
|
2439
|
-
<input type="text" id="node-input-aws">
|
|
2440
|
-
</div>
|
|
2441
|
-
<div class="form-row">
|
|
2442
|
-
<label for="node-input-bot">Bot ID</label>
|
|
2443
|
-
<input type="text" id="node-input-bot" placeholder="bot name">
|
|
2444
|
-
<input type="hidden" id="node-input-botType">
|
|
2445
|
-
</div>
|
|
2446
|
-
<div class="form-row">
|
|
2447
|
-
<label for="node-input-alias">Bot Alias</label>
|
|
2448
|
-
<input type="text" id="node-input-alias" placeholder="bot alias">
|
|
2449
|
-
<input type="hidden" id="node-input-aliasType">
|
|
2450
|
-
</div>
|
|
2451
|
-
<div class="form-row">
|
|
2452
|
-
<label for="node-input-locale">Locale</label>
|
|
2453
|
-
<input type="text" id="node-input-locale" placeholder="en_US">
|
|
2454
|
-
<input type="hidden" id="node-input-localeType">
|
|
2455
|
-
</div>
|
|
2456
|
-
<div class="form-row">
|
|
2457
|
-
<label for="node-input-region">Region</label>
|
|
2458
|
-
<select id="node-input-region">
|
|
2459
|
-
<option value="ap-northeast-1">Tokyo (ap-northeast-1)</option>
|
|
2460
|
-
<option value="ap-southeast-1">Singapore (ap-southeast-1)</option>
|
|
2461
|
-
<option value="ap-southeast-2">Sydney (ap-southeast-2)</option>
|
|
2462
|
-
<option value="eu-central-1">Frankfurt (eu-central-1)</option>
|
|
2463
|
-
<option value="eu-west-1">Ireland (eu-west-1)</option>
|
|
2464
|
-
<option value="eu-west-2">London (eu-west-2)</option>
|
|
2465
|
-
<option value="us-east-1" selected>N. Virginia (us-east-1)</option>
|
|
2466
|
-
<option value="us-west-2">Oregon (us-west-2)</option>
|
|
2467
|
-
</select>
|
|
2468
|
-
</div>
|
|
2469
|
-
<div class="form-row">
|
|
2470
|
-
<label for="node-input-specifyIntent">Initial intent?</label>
|
|
2471
|
-
<input type="checkbox" id="node-input-specifyIntent">
|
|
2472
|
-
</div>
|
|
2473
|
-
<div id="intent-options">
|
|
2474
|
-
<div class="form-row">
|
|
2475
|
-
<label for="node-input-intent">Intent name</label>
|
|
2476
|
-
<input type="text" id="node-input-intent" placeholder="name of initial intent (if any)">
|
|
2477
|
-
<input type="hidden" id="node-input-intentType">
|
|
2478
|
-
</div>
|
|
2479
|
-
<div class="form-row">
|
|
2480
|
-
<label for="node-input-slots">Slots</label>
|
|
2481
|
-
<input type="text" id="node-input-slots" placeholder="initial slot values (if any)">
|
|
2482
|
-
<input type="hidden" id="node-input-slotsType">
|
|
2483
|
-
</div>
|
|
2484
|
-
</div>
|
|
2485
|
-
<div id="welcome-msg-options">
|
|
2486
|
-
<div class="form-row">
|
|
2487
|
-
<label for="node-input-welcomeMessage">Welcome message</label>
|
|
2488
|
-
<textarea id="node-input-welcomeMessage" rows="2" placeholder="Initial message to speak, if any" style="width:65%"></textarea>
|
|
2489
|
-
</div>
|
|
2490
|
-
</div>
|
|
2491
|
-
<div class="form-row">
|
|
2492
|
-
<label for="node-input-metadata">Metadata</label>
|
|
2493
|
-
<input type="text" id="node-input-metadata" placeholder="key-value pairs to send to lex (if any)">
|
|
2494
|
-
<input type="hidden" id="node-input-metadataType">
|
|
2495
|
-
</div>
|
|
2496
|
-
<div class="form-row">
|
|
2497
|
-
<label for="node-input-inputTimeout">Input timeout</label>
|
|
2498
|
-
<input type="text" id="node-input-inputTimeout" placeholder="speech timeout, in seconds">
|
|
2499
|
-
<input type="hidden" id="node-input-inputTimeoutType">
|
|
2500
|
-
</div>
|
|
2501
|
-
<div class="form-row">
|
|
2502
|
-
<label for="node-input-beep">Enable barge-in</label>
|
|
2503
|
-
<input type="checkbox" id="node-input-bargein">
|
|
2504
|
-
</div>
|
|
2505
|
-
<div class="form-row">
|
|
2506
|
-
<label for="node-input-passDtmf">Enable dtmf</label>
|
|
2507
|
-
<input type="checkbox" id="node-input-passDtmf">
|
|
2508
|
-
</div>
|
|
2509
|
-
<div class="form-row">
|
|
2510
|
-
<label for="node-input-eventHook">Event Hook</label>
|
|
2511
|
-
<input type="text" id="node-input-eventHook">
|
|
2512
|
-
<input type="hidden" id="node-input-eventHookType">
|
|
2513
|
-
</div>
|
|
2514
|
-
<div class="form-row">
|
|
2515
|
-
<label for="node-input-actionHook">Action Hook</label>
|
|
2516
|
-
<input type="text" id="node-input-actionHook">
|
|
2517
|
-
<input type="hidden" id="node-input-actionHookType">
|
|
2518
|
-
</div>
|
|
2519
|
-
<div class="form-row">
|
|
2520
|
-
<label for="node-input-prompt">Prompt audio</label>
|
|
2521
|
-
<select id="node-input-prompt">
|
|
2522
|
-
<option value="lex">Use Lex-provided audio</option>
|
|
2523
|
-
<option value="tts">Use text to speech</option>
|
|
2524
|
-
</select>
|
|
2525
|
-
</div>
|
|
2526
|
-
<div id="tts-options">
|
|
2527
|
-
<div class="form-row">
|
|
2528
|
-
<label for="node-input-vendor"> Vendor</label>
|
|
2529
|
-
<select id="node-input-vendor">
|
|
2530
|
-
<option value="default" selected>--application default--</option>
|
|
2531
|
-
<option value="google">google</option>
|
|
2532
|
-
<option value="aws">aws/polly</option>
|
|
2533
|
-
</select>
|
|
2534
|
-
</div>
|
|
2535
|
-
<div class="form-row" style="display: none;">
|
|
2536
|
-
<label for="node-input-lang"> Lang</label>
|
|
2537
|
-
<input type="text" id="node-input-lang">
|
|
2538
|
-
</div>
|
|
2539
|
-
<div class="form-row">
|
|
2540
|
-
<label for="node-input-xlang">Language</label>
|
|
2541
|
-
<select id="node-input-xlang">
|
|
2542
|
-
<option value="default" selected>--application default--</option>
|
|
2543
|
-
</select>
|
|
2544
|
-
</div>
|
|
2545
|
-
<div class="form-row" style="display: none;">
|
|
2546
|
-
<label for="node-input-voice"> Voice</label>
|
|
2547
|
-
<input type="text" id="node-input-voice">
|
|
2548
|
-
</div>
|
|
2549
|
-
<div class="form-row">
|
|
2550
|
-
<label for="node-input-xvoice">Voice</label>
|
|
2551
|
-
<select id="node-input-xvoice">
|
|
2552
|
-
<option value="default" selected>--application default--</option>
|
|
2553
|
-
</select>
|
|
2554
|
-
</div>
|
|
2555
|
-
</div>
|
|
2556
|
-
</script>
|
|
2557
|
-
|
|
2558
|
-
<script type="text/html" data-help-name="pause">
|
|
2559
|
-
<p>Pause a specified number of seconds</p>
|
|
2560
|
-
<h3>Inputs</h3>
|
|
2561
|
-
<dl class="message-properties">
|
|
2562
|
-
<dt>Duration<span class="property-type">object</span></dt>
|
|
2563
|
-
<dd>Number of seconds pause</dd>
|
|
2564
|
-
</dl>
|
|
2565
|
-
|
|
2566
|
-
<h3>Outputs</h3>
|
|
2567
|
-
<dl class="message-properties">
|
|
2568
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
2569
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>pause</code> action appended </dd>
|
|
2570
|
-
</dl>
|
|
2571
|
-
|
|
2572
|
-
<h3>Details</h3>
|
|
2573
|
-
The pause verb waits a specified number of seconds before continuing to execute the application.
|
|
2574
|
-
<h3>References</h3>
|
|
2575
|
-
<ul>
|
|
2576
|
-
<li><a href="https://docs.jambonz.org/jambonz/#pause">Jambonz pause reference</a></li>
|
|
2577
|
-
</ul>
|
|
2578
|
-
</script>
|
|
2579
|
-
|
|
2580
|
-
<!-- listen -->
|
|
2581
|
-
<script type="text/html" data-template-name="listen">
|
|
2582
|
-
<div class="form-row">
|
|
2583
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
2584
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
2585
|
-
</div>
|
|
2586
|
-
<div class="form-row">
|
|
2587
|
-
<label for="node-input-url">Url</label>
|
|
2588
|
-
<input type="text" id="node-input-url" placeholder="ws url">
|
|
2589
|
-
<input type="hidden" id="node-input-urlType">
|
|
2590
|
-
</div>
|
|
2591
|
-
<div class="form-row">
|
|
2592
|
-
<label for="node-input-authuser">User</label>
|
|
2593
|
-
<input type="text" id="node-input-authuser" placeholder="basic auth username">
|
|
2594
|
-
<input type="hidden" id="node-input-authuserType">
|
|
2595
|
-
</div>
|
|
2596
|
-
<div class="form-row">
|
|
2597
|
-
<label for="node-input-authpassword">Password</label>
|
|
2598
|
-
<input type="text" id="node-input-authpassword" placeholder="basic auth password">
|
|
2599
|
-
<input type="hidden" id="node-input-authpasswordType">
|
|
2600
|
-
</div>
|
|
2601
|
-
<div class="form-row">
|
|
2602
|
-
<label for="node-input-actionhook">Action hook</label>
|
|
2603
|
-
<input type="text" id="node-input-actionhook" placeholder="webhook url to invoke when operation ends">
|
|
2604
|
-
<input type="hidden" id="node-input-actionhookType">
|
|
2605
|
-
</div>
|
|
2606
|
-
<div class="form-row">
|
|
2607
|
-
<label for="node-input-metadata">Metadata</label>
|
|
2608
|
-
<input type="text" id="node-input-metadata">
|
|
2609
|
-
<input type="hidden" id="node-input-metadataType">
|
|
2610
|
-
</div>
|
|
2611
|
-
<div class="form-row">
|
|
2612
|
-
<label for="node-input-maxlength">Max duration</label>
|
|
2613
|
-
<input type="text" id="node-input-maxlength">
|
|
2614
|
-
</div>
|
|
2615
|
-
<div class="form-row">
|
|
2616
|
-
<label for="node-input-finishonkey">End key</label>
|
|
2617
|
-
<input type="text" id="node-input-finishonkey">
|
|
2618
|
-
</div>
|
|
2619
|
-
<div class="form-row">
|
|
2620
|
-
<label for="node-input-beep">Beep</label>
|
|
2621
|
-
<input type="checkbox" id="node-input-beep">
|
|
2622
|
-
</div>
|
|
2623
|
-
<div class="form-row">
|
|
2624
|
-
<label for="node-input-mixtype">Mix type</label>
|
|
2625
|
-
<select id="node-input-mixtype">
|
|
2626
|
-
<option selected>mono</option>
|
|
2627
|
-
<option>stereo</option>
|
|
2628
|
-
</select>
|
|
2629
|
-
</div>
|
|
2630
|
-
<div class="form-row">
|
|
2631
|
-
<label for="node-input-samplerate">Sample rate</label>
|
|
2632
|
-
<select id="node-input-samplerate">
|
|
2633
|
-
<option selected>8000</option>
|
|
2634
|
-
<option>16000</option>
|
|
2635
|
-
<option>24000</option>
|
|
2636
|
-
<option>48000</option>
|
|
2637
|
-
<option>64000</option>
|
|
2638
|
-
</select>
|
|
2639
|
-
</div>
|
|
2640
|
-
<fieldset>
|
|
2641
|
-
<legend>Transcription (optional)</legend>
|
|
2642
|
-
<div class="form-row">
|
|
2643
|
-
<label for="node-input-transcriptionhook"><i class="icon-tag"></i> Transcription hook</label>
|
|
2644
|
-
<input type="text" id="node-input-transcriptionhook" placeholder="transcription webhook">
|
|
2645
|
-
<input type="hidden" id="node-input-transcriptionhookType">
|
|
2646
|
-
</div>
|
|
2647
|
-
<div class="form-row">
|
|
2648
|
-
<label for="node-input-transcriptionvendor">Vendor</label>
|
|
2649
|
-
<select id="node-input-transcriptionvendor">
|
|
2650
|
-
<option value="default" selected>--application default--</option>
|
|
2651
|
-
<option value="google">Google</option>
|
|
2652
|
-
<option value="aws">AWS</option>
|
|
2653
|
-
</select>
|
|
2654
|
-
</div>
|
|
2655
|
-
<div class="form-row">
|
|
2656
|
-
<label for="node-input-recognizerlang"><i class="icon-tag"></i> Language</label>
|
|
2657
|
-
<select id="node-input-recognizerlang">
|
|
2658
|
-
</select>
|
|
2659
|
-
</div>
|
|
2660
|
-
<div id="interim" class="form-row">
|
|
2661
|
-
<label for="node-input-interim">Interim transcriptions</label>
|
|
2662
|
-
<input type="checkbox" id="node-input-interim">
|
|
2663
|
-
</div>
|
|
2664
|
-
<div id="stt-identify-channels" class="form-row">
|
|
2665
|
-
<label for="node-input-separaterecog">Separate recognition per channel</label>
|
|
2666
|
-
<input type="checkbox" id="node-input-separaterecog">
|
|
2667
|
-
</div>
|
|
2668
|
-
<div id="google-stt-options">
|
|
2669
|
-
<legend>Google Transcription Options</legend>
|
|
2670
|
-
<div class="form-row">
|
|
2671
|
-
<label for="node-input-transcriptionhints">Hints</label>
|
|
2672
|
-
<input type="text" id="node-input-transcriptionhints" placeholder="comma-separated list of phrases">
|
|
2673
|
-
<input type="hidden" id="node-input-transcriptionhintsType">
|
|
2674
|
-
</div>
|
|
2675
|
-
<div class="form-row">
|
|
2676
|
-
<label for="node-input-recognizeraltlang">Alternative languages</label>
|
|
2677
|
-
<input type="text" id="node-input-recognizeraltlang" placeholder="comma-separated list of add'l lang codes">
|
|
2678
|
-
<input type="hidden" id="node-input-recognizeraltlangType">
|
|
2679
|
-
</div>
|
|
2680
|
-
<div class="form-row">
|
|
2681
|
-
<label for="node-input-useenhanced">Use enhanced model</label>
|
|
2682
|
-
<input type="checkbox" id="node-input-useenhanced">
|
|
2683
|
-
</div>
|
|
2684
|
-
<div class="form-row">
|
|
2685
|
-
<label for="node-input-profanityfilter">Profanity filter</label>
|
|
2686
|
-
<input type="checkbox" id="node-input-profanityfilter">
|
|
2687
|
-
</div>
|
|
2688
|
-
<div class="form-row">
|
|
2689
|
-
<label for="node-input-words">Word time offsets</label>
|
|
2690
|
-
<input type="checkbox" id="node-input-words">
|
|
2691
|
-
</div>
|
|
2692
|
-
<div class="form-row">
|
|
2693
|
-
<label for="node-input-punctuation">Automatic punctuation</label>
|
|
2694
|
-
<input type="checkbox" id="node-input-punctuation">
|
|
2695
|
-
</div>
|
|
2696
|
-
<div class="form-row">
|
|
2697
|
-
<label for="node-input-diarization">Speaker diarization</label>
|
|
2698
|
-
<input type="checkbox" id="node-input-diarization">
|
|
2699
|
-
</div>
|
|
2700
|
-
<div class="form-row">
|
|
2701
|
-
<label for="node-input-diarizationmin">Min speaker count</label>
|
|
2702
|
-
<input type="text" id="node-input-diarizationmin" placeholder="2">
|
|
2703
|
-
<input type="hidden" id="node-input-diarizationminType">
|
|
2704
|
-
</div>
|
|
2705
|
-
<div class="form-row">
|
|
2706
|
-
<label for="node-input-diarizationmax">Max speaker count</label>
|
|
2707
|
-
<input type="text" id="node-input-diarizationmax" placeholder="6">
|
|
2708
|
-
<input type="hidden" id="node-input-diarizationmaxType">
|
|
2709
|
-
</div>
|
|
2710
|
-
<div class="form-row">
|
|
2711
|
-
<label for="node-input-interactiontype">Type of Interaction</label>
|
|
2712
|
-
<select id="node-input-interactiontype">
|
|
2713
|
-
<option value="unspecified" selected>Unspecified</option>
|
|
2714
|
-
<option value="discussion">Discusssion</option>
|
|
2715
|
-
<option value="presentation">Presentation</option>
|
|
2716
|
-
<option value="phone_call">Phone call</option>
|
|
2717
|
-
<option value="voicemail">Voicemail</option>
|
|
2718
|
-
<option value="voice_search">Voice search</option>
|
|
2719
|
-
<option value="voice_command">Voice command</option>
|
|
2720
|
-
<option value="dictation">Dictation</option>
|
|
2721
|
-
</select>
|
|
2722
|
-
</div>
|
|
2723
|
-
<div class="form-row">
|
|
2724
|
-
<label for="node-input-naics">Industry NAICS code</label>
|
|
2725
|
-
<input type="text" id="node-input-naics">
|
|
2726
|
-
<input type="hidden" id="node-input-naicsType">
|
|
2727
|
-
</div>
|
|
2728
|
-
</div>
|
|
2729
|
-
<div id="aws-stt-options">
|
|
2730
|
-
<legend>AWS Transcription Options</legend>
|
|
2731
|
-
<div class="form-row">
|
|
2732
|
-
<label for="node-input-identifychannels">Enable channel identification</label>
|
|
2733
|
-
<input type="checkbox" id="node-input-identifychannels">
|
|
2734
|
-
</div>
|
|
2735
|
-
<div class="form-row">
|
|
2736
|
-
<label for="node-input-speakerlabel">Show speaker labels</label>
|
|
2737
|
-
<input type="checkbox" id="node-input-speakerlabel">
|
|
2738
|
-
</div>
|
|
2739
|
-
<div class="form-row">
|
|
2740
|
-
<label for="node-input-vocabularyname">Vocabulary name</label>
|
|
2741
|
-
<input type="text" id="node-input-vocabularyname">
|
|
2742
|
-
<input type="hidden" id="node-input-vocabularynameType">
|
|
2743
|
-
</div>
|
|
2744
|
-
<div class="form-row">
|
|
2745
|
-
<label for="node-input-vocabularyfiltername">Vocabulary filter name</label>
|
|
2746
|
-
<input type="text" id="node-input-vocabularyfiltername">
|
|
2747
|
-
<input type="hidden" id="node-input-vocabularyfilternameType">
|
|
2748
|
-
</div>
|
|
2749
|
-
<div class="form-row">
|
|
2750
|
-
<label for="node-input-vocabularyfiltermethod">Filter method</label>
|
|
2751
|
-
<select id="node-input-vocabularyfiltermethod">
|
|
2752
|
-
<option value="remove" selected>Remove</option>
|
|
2753
|
-
<option value="mask" selected>Mask</option>
|
|
2754
|
-
<option value="tag" selected>Tag</option>
|
|
2755
|
-
</select>
|
|
2756
|
-
</div>
|
|
2757
|
-
</div>
|
|
2758
|
-
</fieldset>
|
|
2759
|
-
|
|
2760
|
-
</script>
|
|
2761
|
-
|
|
2762
|
-
<script type="text/html" data-help-name="listen">
|
|
2763
|
-
<p>send live audio for the call to an over a websocket connection</p>
|
|
2764
|
-
<h3>Inputs</h3>
|
|
2765
|
-
<dl class="message-properties">
|
|
2766
|
-
<dt>ws url<span class="property-type">string</span></dt>
|
|
2767
|
-
<dd>url of remote server to connect to </dd>
|
|
2768
|
-
<dt>User<span class="property-type">string</span></dt>
|
|
2769
|
-
<dd>Username for HTTP Basic Auth</dd>
|
|
2770
|
-
<dt>Password<span class="property-type">string</span></dt>
|
|
2771
|
-
<dd>Password for HTTP Basic Auth</dd>
|
|
2772
|
-
<dt>Action hook<span class="property-type">string</span></dt>
|
|
2773
|
-
<dd>webhook to invoke when listen operation ends</dd>
|
|
2774
|
-
<dt>Metadata<span class="property-type">json</span></dt>
|
|
2775
|
-
<dd>arbitrary data to add to the JSON payload sent to the remote server when websocket connection is first connected</dd>
|
|
2776
|
-
<dt>Max duration<span class="property-type">number</span></dt>
|
|
2777
|
-
<dd>the maximum length of the listened audio stream, in secs</dd>
|
|
2778
|
-
<dt>End key<span class="property-type">string</span></dt>
|
|
2779
|
-
<dd>The set of digits that can end the listen action</dd>
|
|
2780
|
-
<dt>Beep<span class="property-type">string</span></dt>
|
|
2781
|
-
<dd>if checked, play a beep at the start of the listen operation</dd>
|
|
2782
|
-
<dt>Mix type<span class="property-type">string</span></dt>
|
|
2783
|
-
<dd>whether to record a mono or stereo stream</dd>
|
|
2784
|
-
<dt>Sample rate<span class="property-type">number</span></dt>
|
|
2785
|
-
<dd>Sample rate of audio to stream</dd>
|
|
2786
|
-
<dt>Transcription hook<span class="property-type">string</span></dt>
|
|
2787
|
-
<dd>webhook to call when a transcription is received</dd>
|
|
2788
|
-
<dt>Language<span class="property-type">string</span></dt>
|
|
2789
|
-
<dd>Language to use for transcription</dd>
|
|
2790
|
-
<dt>Send interim transcriptions<span class="property-type">boolean</span></dt>
|
|
2791
|
-
<dd>if checked, send interim transcriptions</dd>
|
|
2792
|
-
<dt>Profanity filter<span class="property-type">boolean</span></dt>
|
|
2793
|
-
<dd>if checked, enable profanity filtering</dd>
|
|
2794
|
-
|
|
2795
|
-
</dl>
|
|
2796
|
-
|
|
2797
|
-
<h3>Outputs</h3>
|
|
2798
|
-
<dl class="message-properties">
|
|
2799
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
2800
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>listen</code> action appended </dd>
|
|
2801
|
-
</dl>
|
|
2802
|
-
|
|
2803
|
-
<h3>Details</h3>
|
|
2804
|
-
The listen verb establishes a connection to a websocket server and sends live audio for the current call.<h3>References</h3>
|
|
2805
|
-
<ul>
|
|
2806
|
-
<li><a href="https://docs.jambonz.org/jambonz/#listen">Jambonz listen reference</a></li>
|
|
2807
|
-
</ul>
|
|
2808
|
-
</script>
|
|
2809
|
-
|
|
2810
|
-
<!-- message -->
|
|
2811
|
-
<script type="text/html" data-template-name="message">
|
|
2812
|
-
<div class="form-row">
|
|
2813
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
2814
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
2815
|
-
</div>
|
|
2816
|
-
<div class="form-row">
|
|
2817
|
-
<label for="node-input-from">From</label>
|
|
2818
|
-
<input type="text" id="node-input-from" placeholder="sending number">
|
|
2819
|
-
<input type="hidden" id="node-input-fromType">
|
|
2820
|
-
</div>
|
|
2821
|
-
<div class="form-row">
|
|
2822
|
-
<label for="node-input-to">To</label>
|
|
2823
|
-
<input type="text" id="node-input-to" placeholder="destination number">
|
|
2824
|
-
<input type="hidden" id="node-input-toType">
|
|
2825
|
-
</div>
|
|
2826
|
-
<div class="form-row">
|
|
2827
|
-
<label for="node-input-text">Text</label>
|
|
2828
|
-
<input type="text" id="node-input-text" placeholder="Text">
|
|
2829
|
-
<input type="hidden" id="node-input-textType">
|
|
2830
|
-
</div>
|
|
2831
|
-
<div class="form-row">
|
|
2832
|
-
<label for="node-input-provider">SMS Provider</label>
|
|
2833
|
-
<input type="text" id="node-input-provider">
|
|
2834
|
-
<input type="hidden" id="node-input-providerType">
|
|
2835
|
-
</div>
|
|
2836
|
-
</script>
|
|
2837
|
-
|
|
2838
|
-
<script type="text/html" data-help-name="message">
|
|
2839
|
-
<p>Send an SMS</p>
|
|
2840
|
-
<h3>Inputs</h3>
|
|
2841
|
-
<dl class="message-properties">
|
|
2842
|
-
|
|
2843
|
-
</dl>
|
|
2844
|
-
|
|
2845
|
-
<h3>Outputs</h3>
|
|
2846
|
-
<dl class="message-properties">
|
|
2847
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
2848
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>message</code> action appended </dd>
|
|
2849
|
-
</dl>
|
|
2850
|
-
|
|
2851
|
-
<h3>Details</h3>
|
|
2852
|
-
The message verb sends an SMS message.
|
|
2853
|
-
<h3>References</h3>
|
|
2854
|
-
<ul>
|
|
2855
|
-
<li><a href="https://docs.jambonz.org/jambonz/#message">Jambonz redirect reference</a></li>
|
|
2856
|
-
</ul>
|
|
2857
|
-
</script>
|
|
2858
|
-
<!-- pause -->
|
|
2859
|
-
<script type="text/html" data-template-name="pause">
|
|
2860
|
-
<div class="form-row">
|
|
2861
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
2862
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
2863
|
-
</div>
|
|
2864
|
-
<div class="form-row">
|
|
2865
|
-
<label for="node-input-length">Duration</label>
|
|
2866
|
-
<input type="text" id="node-input-len" placeholder="number of seconds to pause">
|
|
2867
|
-
<input type="hidden" id="node-input-lenType">
|
|
2868
|
-
</div>
|
|
2869
|
-
</script>
|
|
2870
|
-
|
|
2871
|
-
<script type="text/html" data-help-name="pause">
|
|
2872
|
-
<p>Pause a specified number of seconds</p>
|
|
2873
|
-
<h3>Inputs</h3>
|
|
2874
|
-
<dl class="message-properties">
|
|
2875
|
-
<dt>Duration<span class="property-type">object</span></dt>
|
|
2876
|
-
<dd>Number of seconds pause</dd>
|
|
2877
|
-
</dl>
|
|
2878
|
-
|
|
2879
|
-
<h3>Outputs</h3>
|
|
2880
|
-
<dl class="message-properties">
|
|
2881
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
2882
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>pause</code> action appended </dd>
|
|
2883
|
-
</dl>
|
|
2884
|
-
|
|
2885
|
-
<h3>Details</h3>
|
|
2886
|
-
The pause verb waits a specified number of seconds before continuing to execute the application.
|
|
2887
|
-
<h3>References</h3>
|
|
2888
|
-
<ul>
|
|
2889
|
-
<li><a href="https://docs.jambonz.org/jambonz/#pause">Jambonz pause reference</a></li>
|
|
2890
|
-
</ul>
|
|
2891
|
-
</script>
|
|
2892
|
-
|
|
2893
|
-
<!-- play -->
|
|
2894
|
-
<script type="text/html" data-template-name="play">
|
|
2895
|
-
<div class="form-row">
|
|
2896
|
-
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
2897
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
2898
|
-
</div>
|
|
2899
|
-
<div class="form-row">
|
|
2900
|
-
<label for="node-input-url">Url</label>
|
|
2901
|
-
<input type="text" id="node-input-url" placeholder="url returning .mp3 or .wav file">
|
|
2902
|
-
<input type="hidden" id="node-input-urlType">
|
|
2903
|
-
</div>
|
|
2904
|
-
<div class="form-row">
|
|
2905
|
-
<label for="node-input-early"><i class="icon-tag"></i>Early media</label>
|
|
2906
|
-
<input type="checkbox" id="node-input-early">
|
|
2907
|
-
</div>
|
|
2908
|
-
<div class="form-row">
|
|
2909
|
-
<label for="node-input-loop"><i class="icon-tag"></i>Loop</label>
|
|
2910
|
-
<input type="input" id="node-input-loop" placeholder="number of times to repeat">
|
|
2911
|
-
</div>
|
|
2912
|
-
</script>
|
|
2913
|
-
|
|
2914
|
-
<script type="text/html" data-help-name="play">
|
|
2915
|
-
<p>Play a wav or mp3 file</p>
|
|
2916
|
-
<h3>Inputs</h3>
|
|
2917
|
-
<dl class="message-properties">
|
|
2918
|
-
<dt>Url<span class="property-type">string</span></dt>
|
|
2919
|
-
<dd>a single url or array of urls (will play in sequence) to a wav or mp3 file</dd>
|
|
2920
|
-
<dt>Early media<span class="property-type">boolean</span></dt>
|
|
2921
|
-
<dd>if checked, play the url over an early media connection</dd>
|
|
2922
|
-
<dt>Loop<span class="property-type">number</span></dt>
|
|
2923
|
-
<dd>number of times to play the url</dd>
|
|
2924
|
-
</dl>
|
|
2925
|
-
|
|
2926
|
-
<h3>Outputs</h3>
|
|
2927
|
-
<dl class="message-properties">
|
|
2928
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
2929
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>play</code> action appended </dd>
|
|
2930
|
-
</dl>
|
|
2931
|
-
|
|
2932
|
-
<h3>Details</h3>
|
|
2933
|
-
The play action plays an mp3 or wave file into a call. If early media is checked, the audio will be played over an early media connection,
|
|
2934
|
-
if the call has not already been answered.
|
|
2935
|
-
|
|
2936
|
-
<h3>References</h3>
|
|
2937
|
-
<ul>
|
|
2938
|
-
<li><a href="https://docs.jambonz.org/jambonz/#play">Jambonz play reference</a></li>
|
|
2939
|
-
</ul>
|
|
2940
|
-
</script>
|
|
2941
|
-
|
|
2942
|
-
<!-- redirect -->
|
|
2943
|
-
<script type="text/html" data-template-name="redirect">
|
|
2944
|
-
<div class="form-row">
|
|
2945
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
2946
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
2947
|
-
</div>
|
|
2948
|
-
<div class="form-row">
|
|
2949
|
-
<label for="node-input-hook">Action hook</label>
|
|
2950
|
-
<input type="text" id="node-input-hook" placeholder="url">
|
|
2951
|
-
<input type="hidden" id="node-input-hookType">
|
|
2952
|
-
</div>
|
|
2953
|
-
</script>
|
|
2954
|
-
|
|
2955
|
-
<script type="text/html" data-help-name="redirect">
|
|
2956
|
-
<p>Redirect a call to a new application URL</p>
|
|
2957
|
-
<h3>Inputs</h3>
|
|
2958
|
-
<dl class="message-properties">
|
|
2959
|
-
<dt>Action hook<span class="property-type">string</span></dt>
|
|
2960
|
-
<dd>URL of webhook to retrieve new application from.</dd>
|
|
2961
|
-
</dl>
|
|
2962
|
-
|
|
2963
|
-
<h3>Outputs</h3>
|
|
2964
|
-
<dl class="message-properties">
|
|
2965
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
2966
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>redirect</code> action appended </dd>
|
|
2967
|
-
</dl>
|
|
2968
|
-
|
|
2969
|
-
<h3>Details</h3>
|
|
2970
|
-
The redirect verb retrieves a new URL to execute for the current call.
|
|
2971
|
-
<h3>References</h3>
|
|
2972
|
-
<ul>
|
|
2973
|
-
<li><a href="https://docs.jambonz.org/jambonz/#redirect">Jambonz redirect reference</a></li>
|
|
2974
|
-
</ul>
|
|
2975
|
-
</script>
|
|
2976
|
-
|
|
2977
|
-
<!-- say -->
|
|
2978
|
-
<script type="text/html" data-template-name="say">
|
|
2979
|
-
<div class="form-row">
|
|
2980
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
2981
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
2982
|
-
</div>
|
|
2983
|
-
<div class="form-row">
|
|
2984
|
-
<label for="node-input-text"><i class="icon-tag"></i> Text</label>
|
|
2985
|
-
<textarea id="node-input-text" rows="4" placeholder="Text or SSML to speak" style="width:70%"></textarea>
|
|
2986
|
-
</div>
|
|
2987
|
-
<div class="form-row">
|
|
2988
|
-
<label for="node-input-early"><i class="icon-tag"></i>Early media</label>
|
|
2989
|
-
<input type="checkbox" id="node-input-early">
|
|
2990
|
-
</div>
|
|
2991
|
-
<div class="form-row">
|
|
2992
|
-
<label for="node-input-loop"><i class="icon-tag"></i>Loop</label>
|
|
2993
|
-
<input type="input" id="node-input-loop" placeholder="number of times to repeat">
|
|
2994
|
-
</div>
|
|
2995
|
-
<fieldset>
|
|
2996
|
-
<legend>Speech synthesis options</legend>
|
|
2997
|
-
<div class="form-row">
|
|
2998
|
-
<label for="node-input-vendor">Vendor</label>
|
|
2999
|
-
<select id="node-input-vendor">
|
|
3000
|
-
<option value="default" selected>--application default--</option>
|
|
3001
|
-
<option value="google">google</option>
|
|
3002
|
-
<option value="aws">aws/polly</option>
|
|
3003
|
-
</select>
|
|
3004
|
-
</div>
|
|
3005
|
-
<div class="form-row" style="display: none;">
|
|
3006
|
-
<label for="node-input-lang"> Lang</label>
|
|
3007
|
-
<input type="text" id="node-input-lang">
|
|
3008
|
-
</div>
|
|
3009
|
-
<div class="form-row">
|
|
3010
|
-
<label for="node-input-xlang">Language</label>
|
|
3011
|
-
<select id="node-input-xlang">
|
|
3012
|
-
<option value="default" selected>--application default--</option>
|
|
3013
|
-
</select>
|
|
3014
|
-
</div>
|
|
3015
|
-
<div class="form-row" style="display: none;">
|
|
3016
|
-
<label for="node-input-voice"> Voice</label>
|
|
3017
|
-
<input type="text" id="node-input-voice">
|
|
3018
|
-
</div>
|
|
3019
|
-
<div class="form-row">
|
|
3020
|
-
<label for="node-input-xvoice">Voice</label>
|
|
3021
|
-
<select id="node-input-xvoice">
|
|
3022
|
-
<option value="default" selected>--application default--</option>
|
|
3023
|
-
</select>
|
|
3024
|
-
</div>
|
|
3025
|
-
</fieldset>
|
|
3026
|
-
</script>
|
|
3027
|
-
|
|
3028
|
-
<script type="text/html" data-help-name="say">
|
|
3029
|
-
<p>Synthesize speech from text or SSML</p>
|
|
3030
|
-
<h3>Inputs</h3>
|
|
3031
|
-
<dl class="message-properties">
|
|
3032
|
-
<dt>Text<span class="property-type">string</span></dt>
|
|
3033
|
-
<dd>text to speak; may contain SSML tags</dd>
|
|
3034
|
-
<dt>Early media<span class="property-type">boolean</span></dt>
|
|
3035
|
-
<dd>if checked, play the prompt over an early media connection</dd>
|
|
3036
|
-
<dt>Loop<span class="property-type">number</span></dt>
|
|
3037
|
-
<dd>number of times to play the prompt</dd>
|
|
3038
|
-
<dt>Vendor<span class="property-type">string</span></dt>
|
|
3039
|
-
<dd>TTS vendor</dd>
|
|
3040
|
-
<dt>Language<span class="property-type">string</span></dt>
|
|
3041
|
-
<dd>TTS language</dd>
|
|
3042
|
-
<dt>Voice<span class="property-type">string</span></dt>
|
|
3043
|
-
<dd>TTS voice</dd>
|
|
3044
|
-
</dl>
|
|
3045
|
-
|
|
3046
|
-
<h3>Outputs</h3>
|
|
3047
|
-
<dl class="message-properties">
|
|
3048
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
3049
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>say</code> action appended </dd>
|
|
3050
|
-
</dl>
|
|
3051
|
-
|
|
3052
|
-
<h3>Details</h3>
|
|
3053
|
-
The say command is used to send synthesized speech to the remote party.
|
|
3054
|
-
The text provided may be either plain text or may use SSML tags.
|
|
3055
|
-
<h3>References</h3>
|
|
3056
|
-
<ul>
|
|
3057
|
-
<li><a href="https://docs.jambonz.org/jambonz/#say">Jambonz say reference</a></li>
|
|
3058
|
-
</script>
|
|
3059
|
-
|
|
3060
|
-
<!-- sip:decline -->
|
|
3061
|
-
<script type="text/html" data-template-name="sip:decline">
|
|
3062
|
-
<div class="form-row">
|
|
3063
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
3064
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
3065
|
-
</div>
|
|
3066
|
-
<div class="form-row">
|
|
3067
|
-
<label for="node-input-status">Status</label>
|
|
3068
|
-
<input type="text" id="node-input-status" placeholder="SIP status code">
|
|
3069
|
-
<input type="hidden" id="node-input-statusType">
|
|
3070
|
-
</div>
|
|
3071
|
-
<div class="form-row">
|
|
3072
|
-
<label for="node-input-reason">Reason</label>
|
|
3073
|
-
<input type="text" id="node-input-reason" placeholder="sip reason">
|
|
3074
|
-
<input type="hidden" id="node-input-reasonType">
|
|
3075
|
-
</div>
|
|
3076
|
-
</script>
|
|
3077
|
-
|
|
3078
|
-
<script type="text/html" data-help-name="sip:decline">
|
|
3079
|
-
<p>Reject an incoming call with a status code and, optionally, reason</p>
|
|
3080
|
-
<h3>Inputs</h3>
|
|
3081
|
-
<dl class="message-properties">
|
|
3082
|
-
<dt>SIP status code<span class="property-type">number</span></dt>
|
|
3083
|
-
<dd>A valid SIP status code in the range 4XX - 6XX</dd>
|
|
3084
|
-
<dt>Reason<span class="property-type">string</span></dt>
|
|
3085
|
-
<dd>A brief description</dd>
|
|
3086
|
-
</dl>
|
|
3087
|
-
|
|
3088
|
-
<h3>Outputs</h3>
|
|
3089
|
-
<dl class="message-properties">
|
|
3090
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
3091
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>sip:decline</code> action appended </dd>
|
|
3092
|
-
</dl>
|
|
3093
|
-
|
|
3094
|
-
<h3>Details</h3>
|
|
3095
|
-
The sip:decline verb rejects an incoming call.
|
|
3096
|
-
<h3>References</h3>
|
|
3097
|
-
<ul>
|
|
3098
|
-
<li><a href="https://docs.jambonz.org/jambonz/#sipdecline">Jambonz sip:decline reference</a></li>
|
|
3099
|
-
</ul>
|
|
3100
|
-
</script>
|
|
3101
|
-
|
|
3102
|
-
<!-- tag -->
|
|
3103
|
-
<script type="text/html" data-template-name="tag">
|
|
3104
|
-
<div class="form-row">
|
|
3105
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
3106
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
3107
|
-
</div>
|
|
3108
|
-
<div class="form-row">
|
|
3109
|
-
<label for="node-input-length">Data</label>
|
|
3110
|
-
<input type="text" id="node-input-data" placeholder="data object">
|
|
3111
|
-
<input type="hidden" id="node-input-dataType">
|
|
3112
|
-
</div>
|
|
3113
|
-
</script>
|
|
3114
|
-
|
|
3115
|
-
<script type="text/html" data-help-name="tag">
|
|
3116
|
-
<p>Add additional metadata to a call</p>
|
|
3117
|
-
<h3>Inputs</h3>
|
|
3118
|
-
<dl class="message-properties">
|
|
3119
|
-
<dt>Data<span class="property-type">json</span></dt>
|
|
3120
|
-
<dd>A JSON object containing values to be saved and included in future action or call status notifications.</dd>
|
|
3121
|
-
</dl>
|
|
3122
|
-
|
|
3123
|
-
<h3>Outputs</h3>
|
|
3124
|
-
<dl class="message-properties">
|
|
3125
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
3126
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>tag</code> action appended </dd>
|
|
3127
|
-
</dl>
|
|
3128
|
-
|
|
3129
|
-
<h3>Details</h3>
|
|
3130
|
-
The tag verb is used to add properties to the standard call attributes that jambonz includes on every action or call status HTTP POST request.<h3>References</h3>
|
|
3131
|
-
<ul>
|
|
3132
|
-
<li><a href="https://docs.jambonz.org/jambonz/#tag">Jambonz tag reference</a></li>
|
|
3133
|
-
</ul>
|
|
3134
|
-
</script>
|
|
3135
|
-
|
|
3136
|
-
<!-- dialogflow -->
|
|
3137
|
-
<script type="text/html" data-template-name="dialogflow">
|
|
3138
|
-
<div class="form-row">
|
|
3139
|
-
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
3140
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
3141
|
-
</div>
|
|
3142
|
-
<div class="form-row">
|
|
3143
|
-
<label for="node-input-project">Dialogflow project ID</label>
|
|
3144
|
-
<input type="text" id="node-input-project">
|
|
3145
|
-
<input type="hidden" id="node-input-projectType">
|
|
3146
|
-
</div>
|
|
3147
|
-
<div class="form-row">
|
|
3148
|
-
<label for="node-input-project">Environment</label>
|
|
3149
|
-
<input type="text" id="node-input-environment">
|
|
3150
|
-
<input type="hidden" id="node-input-enviromentType">
|
|
3151
|
-
</div>
|
|
3152
|
-
<div class="form-row">
|
|
3153
|
-
<label for="node-input-recognizerlang">Speaker language</label>
|
|
3154
|
-
<select id="node-input-recognizerlang">
|
|
3155
|
-
<option value="placeholder"></option>
|
|
3156
|
-
</select>
|
|
3157
|
-
</div>
|
|
3158
|
-
<div class="form-row">
|
|
3159
|
-
<label for="node-input-serviceAccountCredentials">Service account key</label>
|
|
3160
|
-
<input type="text" id="node-input-serviceAccountCredentials">
|
|
3161
|
-
<input type="hidden" id="node-input-serviceAccountCredentialsType">
|
|
3162
|
-
</div>
|
|
3163
|
-
<div class="form-row">
|
|
3164
|
-
<label for="node-input-welcomeEvent">Welcome intent</label>
|
|
3165
|
-
<input type="text" id="node-input-welcomeEvent" placeholder="event to send on connect">
|
|
3166
|
-
<input type="hidden" id="node-input-welcomeEventType">
|
|
3167
|
-
</div>
|
|
3168
|
-
<div class="form-row">
|
|
3169
|
-
<label for="node-input-welcomeEventParams">Welcome intent parameters</label>
|
|
3170
|
-
<input type="text" id="node-input-welcomeEventParams">
|
|
3171
|
-
<input type="hidden" id="node-input-welcomeEventParamsType">
|
|
3172
|
-
</div>
|
|
3173
|
-
<div class="form-row">
|
|
3174
|
-
<label for="node-input-inputTimeout">Input timeout</label>
|
|
3175
|
-
<input type="text" id="node-input-inputTimeout" placeholder="seconds to wait for a response">
|
|
3176
|
-
<input type="hidden" id="node-input-inputTimeoutType">
|
|
3177
|
-
</div>
|
|
3178
|
-
<div class="form-row">
|
|
3179
|
-
<label for="node-input-noInputEvent">Input timeout intent</label>
|
|
3180
|
-
<input type="text" id="node-input-noInputEvent" placeholder="event to send on input timeout">
|
|
3181
|
-
<input type="hidden" id="node-input-noInputEventType">
|
|
3182
|
-
</div>
|
|
3183
|
-
<div class="form-row">
|
|
3184
|
-
<label for="node-input-bargein">Barge in on speech?</label>
|
|
3185
|
-
<input type="checkbox" id="node-input-bargein">
|
|
3186
|
-
</div>
|
|
3187
|
-
<div class="form-row">
|
|
3188
|
-
<label for="node-input-eventHook">Event Hook</label>
|
|
3189
|
-
<input type="text" id="node-input-eventHook">
|
|
3190
|
-
<input type="hidden" id="node-input-eventHookType">
|
|
3191
|
-
</div>
|
|
3192
|
-
<div class="form-row">
|
|
3193
|
-
<label for="node-input-actionHook">Action Hook</label>
|
|
3194
|
-
<input type="text" id="node-input-actionHook">
|
|
3195
|
-
<input type="hidden" id="node-input-actionHookType">
|
|
3196
|
-
</div>
|
|
3197
|
-
<div class="form-row">
|
|
3198
|
-
<label for="node-input-prompt">Prompt audio</label>
|
|
3199
|
-
<select id="node-input-prompt" style="width:250px;">
|
|
3200
|
-
<option value="dialogflow">Use dialogflow-provided audio</option>
|
|
3201
|
-
<option value="tts">Use text to speech</option>
|
|
3202
|
-
</select>
|
|
3203
|
-
</div>
|
|
3204
|
-
<div id="tts-options">
|
|
3205
|
-
<div class="form-row">
|
|
3206
|
-
<label for="node-input-vendor"> Vendor</label>
|
|
3207
|
-
<select id="node-input-vendor">
|
|
3208
|
-
<option value="default" selected>--application default--</option>
|
|
3209
|
-
<option value="google">google</option>
|
|
3210
|
-
<option value="aws">aws/polly</option>
|
|
3211
|
-
</select>
|
|
3212
|
-
</div>
|
|
3213
|
-
<div class="form-row" style="display: none;">
|
|
3214
|
-
<label for="node-input-lang"> Lang</label>
|
|
3215
|
-
<input type="text" id="node-input-lang">
|
|
3216
|
-
</div>
|
|
3217
|
-
<div class="form-row">
|
|
3218
|
-
<label for="node-input-xlang">Language</label>
|
|
3219
|
-
<select id="node-input-xlang">
|
|
3220
|
-
<option value="default" selected>--application default--</option>
|
|
3221
|
-
</select>
|
|
3222
|
-
</div>
|
|
3223
|
-
<div class="form-row" style="display: none;">
|
|
3224
|
-
<label for="node-input-voice"> Voice</label>
|
|
3225
|
-
<input type="text" id="node-input-voice">
|
|
3226
|
-
</div>
|
|
3227
|
-
<div class="form-row">
|
|
3228
|
-
<label for="node-input-xvoice">Voice</label>
|
|
3229
|
-
<select id="node-input-xvoice">
|
|
3230
|
-
<option value="default" selected>--application default--</option>
|
|
3231
|
-
</select>
|
|
3232
|
-
</div>
|
|
3233
|
-
</div>
|
|
3234
|
-
</script>
|
|
3235
|
-
|
|
3236
|
-
<script type="text/html" data-help-name="dialogflow">
|
|
3237
|
-
<p>Run a Google dialogflow bot on the call</p>
|
|
3238
|
-
<h3>Inputs</h3>
|
|
3239
|
-
<dl class="message-properties">
|
|
3240
|
-
<dt>Dialogflow Project ID<span class="property-type">string</span></dt>
|
|
3241
|
-
<dd> The name of the dialogflow project to execute. Required.</dd>
|
|
3242
|
-
<dt>Service Account Key<span class="property-type">string</span></dt>
|
|
3243
|
-
<dd> A Google service account key in JSON format is used to authenticate to dialogflow. Required.</dd>
|
|
3244
|
-
<dt>Language<span class="property-type">string</span></dt>
|
|
3245
|
-
<dd> The ISO language code to use for speech recognition. Required.</dd>
|
|
3246
|
-
<dt>Welcome Intent<span class="property-type">string</span></dt>
|
|
3247
|
-
<dd> The name of a dialogflow intent to send when the call is first connected. Optional.</dd>
|
|
3248
|
-
<dt>Welcome Intent Parameters<span class="property-type">object</span></dt>
|
|
3249
|
-
<dd> A JSON object containing parameters to send along with the welcome intent. Optional.</dd>
|
|
3250
|
-
<dt>Input Timeout<span class="property-type">number</span></dt>
|
|
3251
|
-
<dd> Number of seconds to wait for no response. Optional.</dd>
|
|
3252
|
-
<dt>Event Hook<span class="property-type">number</span></dt>
|
|
3253
|
-
<dd> Webhook to call when an intent, transcription or other dialogflow event is received. Optional.</dd>
|
|
3254
|
-
<dt>Action Hook<span class="property-type">number</span></dt>
|
|
3255
|
-
<dd> Webhook to call when the dialogflow bot interaction concludes. Optional.</dd>
|
|
3256
|
-
</dl>
|
|
3257
|
-
|
|
3258
|
-
<h3>Outputs</h3>
|
|
3259
|
-
<dl class="message-properties">
|
|
3260
|
-
<dt>jambonz<span class="property-type">object</span></dt>
|
|
3261
|
-
<dd> <code>msg.jambonz</code> will contain any previous actions provided to the input with the new <code>dialogflow</code> action appended </dd>
|
|
3262
|
-
</dl>
|
|
3263
|
-
|
|
3264
|
-
<h3>Details</h3>
|
|
3265
|
-
The dialogflow action connects the call to a Google dialogflow voicebot.
|
|
3266
|
-
The action completes either when a new application is returned in a response to an eventHook, or the call is terminated from the dialogflow side.
|
|
3267
|
-
|
|
3268
|
-
<h3>References</h3>
|
|
3269
|
-
<ul>
|
|
3270
|
-
<li><a href="https://docs.jambonz.org/jambonz/#dialogflow">Jambonz dialogflow reference</a></li>
|
|
3271
|
-
</ul>
|
|
3272
|
-
</script>
|
|
3273
|
-
|
|
3274
|
-
<!-- api-token config node -->
|
|
3275
|
-
<script type="text/html" data-template-name="jambonz_auth">
|
|
3276
|
-
<div class="form-row">
|
|
3277
|
-
<label for="node-config-input-url">Base URL</label>
|
|
3278
|
-
<input type="text" id="node-config-input-url" placeholder="http://localhost:3000">
|
|
3279
|
-
</div>
|
|
3280
|
-
<div class="form-row">
|
|
3281
|
-
<label for="node-config-input-accountSid">AccountSid</label>
|
|
3282
|
-
<input type="text" id="node-config-input-accountSid">
|
|
3283
|
-
</div>
|
|
3284
|
-
<div class="form-row">
|
|
3285
|
-
<label for="node-config-input-apiToken">API token</label>
|
|
3286
|
-
<input type="text" id="node-config-input-apiToken">
|
|
3287
|
-
</div>
|
|
3288
|
-
<div class="form-row">
|
|
3289
|
-
<button id="btn-test-credentials"><i class="fa fa-lock"></i> Test Credentials</button>
|
|
3290
|
-
<span id="node-config-test-status" style="margin-left: 20px;"></span>
|
|
3291
|
-
</div>
|
|
3292
|
-
</script>
|
|
3293
|
-
|
|
3294
|
-
<script type="text/x-red" data-help-name="jambonz_auth">
|
|
3295
|
-
<p>Creates a new jambonz server credential </p>
|
|
3296
|
-
<h3>Details</h3>
|
|
3297
|
-
<p>Enter the base url of the server, along with your API key</p>
|
|
3298
|
-
</script>
|
|
3299
|
-
|
|
3300
|
-
<!-- aws config node -->
|
|
3301
|
-
<script type="text/html" data-template-name="aws_auth">
|
|
3302
|
-
<div class="form-row">
|
|
3303
|
-
<label for="node-config-input-accessKey">AWS Access Key ID</label>
|
|
3304
|
-
<input type="text" id="node-config-input-accessKey">
|
|
3305
|
-
</div>
|
|
3306
|
-
<div class="form-row">
|
|
3307
|
-
<label for="node-config-input-secretAccessKey">AWS Secret Access Key</label>
|
|
3308
|
-
<input type="text" id="node-config-input-secretAccessKey">
|
|
3309
|
-
</div>
|
|
3310
|
-
</script>
|
|
3311
|
-
|
|
3312
|
-
<script type="text/x-red" data-help-name="jambonz_auth">
|
|
3313
|
-
<p>AWS access key and secret access key to use for Lex</p>
|
|
3314
|
-
<h3>Details</h3>
|
|
3315
|
-
<p>Enter the AWS access key and secret access key</p>
|
|
3316
|
-
</script>
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
<!-- LCC -->
|
|
3320
|
-
<script type="text/html" data-template-name="lcc">
|
|
3321
|
-
<div class="form-row">
|
|
3322
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
3323
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
3324
|
-
</div>
|
|
3325
|
-
<div class="form-row">
|
|
3326
|
-
<label for="node-input-server">Server</label>
|
|
3327
|
-
<input type="text" id="node-input-server">
|
|
3328
|
-
</div>
|
|
3329
|
-
<div class="form-row">
|
|
3330
|
-
<label for="node-input-callSid">CallSid</label>
|
|
3331
|
-
<input type="text" id="node-input-callSid">
|
|
3332
|
-
<input type="hidden" id="node-input-callSidType">
|
|
3333
|
-
</div>
|
|
3334
|
-
<div class="form-row">
|
|
3335
|
-
<label for="node-input-action">Action</label>
|
|
3336
|
-
<select id="node-input-action">
|
|
3337
|
-
<option value="hangup">hangup call</option>
|
|
3338
|
-
<option value="mute">mute caller</option>
|
|
3339
|
-
<option value="unmute">unmute caller</option>
|
|
3340
|
-
<option value="mute_conf">mute conference participants</option>
|
|
3341
|
-
<option value="unmute_conf">unmute conference participants</option>
|
|
3342
|
-
<option value="hold_conf">hold conference participant</option>
|
|
3343
|
-
<option value="unhold_conf">unhold conference participant</option>
|
|
3344
|
-
<option value="pause">pause listen audio feed</option>
|
|
3345
|
-
<option value="resume">resume listen audio feed</option>
|
|
3346
|
-
<option value="redirect">redirect call</option>
|
|
3347
|
-
<option value="whisper">whisper</option>
|
|
3348
|
-
</select>
|
|
3349
|
-
</div>
|
|
3350
|
-
<div id="say-options">
|
|
3351
|
-
<div class="form-row">
|
|
3352
|
-
<label for="node-input-text">Text</label>
|
|
3353
|
-
<textarea id="node-input-text" rows="4" placeholder="Text or SSML to whisper" style="width:70%"></textarea>
|
|
3354
|
-
</div>
|
|
3355
|
-
<fieldset>
|
|
3356
|
-
<legend>Speech synthesis options</legend>
|
|
3357
|
-
<div class="form-row">
|
|
3358
|
-
<label for="node-input-vendor">Vendor</label>
|
|
3359
|
-
<select id="node-input-vendor">
|
|
3360
|
-
<option value="default" selected>--application default--</option>
|
|
3361
|
-
<option value="google">google</option>
|
|
3362
|
-
<option value="aws">aws/polly</option>
|
|
3363
|
-
</select>
|
|
3364
|
-
</div>
|
|
3365
|
-
<div class="form-row">
|
|
3366
|
-
<label for="node-input-lang">Language</label>
|
|
3367
|
-
<select id="node-input-lang">
|
|
3368
|
-
<option value="default" selected>--application default--</option>
|
|
3369
|
-
</select>
|
|
3370
|
-
</div>
|
|
3371
|
-
<div class="form-row">
|
|
3372
|
-
<label for="node-input-voice">Voice</label>
|
|
3373
|
-
<select id="node-input-voice">
|
|
3374
|
-
<option value="default" selected>--application default--</option>
|
|
3375
|
-
</select>
|
|
3376
|
-
</div>
|
|
3377
|
-
</fieldset>
|
|
3378
|
-
</div>
|
|
3379
|
-
<div id="redirect-options">
|
|
3380
|
-
<div class="form-row">
|
|
3381
|
-
<label for="node-input-callHook">Call webhook</label>
|
|
3382
|
-
<input type="text" id="node-input-callHook" placeholder="/path">
|
|
3383
|
-
<input type="hidden" id="node-input-callHookType">
|
|
3384
|
-
</div>
|
|
3385
|
-
</div>
|
|
3386
|
-
<div id="wait-options">
|
|
3387
|
-
<div class="form-row">
|
|
3388
|
-
<label for="node-input-waitHook">Wait webhook</label>
|
|
3389
|
-
<input type="text" id="node-input-waitHook" placeholder="/path">
|
|
3390
|
-
<input type="hidden" id="node-input-waitHookType">
|
|
3391
|
-
</div>
|
|
3392
|
-
</div>
|
|
3393
|
-
</script>
|
|
3394
|
-
|
|
3395
|
-
<script type="text/html" data-help-name="lcc">
|
|
3396
|
-
<p>Perform Live Call Control</p>
|
|
3397
|
-
<h3>Inputs</h3>
|
|
3398
|
-
<dl class="message-properties">
|
|
3399
|
-
<dt>Server<span class="property-type">config</span></dt>
|
|
3400
|
-
<dd>jambonz server to connect to</dd>
|
|
3401
|
-
<dt>CallSid<span class="property-type">string</span></dt>
|
|
3402
|
-
<dd>Call identifier</dd>
|
|
3403
|
-
<dt>Action<span class="property-type">string</span></dt>
|
|
3404
|
-
<dd>Action to perform on the call</dd>
|
|
3405
|
-
<dt>Text<span class="property-type">string</span></dt>
|
|
3406
|
-
<dd>Text to speak, only if action is 'whisper'</dd>
|
|
3407
|
-
<dt>Vendor<span class="property-type">string</span></dt>
|
|
3408
|
-
<dd>TTS vendor to use for whisper</dd>
|
|
3409
|
-
<dt>Language<span class="property-type">string</span></dt>
|
|
3410
|
-
<dd>TTS language to use for whisper</dd>
|
|
3411
|
-
<dt>Voice<span class="property-type">string</span></dt>
|
|
3412
|
-
<dd>TTS voice to use for whisper</dd>
|
|
3413
|
-
</dl>
|
|
3414
|
-
|
|
3415
|
-
<h3>Details</h3>
|
|
3416
|
-
The lcc command is used to perform live call control on a call in progress.
|
|
3417
|
-
The call can be terminated, the caller can be muted or unmuted, or the live
|
|
3418
|
-
audio feed that is being sent via a <a href="https://docs.jambonz.org/jambonz/#listen">listen</a> verb can be paused or resumed.
|
|
3419
|
-
<br/><br/>
|
|
3420
|
-
A common use case is to use dtmf captures in a <a href="https://docs.jambonz.org/jambonz/#dial">dial</a> verb to call a webhook
|
|
3421
|
-
that then uses lcc to modify the state of the call.
|
|
3422
|
-
<h3>References</h3>
|
|
3423
|
-
<ul>
|
|
3424
|
-
<li><a href="https://docs.jambonz.org/rest/#updating-a-call">Jambonz reference</a></li>
|
|
3425
|
-
</script>
|
|
3426
|
-
|
|
3427
|
-
<!-- Create call -->
|
|
3428
|
-
<script type="text/html" data-template-name="create-call">
|
|
3429
|
-
<div class="form-row">
|
|
3430
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
3431
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
3432
|
-
</div>
|
|
3433
|
-
<div class="form-row">
|
|
3434
|
-
<label for="node-input-server">Server</label>
|
|
3435
|
-
<input type="text" id="node-input-server">
|
|
3436
|
-
</div>
|
|
3437
|
-
<div class="form-row">
|
|
3438
|
-
<label for="node-input-from">From</label>
|
|
3439
|
-
<input type="text" id="node-input-from" placeholder="calling party number">
|
|
3440
|
-
<input type="hidden" id="node-input-fromType">
|
|
3441
|
-
</div>
|
|
3442
|
-
<div class="form-row">
|
|
3443
|
-
<label for="node-input-to">To</label>
|
|
3444
|
-
<input type="text" id="node-input-to" placeholder="called party info">
|
|
3445
|
-
<input type="hidden" id="node-input-toType">
|
|
3446
|
-
</div>
|
|
3447
|
-
<div class="form-row">
|
|
3448
|
-
<label for="node-input-dest">Call type</label>
|
|
3449
|
-
<select id="node-input-dest">
|
|
3450
|
-
<option value="phone">phone number</option>
|
|
3451
|
-
<option value="user">registered sip device/user</option>
|
|
3452
|
-
<option value="sip">sip endpoint</option>
|
|
3453
|
-
<option value="ms-teams">Microsoft teams</option>
|
|
3454
|
-
</select>
|
|
3455
|
-
</div>
|
|
3456
|
-
<div class="form-row">
|
|
3457
|
-
<label for="node-input-timeout">Ring timeout</label>
|
|
3458
|
-
<input type="text" id="node-input-timeout" placeholder="ring no answer timeout in secs (default: 60)">
|
|
3459
|
-
<input type="hidden" id="node-input-timeoutType">
|
|
3460
|
-
</div>
|
|
3461
|
-
<div class="form-row">
|
|
3462
|
-
<label for="node-input-application">Application</label>
|
|
3463
|
-
<select id="node-input-application">
|
|
3464
|
-
</select>
|
|
3465
|
-
</div>
|
|
3466
|
-
|
|
3467
|
-
</script>
|
|
3468
|
-
|
|
3469
|
-
<script type="text/html" data-help-name="create-call">
|
|
3470
|
-
<p>Create an outbound call</p>
|
|
3471
|
-
<h3>Inputs</h3>
|
|
3472
|
-
<dl class="message-properties">
|
|
3473
|
-
<dt>Server<span class="property-type">config</span></dt>
|
|
3474
|
-
<dd>jambonz server to connect to</dd>
|
|
3475
|
-
<dt>From<span class="property-type">string</span></dt>
|
|
3476
|
-
<dd>Calling party phone number</dd>
|
|
3477
|
-
<dt>To<span class="property-type">string</span></dt>
|
|
3478
|
-
<dd>Called party phone number, or other identifier</dd>
|
|
3479
|
-
<dt>Call type<span class="property-type">string</span></dt>
|
|
3480
|
-
<dd>Type of destination: phone number, registered user, sip endpoint, or microsoft teams</dd>
|
|
3481
|
-
<dt>Application<span class="property-type">string</span></dt>
|
|
3482
|
-
<dd>Application to execute when call is answered</dd>
|
|
3483
|
-
</dl>
|
|
3484
|
-
|
|
3485
|
-
<h3>Details</h3>
|
|
3486
|
-
The create call command is used to generate a new outbound call.
|
|
3487
|
-
When the call is answered the specified application's call hook will be invoked.
|
|
3488
|
-
<h3>References</h3>
|
|
3489
|
-
<ul>
|
|
3490
|
-
<li><a href="https://docs.jambonz.org/rest/#create-a-call">Jambonz reference</a></li>
|
|
3491
|
-
</ul>
|
|
3492
|
-
</script>
|
|
3493
|
-
|
|
3494
|
-
<!-- Create sms -->
|
|
3495
|
-
<script type="text/html" data-template-name="create-sms">
|
|
3496
|
-
<div class="form-row">
|
|
3497
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
3498
|
-
<input type="text" id="node-input-name" placeholder="Name">
|
|
3499
|
-
</div>
|
|
3500
|
-
<div class="form-row">
|
|
3501
|
-
<label for="node-input-server">Server</label>
|
|
3502
|
-
<input type="text" id="node-input-server">
|
|
3503
|
-
</div>
|
|
3504
|
-
<div class="form-row">
|
|
3505
|
-
<label for="node-input-from">From</label>
|
|
3506
|
-
<input type="text" id="node-input-from" placeholder="sending number">
|
|
3507
|
-
<input type="hidden" id="node-input-fromType">
|
|
3508
|
-
</div>
|
|
3509
|
-
<div class="form-row">
|
|
3510
|
-
<label for="node-input-to">To</label>
|
|
3511
|
-
<input type="text" id="node-input-to" placeholder="destination number">
|
|
3512
|
-
<input type="hidden" id="node-input-toType">
|
|
3513
|
-
</div>
|
|
3514
|
-
<div class="form-row">
|
|
3515
|
-
<label for="node-input-text">Text</label>
|
|
3516
|
-
<input type="text" id="node-input-text" placeholder="Text">
|
|
3517
|
-
<input type="hidden" id="node-input-textType">
|
|
3518
|
-
</div>
|
|
3519
|
-
<div class="form-row">
|
|
3520
|
-
<label for="node-input-provider">SMS Provider</label>
|
|
3521
|
-
<input type="text" id="node-input-provider">
|
|
3522
|
-
<input type="hidden" id="node-input-providerType">
|
|
3523
|
-
</div>
|
|
3524
|
-
</script>
|
|
3525
|
-
|
|
3526
|
-
<script type="text/html" data-help-name="create-sms">
|
|
3527
|
-
<p>Send an SMS</p>
|
|
3528
|
-
<h3>Inputs</h3>
|
|
3529
|
-
<dl class="message-properties">
|
|
3530
|
-
<dt>Server<span class="property-type">config</span></dt>
|
|
3531
|
-
<dd>jambonz server to connect to</dd>
|
|
3532
|
-
<dt>From<span class="property-type">string</span></dt>
|
|
3533
|
-
<dd>Sending party phone number</dd>
|
|
3534
|
-
<dt>To<span class="property-type">string</span></dt>
|
|
3535
|
-
<dd>Destination phone number</dd>
|
|
3536
|
-
<dt>Text<span class="property-type">string</span></dt>
|
|
3537
|
-
<dd>Text message</dd>
|
|
3538
|
-
</dl>
|
|
3539
|
-
|
|
3540
|
-
<h3>Details</h3>
|
|
3541
|
-
The create message command is used to send an SMS message.
|
|
3542
|
-
<!--
|
|
3543
|
-
<h3>References</h3>
|
|
3544
|
-
<ul>
|
|
3545
|
-
<li><a href="https://docs.jambonz.org/rest/#create-a-call">Jambonz reference</a></li>
|
|
3546
|
-
</ul>
|
|
3547
|
-
-->
|
|
3548
|
-
</script>
|