@onereach/step-voice 1.2202.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.
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const voice_1 = (0, tslib_1.__importDefault)(require("./voice"));
5
+ const _ = require('lodash');
6
+ const timestring = require('timestring');
7
+ const uuid = require('uuid');
8
+ const defaultSessionTimeout = 5 * 60 * 1000;
9
+ class InitiateCall extends voice_1.default {
10
+ get conversation() {
11
+ return this.step.dataOut.name;
12
+ }
13
+ async runStep() {
14
+ const { from: botNumber, endUserNumber, sipHost, sipUser, sipPassword, timeout, headers } = this.data;
15
+ const originateTimeout = timestring(`${timeout || 30} sec`, 'ms'); // timeout or 30 seconds
16
+ const originationId = uuid.v4();
17
+ const customHeaders = _.reduce(headers, (memo, header) => {
18
+ memo[header.name] = `${header.value}`;
19
+ return memo;
20
+ }, {});
21
+ if (endUserNumber.startsWith('user:')) {
22
+ await this.thread.emitAsync({
23
+ target: 'provider',
24
+ name: 'out/voice/originate',
25
+ params: {
26
+ id: originationId,
27
+ from: botNumber,
28
+ to: endUserNumber,
29
+ headers: customHeaders,
30
+ gateway: sipHost
31
+ ? {
32
+ host: sipHost,
33
+ user: sipUser,
34
+ password: sipPassword
35
+ }
36
+ : undefined,
37
+ timeout: originateTimeout,
38
+ version: 2
39
+ }
40
+ });
41
+ }
42
+ else {
43
+ await this.thread.emitAsync({
44
+ target: 'provider',
45
+ name: 'out/voice/originate',
46
+ params: {
47
+ id: originationId,
48
+ from: botNumber,
49
+ to: endUserNumber,
50
+ headers: customHeaders,
51
+ gateway: sipHost
52
+ ? {
53
+ host: sipHost,
54
+ user: sipUser,
55
+ password: sipPassword
56
+ }
57
+ : undefined,
58
+ timeout: originateTimeout,
59
+ version: 2,
60
+ sessionExpireTime: this.session.expireTime
61
+ }
62
+ });
63
+ }
64
+ this.gotoState({
65
+ name: 'waitForCall',
66
+ originationId
67
+ });
68
+ }
69
+ async waitForCall() {
70
+ const { from: botNumber, endUserNumber, isAMD, asr, tts, sessionTimeout } = this.data;
71
+ const originationId = this.state.originationId;
72
+ const sessionTimeoutMs = timestring(`${sessionTimeout} min`, 'ms') || defaultSessionTimeout;
73
+ // let channel = await this.getDataOut();
74
+ // if (!_.get(channel, ['originationId'])) {
75
+ // channel = {
76
+ // originationId: require('uuid').v4(),
77
+ // callback: {}
78
+ // };
79
+ // await this.setDataOut(channel);
80
+ // }
81
+ this.triggers.once(`in/voice/${originationId}/event`, async (event) => {
82
+ switch (event.params.type) {
83
+ case 'is_flow_ready': {
84
+ await this.thread.eventManager.callbackAction(this.thread.takeCallback(), async () => {
85
+ return {
86
+ result: {
87
+ is_ready: true
88
+ }
89
+ };
90
+ });
91
+ this.log.warn('Confirming that the OB call can be started');
92
+ return this.exitFlow();
93
+ }
94
+ case 'call': {
95
+ let channel = event.params.channel;
96
+ channel.asr = asr.getSettings(channel);
97
+ channel.tts = tts.getVoice(channel);
98
+ if (!this.session.key) {
99
+ await this.session.start({
100
+ key: channel.id,
101
+ timeout: sessionTimeoutMs,
102
+ reporting: {
103
+ settingsKey: 'session',
104
+ startedBy: 'Bot',
105
+ sessionType: 'Phone'
106
+ }
107
+ });
108
+ }
109
+ channel = {
110
+ callback: channel.callback,
111
+ id: channel.id,
112
+ type: channel.type,
113
+ botNumber: channel.to,
114
+ endUserNumber,
115
+ ...channel
116
+ };
117
+ await this.transcript(channel, {
118
+ action: 'Call Start',
119
+ reportingSettingsKey: 'transcript',
120
+ actionFromBot: true
121
+ });
122
+ await this.startConversation(channel, {
123
+ events: [`in/voice/${channel.id}/event`]
124
+ });
125
+ await this.sendCommands(channel, [
126
+ // {
127
+ // name: 'pickup'
128
+ // },
129
+ // {
130
+ // name: 'start-dtmf'
131
+ // },
132
+ ...isAMD
133
+ ? [{
134
+ name: 'start-avmd',
135
+ params: {
136
+ type: 'avmd_detect'
137
+ }
138
+ }]
139
+ : [],
140
+ ...asr.serverSettings.enabled
141
+ ? [{
142
+ name: 'start-recognition',
143
+ params: {
144
+ type: asr.serverSettings.engine
145
+ }
146
+ }]
147
+ : []
148
+ ]);
149
+ return this.exitStep('success');
150
+ }
151
+ case 'error': {
152
+ if (!this.session.key) {
153
+ await this.session.start({
154
+ key: this.thread.request.requestId,
155
+ timeout: sessionTimeoutMs,
156
+ reporting: {
157
+ settingsKey: 'session',
158
+ startedBy: 'Bot',
159
+ sessionType: 'Phone'
160
+ }
161
+ });
162
+ }
163
+ const error = _.get(event, 'params.error.originateStatus');
164
+ const errorChannel = {
165
+ botNumber,
166
+ endUserNumber
167
+ };
168
+ switch (error) {
169
+ case 'USER_BUSY':
170
+ await this.transcript(errorChannel, { action: 'Call Busy' });
171
+ await this.updateData();
172
+ return this.exitStep('busy', errorChannel);
173
+ case 'NO_ANSWER':
174
+ await this.transcript(errorChannel, { action: 'Call No Answer' });
175
+ await this.updateData();
176
+ return this.exitStep('no answer', errorChannel);
177
+ case 'NO_USER_RESPONSE':
178
+ await this.transcript(errorChannel, { action: 'Call No Answer' });
179
+ await this.updateData();
180
+ return this.exitStep('no answer', errorChannel);
181
+ }
182
+ this.error = {
183
+ name: event.params.error.name,
184
+ message: `${event.params.error.date}: ${event.params.error.originateStatus}`,
185
+ stack: {}
186
+ };
187
+ await this.transcript(errorChannel, { action: 'Call Error' });
188
+ return this.exitStep('error', {
189
+ ...errorChannel,
190
+ ...this.error
191
+ });
192
+ }
193
+ default:
194
+ return this.exitFlow();
195
+ }
196
+ });
197
+ }
198
+ }
199
+ exports.default = InitiateCall;
200
+ //# sourceMappingURL=Initiate%20Call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Initiate Call.js","sourceRoot":"","sources":["../src/Initiate Call.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export default class JoinConference extends VoiceStep {
2
+ }
3
+ import VoiceStep from "./voice";
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const voice_1 = (0, tslib_1.__importDefault)(require("./voice"));
5
+ const _ = require('lodash');
6
+ class JoinConference extends voice_1.default {
7
+ async runStep() {
8
+ /** @type {import('./voice').IVoiceChannel} */
9
+ const channel = await this.fetchData();
10
+ const { conferenceName, stayInConference } = this.data;
11
+ return this.triggers
12
+ .once(`in/voice/${channel.id}/event`, async (event) => {
13
+ switch (event.params.type) {
14
+ case 'hangup':
15
+ await this.handleHangup(channel);
16
+ return this.end();
17
+ case 'conference-start':
18
+ await this.transcript(channel, {
19
+ conferenceId: conferenceName,
20
+ reportingSettingsKey: 'transcript',
21
+ action: 'Conference Join',
22
+ actionFromBot: true
23
+ });
24
+ if (stayInConference) {
25
+ return this.exitFlow();
26
+ }
27
+ else {
28
+ return this.exitStep('next', _.omit(event.params, ['type']));
29
+ }
30
+ case 'conference-end':
31
+ await this.transcript(channel, {
32
+ conferenceId: conferenceName,
33
+ reportingSettingsKey: 'transcript',
34
+ action: 'Conference End',
35
+ actionFromBot: true
36
+ });
37
+ return stayInConference ? this.exitStep('next') : this.exitFlow();
38
+ case 'error':
39
+ return this.exitStep('error', {
40
+ name: event.params.error.name,
41
+ message: event.params.error.message
42
+ });
43
+ default:
44
+ return this.exitFlow();
45
+ }
46
+ })
47
+ .otherwise(async () => {
48
+ const command = {
49
+ name: 'conference.start',
50
+ params: {
51
+ room: conferenceName,
52
+ flags: ['endconf'],
53
+ stayInConference
54
+ }
55
+ };
56
+ await this.sendCommands(channel, [command]);
57
+ return this.exitFlow();
58
+ });
59
+ }
60
+ }
61
+ exports.default = JoinConference;
62
+ //# sourceMappingURL=Join%20Conference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Join Conference.js","sourceRoot":"","sources":["../src/Join Conference.js"],"names":[],"mappings":";;;AAAA,iEAA+B;AAE/B,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE3B,MAAqB,cAAe,SAAQ,eAAS;IACnD,KAAK,CAAC,OAAO;QACX,8CAA8C;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QAEtC,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QAEtD,OAAO,IAAI,CAAC,QAAQ;aACjB,IAAI,CAAC,YAAY,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;YAClD,QAAQ,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;gBACzB,KAAK,QAAQ;oBACX,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;oBAChC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;gBAEnB,KAAK,kBAAkB;oBACrB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;wBAC7B,YAAY,EAAE,cAAc;wBAC5B,oBAAoB,EAAE,YAAY;wBAClC,MAAM,EAAE,iBAAiB;wBACzB,aAAa,EAAE,IAAI;qBACpB,CAAC,CAAA;oBAEF,IAAI,gBAAgB,EAAE;wBACpB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;qBACvB;yBAAM;wBACL,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;qBAC7D;gBACH,KAAK,gBAAgB;oBACnB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;wBAC7B,YAAY,EAAE,cAAc;wBAC5B,oBAAoB,EAAE,YAAY;wBAClC,MAAM,EAAE,gBAAgB;wBACxB,aAAa,EAAE,IAAI;qBACpB,CAAC,CAAA;oBACF,OAAO,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACnE,KAAK,OAAO;oBACV,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;wBAC5B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;wBAC7B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;qBACpC,CAAC,CAAA;gBAEJ;oBACE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;aACzB;QACH,CAAC,CAAC;aACD,SAAS,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,OAAO,GAAG;gBACd,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE;oBACN,IAAI,EAAE,cAAc;oBACpB,KAAK,EAAE,CAAC,SAAS,CAAC;oBAClB,gBAAgB;iBACjB;aACF,CAAA;YACD,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;YAE3C,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;QACxB,CAAC,CAAC,CAAA;IACN,CAAC;CACF;AA3DD,iCA2DC"}
@@ -0,0 +1,3 @@
1
+ export default class VoiceKeypadInput extends VoiceStep {
2
+ }
3
+ import VoiceStep from "./voice";
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const voice_1 = (0, tslib_1.__importDefault)(require("./voice"));
5
+ const exitKeypadData = ({ mfVersion, digits, event }) => mfVersion === '1'
6
+ ? digits
7
+ : {
8
+ digits,
9
+ digitsSplit: event.params.digitsSplit
10
+ };
11
+ const validateInput = ({ input = '', type, regex, expectedLength }) => {
12
+ switch (type) {
13
+ case 'regEx': {
14
+ const regExInput = /^\/(.+)\/(\w*)$/.exec(regex);
15
+ if (!regExInput)
16
+ throw new Error('invalid regular expression: ' + regex);
17
+ const regexp = new RegExp(regExInput[1], regExInput[2]);
18
+ return regexp.test(input);
19
+ }
20
+ case 'expectedNumber':
21
+ return input.length === expectedLength;
22
+ default:
23
+ return true;
24
+ }
25
+ };
26
+ class VoiceKeypadInput extends voice_1.default {
27
+ async runStep() {
28
+ /** @type {import('./voice').IVoiceChannel} */
29
+ const channel = await this.fetchData();
30
+ const { interTimeout, asr, tts, noReplyDelay, textType, keypadBargeIn, endInput, terminationKey, endUserInputValidationOther, expectedNumberOfDigits, regExToValidate, mfVersion } = this.data;
31
+ const interDigitTimeout = Number(interTimeout) * 1000;
32
+ const ttsSettings = tts.getSettings(channel.tts);
33
+ const asrSettings = asr.getSettings(channel.asr);
34
+ const grammar = {
35
+ id: this.currentStepId,
36
+ asr: {
37
+ ...asrSettings,
38
+ config: {
39
+ version: 'v1beta'
40
+ }
41
+ }
42
+ };
43
+ const command = {
44
+ name: 'request-digits',
45
+ params: {
46
+ sections: [],
47
+ interDigitTimeout,
48
+ grammar
49
+ }
50
+ };
51
+ switch (endUserInputValidationOther) {
52
+ case 'expectedNumber':
53
+ command.params.expectedNumberOfDigits = Number(expectedNumberOfDigits);
54
+ break;
55
+ case 'regEx':
56
+ break;
57
+ case 'notValidate':
58
+ break;
59
+ }
60
+ switch (endInput) {
61
+ case 'terminatingKey':
62
+ command.params.terminator = terminationKey;
63
+ break;
64
+ case 'waitTimeout':
65
+ break;
66
+ }
67
+ const repromptsList = this.buildReprompts({ prompts: this.data.prompts, allowKeypadBargeIn: keypadBargeIn });
68
+ const speechSections = this.buildSections({ sections: this.data.audio, textType, ttsSettings, allowKeypadBargeIn: keypadBargeIn });
69
+ return this.triggers
70
+ .once(`in/voice/${channel.id}/event`, async (event) => {
71
+ const reportingSettingsKey = this.rptsStarted ? 'transcriptRepromptResponse' : 'transcriptResponse';
72
+ switch (event.params.type) {
73
+ case 'digits': {
74
+ const digits = event.params.digits;
75
+ if (validateInput({
76
+ input: digits,
77
+ type: endUserInputValidationOther,
78
+ regex: regExToValidate,
79
+ expectedLength: command.params.expectedNumberOfDigits
80
+ })) {
81
+ await this.transcript(channel, {
82
+ keyPress: digits,
83
+ message: digits,
84
+ action: 'Call DTMF',
85
+ reportingSettingsKey,
86
+ actionFromBot: false
87
+ });
88
+ return this.exitStep('reply', exitKeypadData({ mfVersion, digits, event }));
89
+ }
90
+ else {
91
+ if (this.rptsHasMore({ repromptsList })) {
92
+ await this.transcript(channel, {
93
+ message: 'Unrecognized',
94
+ keyPress: digits,
95
+ action: 'Call DTMF',
96
+ reportingSettingsKey,
97
+ actionFromBot: false
98
+ });
99
+ await this.rptsSend(channel, {
100
+ command,
101
+ repromptsList,
102
+ noReplyDelay,
103
+ speechSections,
104
+ textType,
105
+ ttsSettings
106
+ });
107
+ return this.exitFlow();
108
+ }
109
+ await this.transcript(channel, {
110
+ message: 'Not Recognized',
111
+ keyPress: digits,
112
+ action: 'Call DTMF',
113
+ reportingSettingsKey,
114
+ actionFromBot: false
115
+ });
116
+ return this.exitStep('unrecognized', exitKeypadData({ mfVersion, digits, event }));
117
+ }
118
+ }
119
+ case 'timeout': {
120
+ if (this.rptsHasMore({ repromptsList })) {
121
+ await this.transcript(channel, {
122
+ message: 'No Reply',
123
+ action: 'Call DTMF',
124
+ reportingSettingsKey,
125
+ actionFromBot: false
126
+ });
127
+ await this.rptsSend(channel, {
128
+ command,
129
+ repromptsList,
130
+ noReplyDelay,
131
+ speechSections,
132
+ textType,
133
+ ttsSettings
134
+ });
135
+ return this.exitFlow();
136
+ }
137
+ await this.transcript(channel, {
138
+ message: 'Not Replied',
139
+ action: 'Call DTMF',
140
+ reportingSettingsKey,
141
+ actionFromBot: false
142
+ });
143
+ return this.exitStep('no reply', {});
144
+ }
145
+ case 'hangup': {
146
+ await this.handleHangup(channel);
147
+ return this.end();
148
+ }
149
+ case 'cancel': {
150
+ return this.exitStep('cancel');
151
+ }
152
+ case 'error': {
153
+ return this.exitStep('error', {
154
+ name: event.params.error.name,
155
+ message: event.params.error.message
156
+ });
157
+ }
158
+ default:
159
+ return this.exitFlow();
160
+ }
161
+ })
162
+ .otherwise(async () => {
163
+ await this.transcript(channel, {
164
+ sections: speechSections,
165
+ reprompt: {
166
+ maxAttempts: repromptsList.length,
167
+ attempt: 0
168
+ },
169
+ reportingSettingsKey: 'transcriptPrompt',
170
+ action: 'Call Prompt',
171
+ actionFromBot: true
172
+ });
173
+ command.params.firstDigitTimeout = this.rptsTimeout({ noReplyDelay, repromptsList });
174
+ command.params.sections = speechSections;
175
+ await this.sendCommands(channel, [command]);
176
+ return this.exitFlow();
177
+ });
178
+ }
179
+ }
180
+ exports.default = VoiceKeypadInput;
181
+ //# sourceMappingURL=Keypad%20Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Keypad Input.js","sourceRoot":"","sources":["../src/Keypad Input.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export default class KickFromConference extends VoiceStep {
2
+ }
3
+ import VoiceStep from "./voice";
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const voice_1 = (0, tslib_1.__importDefault)(require("./voice"));
5
+ const _ = require('lodash');
6
+ class KickFromConference extends voice_1.default {
7
+ async runStep() {
8
+ /** @type {import('./voice').IVoiceChannel} */
9
+ const channel = await this.fetchData();
10
+ const { room, user } = this.data;
11
+ return this.triggers
12
+ .once(`in/voice/${channel.id}/event`, async (event) => {
13
+ switch (event.params.type) {
14
+ case 'hangup':
15
+ await this.handleHangup(channel);
16
+ return this.end();
17
+ case 'conference-end':
18
+ await this.transcript(channel, {
19
+ conferenceId: room,
20
+ reportingSettingsKey: 'transcript',
21
+ action: 'Conference Leave',
22
+ actionFromBot: true
23
+ });
24
+ return this.exitStep('next', _.omit(event.params, ['type']));
25
+ case 'error':
26
+ return this.exitStep('error', {
27
+ name: event.params.error.name,
28
+ message: event.params.error.message
29
+ });
30
+ default:
31
+ return this.exitFlow();
32
+ }
33
+ })
34
+ .otherwise(async () => {
35
+ const command = {
36
+ name: 'conference.kick',
37
+ params: {
38
+ room,
39
+ user
40
+ }
41
+ };
42
+ await this.sendCommands(channel, [command]);
43
+ return this.exitFlow();
44
+ // Temporary fix till Kostya fixes voicer to return kick callback
45
+ // await Promise.delay(1000)
46
+ // return this.exitStep('next')
47
+ });
48
+ }
49
+ }
50
+ exports.default = KickFromConference;
51
+ //# sourceMappingURL=Kick%20From%20Conference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Kick From Conference.js","sourceRoot":"","sources":["../src/Kick From Conference.js"],"names":[],"mappings":";;;AAAA,iEAA+B;AAE/B,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE3B,MAAqB,kBAAmB,SAAQ,eAAS;IACvD,KAAK,CAAC,OAAO;QACX,8CAA8C;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QAEtC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QAEhC,OAAO,IAAI,CAAC,QAAQ;aACjB,IAAI,CAAC,YAAY,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;YAClD,QAAQ,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;gBACzB,KAAK,QAAQ;oBACX,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;oBAChC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;gBAEnB,KAAK,gBAAgB;oBACnB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;wBAC7B,YAAY,EAAE,IAAI;wBAClB,oBAAoB,EAAE,YAAY;wBAClC,MAAM,EAAE,kBAAkB;wBAC1B,aAAa,EAAE,IAAI;qBACpB,CAAC,CAAA;oBAEF,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;gBAC9D,KAAK,OAAO;oBACV,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;wBAC5B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;wBAC7B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;qBACpC,CAAC,CAAA;gBAEJ;oBACE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;aACzB;QACH,CAAC,CAAC;aACD,SAAS,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,OAAO,GAAG;gBACd,IAAI,EAAE,iBAAiB;gBACvB,MAAM,EAAE;oBACN,IAAI;oBACJ,IAAI;iBACL;aACF,CAAA;YAED,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;YAE3C,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;YACtB,iEAAiE;YACjE,4BAA4B;YAC5B,+BAA+B;QACjC,CAAC,CAAC,CAAA;IACN,CAAC;CACF;AAlDD,qCAkDC"}
@@ -0,0 +1,3 @@
1
+ export default class SayMessage extends VoiceStep {
2
+ }
3
+ import VoiceStep from "./voice";
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const voice_1 = (0, tslib_1.__importDefault)(require("./voice"));
5
+ const _ = require('lodash');
6
+ class SayMessage extends voice_1.default {
7
+ async runStep() {
8
+ const { audio, textType, tts } = this.data;
9
+ /** @type {import('./voice').IVoiceChannel} */
10
+ const channel = await this.fetchData();
11
+ this.triggers.once(`in/voice/${channel.id}/event`, async (event) => {
12
+ switch (event.params.type) {
13
+ case 'hangup':
14
+ await this.handleHangup(channel);
15
+ return this.end();
16
+ case 'playback':
17
+ return this.exitStep('next');
18
+ case 'error':
19
+ return this.exitStep('error', {
20
+ name: event.params.error.name,
21
+ message: event.params.error.message
22
+ });
23
+ case 'cancel': {
24
+ return this.exitStep('cancel');
25
+ }
26
+ default:
27
+ return this.exitFlow();
28
+ }
29
+ });
30
+ this.triggers.otherwise(async () => {
31
+ const ttsSettings = tts.getSettings(channel.tts);
32
+ const command = {
33
+ name: 'speak',
34
+ params: {
35
+ global: channel.global,
36
+ sections: _.map(audio, (section) => ({
37
+ text: section.voiceTextMsg,
38
+ url: section.audioUrl,
39
+ bargeInVoice: false,
40
+ bargeInKeypad: false,
41
+ textType,
42
+ provider: ttsSettings.provider,
43
+ ...ttsSettings
44
+ }))
45
+ }
46
+ };
47
+ await this.transcript(channel, {
48
+ action: 'Call Prompt',
49
+ sections: command.params.sections,
50
+ reportingSettingsKey: 'transcript',
51
+ actionFromBot: true
52
+ });
53
+ await this.updateData();
54
+ await this.sendCommands(channel, [command]);
55
+ return this.exitFlow();
56
+ });
57
+ }
58
+ }
59
+ exports.default = SayMessage;
60
+ //# sourceMappingURL=Say%20Message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Say Message.js","sourceRoot":"","sources":["../src/Say Message.js"],"names":[],"mappings":";;;AAAA,iEAA+B;AAE/B,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE3B,MAAqB,UAAW,SAAQ,eAAS;IAC/C,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QAE1C,8CAA8C;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACjE,QAAQ,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;gBACzB,KAAK,QAAQ;oBACX,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;oBAChC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;gBACnB,KAAK,UAAU;oBACb,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;gBAC9B,KAAK,OAAO;oBACV,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;wBAC5B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;wBAC7B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;qBACpC,CAAC,CAAA;gBACJ,KAAK,QAAQ,CAAC,CAAC;oBACb,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;iBAC/B;gBACD;oBACE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;aACzB;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAEhD,MAAM,OAAO,GAAG;gBACd,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE;oBACN,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wBACnC,IAAI,EAAE,OAAO,CAAC,YAAY;wBAC1B,GAAG,EAAE,OAAO,CAAC,QAAQ;wBACrB,YAAY,EAAE,KAAK;wBACnB,aAAa,EAAE,KAAK;wBACpB,QAAQ;wBACR,QAAQ,EAAE,WAAW,CAAC,QAAQ;wBAC9B,GAAG,WAAW;qBACf,CAAC,CAAC;iBACJ;aACF,CAAA;YAED,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;gBAC7B,MAAM,EAAE,aAAa;gBACrB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;gBACjC,oBAAoB,EAAE,YAAY;gBAClC,aAAa,EAAE,IAAI;aACpB,CAAC,CAAA;YACF,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;YACvB,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;YAE3C,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAzDD,6BAyDC"}
@@ -0,0 +1,3 @@
1
+ export default class RequestVoiceRecordingInput extends VoiceStep {
2
+ }
3
+ import VoiceStep from "./voice";