@jambonz/node-red-contrib-jambonz 2.2.73 → 2.3.1

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.
Files changed (93) hide show
  1. package/examples/Authenticating sip devices.json +1 -0
  2. package/examples/Conference with LCC.json +1 -0
  3. package/{src/examples → examples}/Connecting to a dialogflow bot.json +0 -0
  4. package/examples/Create Call and Send DTMF.json +1 -0
  5. package/examples/Get Log Data.json +1 -0
  6. package/examples/Leave Queue.json +1 -0
  7. package/examples/SIP Responses.json +1 -0
  8. package/{src/examples → examples}/SIP trunking outbound call.json +0 -0
  9. package/examples/Simple IVR.json +1 -0
  10. package/examples/Simple Queue.json +1 -0
  11. package/examples/Using Redirect.json +1 -0
  12. package/examples/Voicemail using Listen into S3 bucket.json +130 -0
  13. package/examples/config.json +1 -0
  14. package/examples/gather.json +1 -0
  15. package/examples/lex.json +1 -0
  16. package/examples/messages.json +1 -0
  17. package/examples/rasa.json +1 -0
  18. package/examples/tag a call.json +1 -0
  19. package/package.json +52 -14
  20. package/resources/editor.js +414 -0
  21. package/src/data/recognizer.json +685 -1
  22. package/src/data/tts.json +2970 -1
  23. package/src/nodes/auth.html +108 -0
  24. package/src/nodes/auth.js +43 -0
  25. package/src/nodes/conference.html +121 -0
  26. package/src/nodes/conference.js +31 -0
  27. package/src/nodes/config.html +484 -0
  28. package/src/nodes/config.js +74 -0
  29. package/src/nodes/create_call.html +287 -0
  30. package/src/nodes/create_call.js +104 -0
  31. package/src/nodes/create_sms.html +106 -0
  32. package/src/nodes/create_sms.js +65 -0
  33. package/src/nodes/dequeue.html +102 -0
  34. package/src/nodes/dequeue.js +25 -0
  35. package/src/nodes/dial.html +629 -0
  36. package/src/nodes/dial.js +141 -0
  37. package/src/nodes/dialogflow.html +260 -0
  38. package/src/nodes/dialogflow.js +53 -0
  39. package/src/nodes/dtmf.html +74 -0
  40. package/src/nodes/dtmf.js +22 -0
  41. package/src/nodes/enqueue.html +90 -0
  42. package/src/nodes/enqueue.js +25 -0
  43. package/src/nodes/gather.html +326 -0
  44. package/src/nodes/gather.js +83 -0
  45. package/src/nodes/get_alerts.html +94 -0
  46. package/src/nodes/get_alerts.js +47 -0
  47. package/src/nodes/get_calls.html +59 -0
  48. package/src/nodes/get_calls.js +38 -0
  49. package/src/nodes/get_recent_calls.html +95 -0
  50. package/src/nodes/get_recent_calls.js +47 -0
  51. package/src/nodes/hangup.html +46 -0
  52. package/src/nodes/hangup.js +20 -0
  53. package/src/nodes/jambonz.html +63 -38
  54. package/src/nodes/lcc.html +256 -0
  55. package/src/nodes/lcc.js +102 -0
  56. package/src/nodes/leave.html +40 -0
  57. package/src/nodes/leave.js +21 -0
  58. package/src/nodes/lex.html +264 -0
  59. package/src/nodes/lex.js +75 -0
  60. package/src/nodes/libs.js +100 -0
  61. package/src/nodes/listen.html +341 -0
  62. package/src/nodes/listen.js +82 -0
  63. package/src/nodes/message.html +95 -0
  64. package/src/nodes/message.js +32 -0
  65. package/src/nodes/pause.html +62 -0
  66. package/src/nodes/pause.js +25 -0
  67. package/src/nodes/play.html +76 -0
  68. package/src/nodes/play.js +23 -0
  69. package/src/nodes/rasa.html +106 -0
  70. package/src/nodes/rasa.js +22 -0
  71. package/src/nodes/redirect.html +64 -0
  72. package/src/nodes/redirect.js +24 -0
  73. package/src/nodes/s3-upload.html +29 -14
  74. package/src/nodes/s3-upload.js +24 -9
  75. package/src/nodes/say.html +119 -0
  76. package/src/nodes/say.js +38 -0
  77. package/src/nodes/sip-decline.html +76 -0
  78. package/src/nodes/sip-decline.js +25 -0
  79. package/src/nodes/sip-refer.html +116 -0
  80. package/src/nodes/sip-refer.js +33 -0
  81. package/src/nodes/sip-request.html +96 -0
  82. package/src/nodes/sip-request.js +36 -0
  83. package/src/nodes/tag.html +60 -0
  84. package/src/nodes/tag.js +22 -0
  85. package/src/nodes/template.html +63 -0
  86. package/src/nodes/template.js +9 -0
  87. package/src/nodes/userauth.html +85 -0
  88. package/src/nodes/userauth.js +70 -0
  89. package/src/nodes/webhooks.js +0 -16
  90. package/src/utils/http-helpers.js +68 -0
  91. package/src/examples/Authenticating sip devices.json +0 -10
  92. package/src/nodes/http-helpers.js +0 -26
  93. package/src/nodes/jambonz.js +0 -1044
@@ -0,0 +1,414 @@
1
+ let mapGoogle = {};
2
+ let mapAws = {};
3
+ let mapMicrosoft = {};
4
+ let mapIbm = {};
5
+ let mapNuance = {};
6
+ let googleLanguageOptions = '';
7
+ let awsLanguageOptions = '';
8
+ let microsoftLanguageOptions = '';
9
+ let ibmLanguageOptions = '';
10
+ let nuanceLanguageOptions = '';
11
+ let sttLanguagesGoogle = '';
12
+ let sttLanguagesAws = '';
13
+ let sttLanguagesDeepgram = '';
14
+ let sttLanguagesIbm = '';
15
+ let sttLanguagesMicrosoft = '';
16
+ let sttLanguagesNuance = '';
17
+ let mapDialogflow = {};
18
+ let dialogFlowOptions = '';
19
+
20
+ // Get TTS Providers
21
+ var googleUrl = '_jambonz/googleTts';
22
+ $.getJSON(googleUrl, function (data) {
23
+ data.forEach(function(l) {
24
+ mapGoogle[l.code] = {
25
+ name: l.name,
26
+ voices: l.voices
27
+ };
28
+ googleLanguageOptions += `<option value="${l.code}">${l.name}</option>`;
29
+ });
30
+ });
31
+ var awsUrl = '_jambonz/awsTts';
32
+ $.getJSON(awsUrl, function (data) {
33
+ data.forEach(function(l) {
34
+ mapAws[l.code] = {
35
+ name: l.name,
36
+ voices: l.voices
37
+ };
38
+ awsLanguageOptions += `<option value="${l.code}">${l.name}</option>`;
39
+ });
40
+ });
41
+ var microsoftUrl = '_jambonz/microsoftTts';
42
+ $.getJSON(microsoftUrl, function (data) {
43
+ data.forEach(function(l) {
44
+ mapMicrosoft[l.code] = {
45
+ name: l.name,
46
+ voices: l.voices
47
+ };
48
+ microsoftLanguageOptions += `<option value="${l.code}">${l.name}</option>`;
49
+ });
50
+ });
51
+ var ibmUrl = '_jambonz/ibmTts';
52
+ $.getJSON(ibmUrl, function (data) {
53
+ data.forEach(function(l) {
54
+ mapIbm[l.code] = {
55
+ name: l.name,
56
+ voices: l.voices
57
+ };
58
+ ibmLanguageOptions += `<option value="${l.code}">${l.name}</option>`;
59
+ });
60
+ });
61
+ var nuanceUrl = '_jambonz/nuanceTts';
62
+ $.getJSON(nuanceUrl, function (data) {
63
+ data.forEach(function(l) {
64
+ mapNuance[l.code] = {
65
+ name: l.name,
66
+ voices: l.voices
67
+ };
68
+ nuanceLanguageOptions += `<option value="${l.code}">${l.name}</option>`;
69
+ });
70
+ });
71
+
72
+ // GET STT Providers
73
+ var googleSttUrl = '_jambonz/googleSpeech';
74
+ $.getJSON(googleSttUrl, function (data) {
75
+ data.forEach(function(l) {
76
+ sttLanguagesGoogle += `<option value="${l.code}">${l.name}</option>`;
77
+ });
78
+ });
79
+ var awsSttUrl = '_jambonz/awsSpeech';
80
+ $.getJSON(awsSttUrl, function (data) {
81
+ data.forEach(function(l) {
82
+ sttLanguagesAws += `<option value="${l.code}">${l.name}</option>`;
83
+ });
84
+ });
85
+ var deepgramSttUrl = '_jambonz/deepgramSpeech';
86
+ $.getJSON(deepgramSttUrl, function (data) {
87
+ data.forEach(function(l) {
88
+ sttLanguagesDeepgram += `<option value="${l.code}">${l.name}</option>`;
89
+ });
90
+ });
91
+ var ibmSttUrl = '_jambonz/ibmSpeech';
92
+ $.getJSON(ibmSttUrl, function (data) {
93
+ data.forEach(function(l) {
94
+ sttLanguagesIbm += `<option value="${l.code}">${l.name}</option>`;
95
+ });
96
+ });
97
+ var microsoftSttUrl = '_jambonz/microsoftSpeech';
98
+ $.getJSON(microsoftSttUrl, function (data) {
99
+ data.forEach(function(l) {
100
+ sttLanguagesMicrosoft += `<option value="${l.code}">${l.name}</option>`;
101
+ });
102
+ });
103
+ var nuanceSttUrl = '_jambonz/nuanceSpeech';
104
+ $.getJSON(nuanceSttUrl, function (data) {
105
+ data.forEach(function(l) {
106
+ sttLanguagesNuance += `<option value="${l.code}">${l.name}</option>`;
107
+ });
108
+ });
109
+
110
+
111
+
112
+ // Get Bot providers
113
+
114
+ var dialogflowUrl = '_jambonz/dialogflow';
115
+ $.getJSON(dialogflowUrl, function (data) {
116
+ data.forEach(function(l) {
117
+ mapDialogflow[l.code] = l.name;
118
+ dialogFlowOptions += `<option value="${l.code}">${l.name}</option>`;
119
+ });
120
+ });
121
+
122
+
123
+
124
+ function testCredentials() {
125
+ let baseUrl
126
+ const accountSid = $("#node-config-input-accountSid").val();
127
+ const token = $("#node-config-input-apiToken").val();
128
+ const status = $("#node-config-test-status");
129
+ status.text('');
130
+ if ($("#node-config-input-urlType").val() == 'str'){
131
+ baseUrl = $("#node-config-input-url").val();
132
+ } else {
133
+ baseUrl = $("#node-config-input-urlType").val();
134
+ }
135
+ baseUrlProtocol = baseUrl.split(':')[0]
136
+ if (document.location.protocol == 'https:' && baseUrlProtocol == 'http'){
137
+ status.text('Cannot check https API from http editor');
138
+ } else{
139
+ $.ajax({
140
+ url: `${baseUrl}/v1/Accounts/${accountSid}/ApiKeys`,
141
+ headers: {
142
+ 'Authorization': `Bearer ${token}`
143
+ },
144
+ dataType: 'json',
145
+ timeout: 500,
146
+ error: (err) => {
147
+ status.text('Failed');
148
+ console.log(err);
149
+ },
150
+ success: (res) => {
151
+ if (Array.isArray(res)) status.text('Success!');
152
+ else status.text('Failed');
153
+ console.log(`response from fetch of api keys: ${JSON.stringify(res)}`);
154
+ }
155
+ });
156
+ }
157
+ }
158
+
159
+ function prepareSttControls(node) {
160
+ var vendorElem = $('#node-input-transcriptionvendor');
161
+ var languageElem = $('#node-input-recognizerlang');
162
+ var mixtypeElem = $('#node-input-mixtype');
163
+
164
+ console.log('entering prepareSttControls');
165
+
166
+ var setTranscriptionLanguage = function(vendor) {
167
+ console.log(`setting transcription vendor to ${vendor}`);
168
+ languageElem.find('option').remove();
169
+ switch (vendor) {
170
+ case 'google':
171
+ languageElem.append('<option value="default">--application default--</option>');
172
+ languageElem.append(sttLanguagesGoogle);
173
+ $('#google-stt-options').show();
174
+ $('#aws-stt-options').hide();
175
+ $('#interim').show();
176
+ if (node.mixtype === 'stereo') $('#stt-identify-channels').show();
177
+ else $('#stt-identify-channels').hide();
178
+ break;
179
+ case 'aws':
180
+ languageElem.append('<option value="default">--application default--</option>');
181
+ languageElem.append(sttLanguagesAws);
182
+ $('#google-stt-options').hide();
183
+ $('#aws-stt-options').show();
184
+ $('#interim').show();
185
+ if (node.mixtype === 'stereo') $('#stt-identify-channels').show();
186
+ else $('#stt-identify-channels').hide();
187
+ break
188
+ case 'deepgram':
189
+ languageElem.append('<option value="default">--application default--</option>');
190
+ languageElem.append(sttLanguagesDeepgram);
191
+ $('#google-stt-options').hide();
192
+ $('#aws-stt-options').show();
193
+ $('#interim').hide();
194
+ if (node.mixtype === 'stereo') $('#stt-identify-channels').show();
195
+ else $('#stt-identify-channels').hide();
196
+ break
197
+ case 'ibm':
198
+ languageElem.append('<option value="default">--application default--</option>');
199
+ languageElem.append(sttLanguagesIbm);
200
+ $('#google-stt-options').hide();
201
+ $('#aws-stt-options').hide();
202
+ $('#interim').show();
203
+ if (node.mixtype === 'stereo') $('#stt-identify-channels').show();
204
+ else $('#stt-identify-channels').hide();
205
+ break
206
+ case 'microsoft':
207
+ languageElem.append('<option value="default">--application default--</option>');
208
+ languageElem.append(sttLanguagesMicrosoft);
209
+ $('#google-stt-options').hide();
210
+ $('#aws-stt-options').hide();
211
+ $('#interim').show();
212
+ if (node.mixtype === 'stereo') $('#stt-identify-channels').show();
213
+ else $('#stt-identify-channels').hide();
214
+ break
215
+ case 'nuance':
216
+ languageElem.append('<option value="default">--application default--</option>');
217
+ languageElem.append(sttLanguagesNuance);
218
+ $('#google-stt-options').hide();
219
+ $('#aws-stt-options').hide();
220
+ $('#interim').show();
221
+ if (node.mixtype === 'stereo') $('#stt-identify-channels').show();
222
+ else $('#stt-identify-channels').hide();
223
+ break
224
+ default:
225
+ languageElem.append('<option value="default">--application default--</option>');
226
+ node.transcriptionvendor = 'default';
227
+ $('#google-stt-options').hide();
228
+ $('#aws-stt-options').hide();
229
+ $('#stt-identify-channels').hide();
230
+ $('#interim').hide();
231
+ break;
232
+ }
233
+ }
234
+
235
+ var onVendorChanged = function() {
236
+ var vendor = vendorElem.find(':selected').val();
237
+ console.log(`stt vendor changed to ${node.transcriptionvendor}`);
238
+ setTranscriptionLanguage(vendor);
239
+ if (vendor === 'default') node.recognizerlang = 'default';
240
+ console.log(`initializing transcription language to ${node.recognizerlang}`);
241
+ languageElem.val(node.recognizerlang);
242
+ }
243
+
244
+ var onLangChanged = function() {
245
+ var lang = languageElem.find(':selected').val();
246
+ console.log(`lang dropdown changed to ${lang}`);
247
+ node.recognizerlang = lang;
248
+ }
249
+
250
+ var onMixtypeChange = function() {
251
+ var mix = mixtypeElem.find(':selected').val();
252
+ console.log(`mixtype is now ${mix}`);
253
+ if (mix === 'stereo') $('#stt-identify-channels').show();
254
+ else $('#stt-identify-channels').hide();
255
+ }
256
+
257
+ vendorElem.change(onVendorChanged);
258
+ languageElem.change(onLangChanged);
259
+ mixtypeElem.change(onMixtypeChange);
260
+
261
+ console.log(`initializing transcription vendor to ${node.transcriptionvendor}`);
262
+ vendorElem.val(node.transcriptionvendor);
263
+
264
+ }
265
+
266
+ function prepareTtsControls(node) {
267
+ var vendorElem = $('#node-input-vendor');
268
+ var langElem = $('#node-input-lang');
269
+ var xlangElem = $('#node-input-xlang');
270
+ var voiceElem = $('#node-input-voice');
271
+ var xvoiceElem = $('#node-input-xvoice');
272
+
273
+ console.log(`oneditprepare tts vendor: ${node.vendor}, lang: ${node.lang}, voice: ${node.voice}`);
274
+
275
+ var onVendorChanged = function() {
276
+ node.vendor = vendorElem.val();
277
+ console.log(`tts vendor changed to ${node.vendor}`);
278
+ setLanguage(node.vendor);
279
+ }
280
+ var setLanguage = function(v) {
281
+ xlangElem.find('option').remove();
282
+ xvoiceElem.find('option').remove();
283
+
284
+ switch (v) {
285
+ case 'default':
286
+ xlangElem.append('<option value="default" selected>--application default--</option>');
287
+ xvoiceElem.append('<option value="default" selected>--application default--</option>');
288
+ langElem.val('default');
289
+ voiceElem.val('default');
290
+ break;
291
+
292
+ case 'google':
293
+ xlangElem.append(googleLanguageOptions);
294
+ break;
295
+
296
+ case 'aws':
297
+ xlangElem.append(awsLanguageOptions);
298
+ break;
299
+ case 'microsoft':
300
+ xlangElem.append(microsoftLanguageOptions);
301
+ break;
302
+ case 'ibm':
303
+ xlangElem.append(ibmLanguageOptions);
304
+ break;
305
+ case 'nuance':
306
+ xlangElem.append(nuanceLanguageOptions);
307
+ break;
308
+ }
309
+ console.log(`installed language choices for ${v}`);
310
+ xlangElem.val(langElem.val());
311
+ }
312
+ var onLangChanged = function() {
313
+ console.log(`lang edit changed to ${langElem.val()}`);
314
+ }
315
+ var onXLangChanged = function() {
316
+ var lang = xlangElem.find(':selected').val();
317
+ console.log(`lang dropdown changed to ${lang}`);
318
+ node.lang = lang;
319
+ langElem.val(node.lang);
320
+ setVoice(node.vendor, node.lang)
321
+ }
322
+ var setVoice = function(vendor, lang) {
323
+ xvoiceElem.find('option').remove();
324
+
325
+ console.log(`installing voices for ${vendor} ${lang}`);
326
+ switch (vendor) {
327
+ case 'default':
328
+ xvoiceElem.append('<option value="default" selected>--application default--</option>');
329
+ break;
330
+ case 'google':
331
+ var obj = mapGoogle[lang]
332
+ if (obj) {
333
+ var options = '';
334
+ for (var i = 0; i < obj.voices.length; i++) {
335
+ if (i) options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
336
+ else options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
337
+ }
338
+ xvoiceElem.append(options);
339
+ }
340
+ break;
341
+ case 'aws':
342
+ var obj = mapAws[lang]
343
+ if (obj) {
344
+ var options = '';
345
+ for (var i = 0; i < obj.voices.length; i++) {
346
+ if (i) options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
347
+ else options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
348
+ }
349
+ xvoiceElem.append(options);
350
+ }
351
+ break;
352
+ case 'microsoft':
353
+ var obj = mapMicrosoft[lang]
354
+ if (obj) {
355
+ var options = '';
356
+ for (var i = 0; i < obj.voices.length; i++) {
357
+ if (i) options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
358
+ else options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
359
+ }
360
+ xvoiceElem.append(options);
361
+ }
362
+ break;
363
+ case 'ibm':
364
+ var obj = mapIbm[lang]
365
+ if (obj) {
366
+ var options = '';
367
+ for (var i = 0; i < obj.voices.length; i++) {
368
+ if (i) options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
369
+ else options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
370
+ }
371
+ xvoiceElem.append(options);
372
+ }
373
+ break;
374
+ case 'nuance':
375
+ var obj = mapNuance[lang]
376
+ if (obj) {
377
+ var options = '';
378
+ for (var i = 0; i < obj.voices.length; i++) {
379
+ if (i) options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
380
+ else options += `<option value="${obj.voices[i].value}">${obj.voices[i].name}</option>`;
381
+ }
382
+ xvoiceElem.append(options);
383
+ }
384
+ break;
385
+ }
386
+ console.log(`installed voice choices for ${vendor} ${lang}`);
387
+ if (voiceElem.val()) xvoiceElem.val(voiceElem.val());
388
+ }
389
+ var onVoiceChanged = function() {
390
+ console.log(`voice edit changed to ${voiceElem.val()}`);
391
+ xvoiceElem.val(voiceElem.val());
392
+ }
393
+ var onXVoiceChanged = function() {
394
+ var voice = xvoiceElem.find(':selected').val();
395
+ node.voice = voice;
396
+ console.log(`voice dropdown changed to ${voice}`);
397
+ voiceElem.val(voice);
398
+ }
399
+
400
+ vendorElem.change(onVendorChanged);
401
+ langElem.change(onLangChanged);
402
+ xlangElem.change(onXLangChanged);
403
+ voiceElem.change(onVoiceChanged);
404
+ xvoiceElem.change(onXVoiceChanged);
405
+ }
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+