botium-connector-voip 0.0.17 → 0.0.19

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.
@@ -287,12 +287,16 @@ class BotiumConnectorVoip {
287
287
  const parsedData = JSON.parse(data);
288
288
  const parsedDataLog = lodash__default["default"].cloneDeep(parsedData);
289
289
  parsedDataLog.fullRecord = '<full_record_buffer>';
290
-
291
- // debug(JSON.stringify(parsedDataLog, null, 2))
292
-
290
+ debug$3(JSON.stringify(parsedDataLog, null, 2));
293
291
  if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'initialized') {
294
292
  this.sessionId = parsedData.voipConfig.sessionId;
295
293
  }
294
+
295
+ // if sessionId is not the same as the one in the callinfo, return
296
+ if (parsedData && parsedData.voipConfig && parsedData.voipConfig.sessionId && parsedData.voipConfig.sessionId !== this.sessionId) {
297
+ debug$3('sessionId mismatch, returning');
298
+ return;
299
+ }
296
300
  if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'unauthorized') {
297
301
  reject(new Error('Error: Cannot open a call: SIP Authorization failed'));
298
302
  }
@@ -309,7 +313,7 @@ class BotiumConnectorVoip {
309
313
  type: lodash__default["default"].isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',
310
314
  category: 'e2eVoiceIvr',
311
315
  metricName: 'consumption.e2e.voip.stt.seconds',
312
- credits: parsedData.connectDuration,
316
+ transactions: parsedData.connectDuration,
313
317
  apiKey
314
318
  });
315
319
  }
@@ -491,7 +495,7 @@ class BotiumConnectorVoip {
491
495
  this.eventEmitter.emit('CONSUMPTION_METADATA', this.container, {
492
496
  type: lodash__default["default"].isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',
493
497
  metricName: 'consumption.e2e.voip.tts.characters',
494
- credits: msg.messageText.length,
498
+ transactions: msg.messageText.length,
495
499
  apiKey
496
500
  });
497
501
  }
@@ -1 +1 @@
1
- {"version":3,"file":"botium-connector-voip-cjs.js","sources":["../src/connector.js","../src/ignore-sd-logichook.js","../src/join-logichook.js","../src/confidence-threshold-logichook.js","../index.js"],"sourcesContent":["const WebSocket = require('ws')\nconst _ = require('lodash')\nconst axios = require('axios')\nconst debug = require('debug')('botium-connector-voip')\nconst path = require('path')\nconst mm = require('music-metadata')\n\nconst Capabilities = {\n VOIP_STT_URL_STREAM: 'VOIP_STT_URL_STREAM',\n VOIP_STT_PARAMS_STREAM: 'VOIP_STT_PARAMS_STREAM',\n VOIP_STT_METHOD_STREAM: 'VOIP_STT_METHOD_STREAM',\n VOIP_STT_BODY_STREAM: 'VOIP_STT_BODY_STREAM',\n VOIP_STT_BODY: 'VOIP_STT_BODY',\n VOIP_STT_HEADERS: 'VOIP_STT_HEADERS',\n VOIP_STT_TIMEOUT: 'VOIP_STT_TIMEOUT',\n VOIP_STT_MESSAGE_HANDLING: 'VOIP_STT_MESSAGE_HANDLING',\n VOIP_STT_MESSAGE_HANDLING_TIMEOUT: 'VOIP_STT_MESSAGE_HANDLING_TIMEOUT',\n VOIP_STT_MESSAGE_HANDLING_DELIMITER: 'VOIP_STT_MESSAGE_HANDLING_DELIMITER',\n VOIP_STT_MESSAGE_HANDLING_PUNCTUATION: 'VOIP_STT_MESSAGE_HANDLING_PUNCTUATION',\n VOIP_TTS_URL: 'VOIP_TTS_URL',\n VOIP_TTS_PARAMS: 'VOIP_TTS_PARAMS',\n VOIP_TTS_METHOD: 'VOIP_TTS_METHOD',\n VOIP_TTS_BODY: 'VOIP_TTS_BODY',\n VOIP_TTS_HEADERS: 'VOIP_TTS_HEADERS',\n VOIP_TTS_TIMEOUT: 'VOIP_TTS_TIMEOUT',\n VOIP_WORKER_URL: 'VOIP_WORKER_URL',\n VOIP_WORKER_APIKEY: 'VOIP_WORKER_APIKEY',\n VOIP_SIP_POOL_CALLER_ENABLE: 'VOIP_SIP_POOL_CALLER_ENABLE',\n VOIP_SIP_CALLER_REGISTRAR_URI: 'VOIP_SIP_CALLER_REGISTRAR_URI',\n VOIP_SIP_CALLER_ADDRESS: 'VOIP_SIP_CALLER_ADDRESS',\n VOIP_SIP_CALLER_USERNAME: 'VOIP_SIP_CALLER_USERNAME',\n VOIP_SIP_CALLER_PASSWORD: 'VOIP_SIP_CALLER_PASSWORD',\n VOIP_SIP_PROXY: 'VOIP_SIP_PROXY',\n VOIP_SIP_PROTOCOL: 'VOIP_SIP_PROTOCOL',\n VOIP_SIP_REG_HEADERS: 'VOIP_SIP_REG_HEADERS',\n VOIP_SIP_INVITE_HEADERS: 'VOIP_SIP_INVITE_HEADERS',\n VOIP_SIP_CALLEE_URI: 'VOIP_SIP_CALLEE_URI',\n VOIP_ICE_ENABLE: 'VOIP_ICE_ENABLE',\n VOIP_ICE_STUN_SERVERS: 'VOIP_ICE_STUN_SERVERS',\n VOIP_ICE_TURN_ENABLE: 'VOIP_ICE_TURN_ENABLE',\n VOIP_ICE_TURN_SERVER: 'VOIP_ICE_TURN_SERVER',\n VOIP_ICE_TURN_USER: 'VOIP_ICE_TURN_USER',\n VOIP_ICE_TURN_PASSWORD: 'VOIP_ICE_TURN_PASSWORD',\n VOIP_ICE_TURN_PROTOCOL: 'VOIP_ICE_TURN_PROTOCOL',\n VOIP_WEBSOCKET_CONNECT_MAXRETRIES: 'VOIP_WEBSOCKET_CONNECT_MAXRETRIES',\n VOIP_WEBSOCKET_CONNECT_TIMEOUT: 'VOIP_WEBSOCKET_CONNECT_TIMEOUT',\n VOIP_SILENCE_DURATION_TIMEOUT_ENABLE: 'VOIP_SILENCE_DURATION_TIMEOUT_ENABLE',\n VOIP_SILENCE_DURATION_TIMEOUT: 'VOIP_SILENCE_DURATION_TIMEOUT',\n VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE: 'VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE',\n VOIP_SILENCE_DURATION_TIMEOUT_START: 'VOIP_SILENCE_DURATION_TIMEOUT_START',\n VOIP_STT_CONFIDENCE_THRESHOLD: 'VOIP_STT_CONFIDENCE_THRESHOLD',\n VOIP_USE_GLOBAL_VOIP_WORKER: 'VOIP_USE_GLOBAL_VOIP_WORKER'\n}\n\nconst Defaults = {\n VOIP_STT_METHOD: 'POST',\n VOIP_STT_TIMEOUT: 10000,\n VOIP_TTS_METHOD: 'GET',\n VOIP_TTS_TIMEOUT: 10000,\n VOIP_STT_MESSAGE_HANDLING: 'ORIGINAL',\n VOIP_STT_MESSAGE_HANDLING_TIMEOUT: 2500,\n VOIP_STT_MESSAGE_HANDLING_DELIMITER: '. ',\n VOIP_STT_MESSAGE_HANDLING_PUNCTUATION: '.!?',\n VOIP_WEBSOCKET_CONNECT_TIMEOUT: 4000,\n VOIP_WEBSOCKET_CONNECT_MAXRETRIES: 5,\n VOIP_SILENCE_DURATION_TIMEOUT: 2500,\n VOIP_SILENCE_DURATION_TIMEOUT_ENABLE: false,\n VOIP_SILENCE_DURATION_TIMEOUT_START: 1000,\n VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE: false,\n VOIP_STT_CONFIDENCE_THRESHOLD: 0.5,\n VOIP_USE_GLOBAL_VOIP_WORKER: false,\n VOIP_SIP_PROTOCOL: 'TCP'\n}\n\nclass BotiumConnectorVoip {\n constructor ({ queueBotSays, eventEmitter, caps }) {\n this.queueBotSays = queueBotSays\n this.caps = caps\n this.eventEmitter = eventEmitter\n this.botMsgs = []\n this.sentencesBuilding = 0\n this.sentencesFinal = 0\n this.sentenceBuilding = false\n }\n\n async Validate () {\n debug('Validate called')\n debug(this.caps.VOIP_STT_MESSAGE_HANDLING)\n\n if (this.caps.VOIP_TTS_URL) {\n this.axiosTtsParams = {\n url: this.caps.VOIP_TTS_URL,\n params: this._getParams(Capabilities.VOIP_TTS_PARAMS),\n method: this.caps.VOIP_TTS_METHOD,\n timeout: this.caps.VOIP_TTS_TIMEOUT,\n headers: this._getHeaders(Capabilities.VOIP_TTS_HEADERS)\n }\n try {\n const { data } = await axios({\n ...this.axiosTtsParams,\n url: this._getAxiosUrl(this.caps.VOIP_TTS_URL, '/api/status')\n })\n if (data && data.status === 'OK') {\n debug(`Checking TTS Status response: ${this._getAxiosShortenedOutput(data)}`)\n } else {\n throw new Error(`Checking TTS Status failed, response is: ${this._getAxiosShortenedOutput(data)}`)\n }\n } catch (err) {\n throw new Error(`Checking TTS Status failed - ${this._getAxiosErrOutput(err)}`)\n }\n }\n\n this.caps = Object.assign({}, Defaults, this.caps)\n }\n\n async Start () {\n debug('Start called')\n debug(this.caps[Capabilities.VOIP_TTS_URL])\n\n this.stopCalled = false\n\n this.fullRecord = ''\n this.end = false\n this.connected = false\n this.convoStep = null\n\n const sendBotMsg = (botMsg) => { setTimeout(() => this.queueBotSays(botMsg), 0) }\n\n const joinBotMsg = (botMsgs, joinLastPrevMsg) => {\n const botMsg = {}\n botMsg.messageText = botMsgs.map(m => m.messageText).join(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_DELIMITER] || '')\n botMsg.sourceData = botMsgs.map(m => m.sourceData)\n if (_.isNil(joinLastPrevMsg)) {\n botMsg.sourceData[0].silenceDuration = botMsgs[0].sourceData.data.start\n botMsg.sourceData[0].voiceDuration = botMsgs[botMsgs.length - 1].sourceData.data.end - botMsgs[0].sourceData.data.start\n } else {\n botMsg.sourceData[0].silenceDuration = botMsgs[0].sourceData.data.start - joinLastPrevMsg.sourceData.data.end\n botMsg.sourceData[0].voiceDuration = botMsgs[botMsgs.length - 1].sourceData.data.end - botMsgs[0].sourceData.data.start\n }\n return botMsg\n }\n\n const splitBotMsgs = botMsgs => {\n const splitSentences = s => s.match(new RegExp(`[^${this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_PUNCTUATION]}]+[${this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_PUNCTUATION]}]+`, 'g'))\n const botMsgsFinal = []\n for (const botMsg of botMsgs) {\n const sentences = splitSentences(botMsg.messageText)\n if (_.isNil(sentences)) {\n botMsgsFinal.push(botMsg)\n } else {\n let botMsgCount = 0\n for (const sentence of sentences) {\n botMsgsFinal.push({\n messageText: sentence,\n sourceData: (botMsgCount === 0) ? botMsg.sourceData : _.omit(botMsg.sourceData, ['silenceDuration'])\n })\n botMsgCount++\n }\n }\n }\n return botMsgsFinal\n }\n\n let data = null\n let headers = null\n const connect = async (retryIndex) => {\n retryIndex = retryIndex || 0\n try {\n const res = await axios({\n method: 'post',\n data: {\n API_KEY: this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER] ? process.env.BOTIUM_VOIP_WORKER_APIKEY : this.caps[Capabilities.VOIP_WORKER_APIKEY]\n },\n url: new URL(path.join(`${this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER] ? process.env.BOTIUM_VOIP_WORKER_URL : this.caps[Capabilities.VOIP_WORKER_URL].replace('wss', 'https').replace('ws', 'http')}`, 'initCall')).toString()\n })\n if (res) {\n data = res.data\n headers = res.headers\n }\n } catch (err) {\n debug(`Retry ${retryIndex} / ${this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_MAXRETRIES]}: Connecting to VOIP Worker failed: ${err.message || 'Not reachable'}`)\n if (retryIndex === this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_MAXRETRIES]) {\n throw new Error(`Connecting to VOIP Worker failed: ${err.message || 'Not reachable'}`)\n }\n // Retry after the defined timeout\n await new Promise(resolve => setTimeout(resolve, this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_TIMEOUT]))\n\n // Retry the connection\n await connect(retryIndex + 1)\n }\n }\n await connect()\n\n return new Promise((resolve, reject) => {\n const wsEndpoint = `${this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER] ? process.env.BOTIUM_VOIP_WORKER_URL : this.caps[Capabilities.VOIP_WORKER_URL]}/ws/${data.port}`\n const connect = (retryIndex) => {\n retryIndex = retryIndex || 0\n return new Promise((resolve, reject) => {\n if ('set-cookie' in headers) {\n this.ws = new WebSocket(wsEndpoint, {\n headers: {\n Cookie: headers['set-cookie']\n }\n })\n } else {\n this.ws = new WebSocket(wsEndpoint)\n }\n this.ws.on('open', () => {\n resolve()\n })\n this.ws.on('error', () => {\n if (retryIndex === this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_MAXRETRIES]) {\n reject(new Error(`Websocket connection failed to ${wsEndpoint}`))\n }\n setTimeout(() => connect(retryIndex + 1).then(resolve).catch(reject), this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_TIMEOUT])\n })\n })\n }\n connect().then(() => {\n if (!_.isArray(this.caps[Capabilities.VOIP_ICE_STUN_SERVERS])) {\n if (_.isEmpty(this.caps[Capabilities.VOIP_ICE_STUN_SERVERS])) {\n this.caps[Capabilities.VOIP_ICE_STUN_SERVERS] = []\n } else {\n this.caps[Capabilities.VOIP_ICE_STUN_SERVERS] = this.caps[Capabilities.VOIP_ICE_STUN_SERVERS].split(',')\n }\n }\n\n this.eventEmitter.on('CONVO_STEP_NEXT', (container, convoStep) => {\n this.convoStep = convoStep\n })\n\n this.silence = null\n this.msgCount = 0\n this.firstMsg = true\n this.firstSttInfoReceived = false\n this.silenceTimeout = null\n\n this.wsOpened = true\n debug(`Websocket connection to ${wsEndpoint} opened.`)\n const request = {\n METHOD: 'initCall',\n SIP_CALLER_AUTO: this.caps[Capabilities.VOIP_SIP_POOL_CALLER_ENABLE],\n SIP_PROXY: this.caps[Capabilities.VOIP_SIP_PROXY],\n SIP_PROTOCOL: this.caps[Capabilities.VOIP_SIP_PROTOCOL],\n SIP_CALLER_URI: this.caps[Capabilities.VOIP_SIP_CALLER_URI],\n SIP_CALLER_USERNAME: this.caps[Capabilities.VOIP_SIP_CALLER_USERNAME],\n SIP_CALLER_PASSWORD: this.caps[Capabilities.VOIP_SIP_CALLER_PASSWORD],\n SIP_CALLER_ADDRESS: this.caps[Capabilities.VOIP_SIP_CALLER_ADDRESS],\n SIP_CALLER_REGISTRAR_URI: this.caps[Capabilities.VOIP_SIP_CALLER_REGISTRAR_URI],\n SIP_CALLEE_URI: this.caps[Capabilities.VOIP_SIP_CALLEE_URI],\n SIP_REG_HEADERS: this.caps[Capabilities.VOIP_SIP_REG_HEADERS],\n SIP_INVITE_HEADERS: this.caps[Capabilities.VOIP_SIP_INVITE_HEADERS],\n ICE_ENABLE: this.caps[Capabilities.VOIP_ICE_ENABLE],\n ICE_STUN_SERVERS: this.caps[Capabilities.VOIP_ICE_STUN_SERVERS],\n ICE_TURN_SERVER: this.caps[Capabilities.VOIP_ICE_TURN_SERVER],\n ICE_TURN_USERNAME: this.caps[Capabilities.VOIP_ICE_TURN_USER],\n ICE_TURN_PASSWORD: this.caps[Capabilities.VOIP_ICE_TURN_PASSWORD],\n ICE_TURN_PROTOCOL: this.caps[Capabilities.VOIP_ICE_TURN_PROTOCOL] || 'TCP',\n MIN_SILENCE_DURATION: this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_ENABLE] ? this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT] : null,\n STT_CONFIG: {\n stt_url: this.caps[Capabilities.VOIP_STT_URL_STREAM],\n stt_params: this.caps[Capabilities.VOIP_STT_PARAMS_STREAM],\n stt_body: this.caps[Capabilities.VOIP_STT_BODY_STREAM] || null\n },\n TTS_CONFIG: {\n tts_url: this.caps[Capabilities.VOIP_TTS_URL],\n tts_params: this.caps[Capabilities.VOIP_TTS_PARAMS],\n tts_body: this.caps[Capabilities.VOIP_TTS_BODY] || null\n }\n }\n\n debug(JSON.stringify(request, null, 2))\n this.ws.send(JSON.stringify(request))\n\n this.ws.on('error', (err) => {\n debug(err)\n if (!this.wsOpened) {\n this.end = true\n reject(new Error(`${this.sessionId} - Websocket connection to ${wsEndpoint} error: ${err.message || err}`))\n }\n })\n this.ws.on('message', async (data) => {\n const parsedData = JSON.parse(data)\n\n const parsedDataLog = _.cloneDeep(parsedData)\n parsedDataLog.fullRecord = '<full_record_buffer>'\n\n // debug(JSON.stringify(parsedDataLog, null, 2))\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'initialized') {\n this.sessionId = parsedData.voipConfig.sessionId\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'unauthorized') {\n reject(new Error('Error: Cannot open a call: SIP Authorization failed'))\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'forbidden' && parsedData.event === 'onCallRegState') {\n reject(new Error('Error: Sip Registration failed'))\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'connected') {\n resolve()\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'disconnected') {\n const apiKey = this._extractApiKey(this._getBody(Capabilities.VOIP_STT_BODY))\n if (parsedData.connectDuration && parsedData.connectDuration > 0) {\n this.eventEmitter.emit('CONSUMPTION_METADATA', this, {\n type: _.isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',\n category: 'e2eVoiceIvr',\n metricName: 'consumption.e2e.voip.stt.seconds',\n credits: parsedData.connectDuration,\n apiKey\n })\n }\n }\n\n if (parsedData && parsedData.type === 'error') {\n this.end = true\n reject(new Error(`Error: ${parsedData.message}`))\n sendBotMsg(new Error(`Error: ${parsedData.message}`))\n }\n\n if (parsedData && parsedData.type === 'silence') {\n if (_.isNil(this._getIgnoreSilenceDurationAsserterLogicHook(this.convoStep))) {\n if (_.isNil(this._getJoinLogicHook(this.convoStep)) && parsedData.data.silence.length > 0) {\n this.end = true\n sendBotMsg(new Error(`Silence Duration of ${parsedData.data.silence[0][2].toFixed(2)}s exceeded General Silence Duration Timeout of ${this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT] / 1000}s`))\n }\n }\n }\n\n if (parsedData && parsedData.type === 'fullRecord') {\n this.eventEmitter.emit('MESSAGE_ATTACHMENT', this.container, {\n name: 'full_record.wav',\n mimeType: 'audio/wav',\n base64: parsedData.fullRecord\n })\n this.end = true\n }\n\n if (parsedData && parsedData.data && parsedData.data.final === false) {\n if (this.silenceTimeout) {\n clearTimeout(this.silenceTimeout)\n }\n if (_.isNil(this._getIgnoreSilenceDurationAsserterLogicHook(this.convoStep))) {\n if (!this.firstSttInfoReceived && _.isNil(this._getJoinLogicHook(this.convoStep)) && this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE] && parsedData.data.start && parsedData.data.start * 1000 > this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_START]) {\n this.end = true\n sendBotMsg(new Error(`Silence Duration of ${parsedData.data.start}s exceeded Initial Silence Duration Timeout of ${this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_START] / 1000}s`))\n }\n }\n this.firstSttInfoReceived = true\n if (this.prevData) {\n if (!_.isNil(parsedData.data.start)) {\n const silenceDuration = parsedData.data.start - this.prevData.data.end\n const joinLogicHook = this._getJoinLogicHook(this.convoStep)\n const isJoinMethod = this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'JOIN'\n let matched = false\n if ((!_.isNil(joinLogicHook) && isJoinMethod && silenceDuration > parseInt(joinLogicHook.args[0])) / 1000) {\n matched = true\n } else if ((_.isNil(joinLogicHook) && isJoinMethod && (silenceDuration > parseInt(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT]) / 1000))) {\n matched = true\n }\n if (matched && this.botMsgs.length > 0) {\n sendBotMsg(joinBotMsg(this.botMsgs, this.joinLastPrevMsg))\n this.firstMsg = false\n this.joinLastPrevMsg = this.botMsgs[this.botMsgs.length - 1]\n this.botMsgs = []\n }\n }\n }\n }\n\n if (parsedData && parsedData.data && parsedData.data.type === 'stt' && parsedData.data.final) {\n const confidenceThreshold = ((this._getConfidenceScoreLogicHook(this.convoStep) && this._getConfidenceScoreLogicHook(this.convoStep).args[0]) || this.caps[Capabilities.VOIP_STT_CONFIDENCE_THRESHOLD])\n const successfulConfidenceScore = this._getConfidenceScore(parsedData) >= confidenceThreshold\n debug(`Message: ${parsedData.data.message} / Confidence Score: ${this._getConfidenceScore(parsedData)} (Threshold: ${confidenceThreshold})`)\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'ORIGINAL' && (_.isNil(this._getJoinLogicHook(this.convoStep)))) {\n let botMsg = { messageText: parsedData.data.message }\n if (this.firstMsg) {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n this.firstMsg = false\n } else {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start - this.prevData.data.end\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n }\n this.prevData = parsedData\n if (successfulConfidenceScore) {\n this.botMsgs.push(botMsg)\n this.botMsgs.forEach(botMsg => sendBotMsg(botMsg))\n }\n this.botMsgs = []\n }\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'SPLIT' || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'EXPAND') {\n let botMsg = { messageText: parsedData.data.message }\n if (this.firstMsg) {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n this.firstMsg = false\n } else {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start - this.prevData.data.end\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n }\n this.prevData = parsedData\n if (successfulConfidenceScore) {\n this.botMsgs.push(botMsg)\n const botMsgsExpanded = splitBotMsgs(this.botMsgs)\n botMsgsExpanded.forEach(botMsg => sendBotMsg(botMsg))\n }\n this.botMsgs = []\n }\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'JOIN' || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'CONCAT' || !_.isNil(this._getJoinLogicHook(this.convoStep))) {\n const botMsg = { messageText: parsedData.data.message, sourceData: parsedData }\n this.prevData = parsedData\n if (successfulConfidenceScore) {\n this.botMsgs.push(botMsg)\n this.silenceTimeout = setTimeout(() => {\n if (this.botMsgs.length > 0) {\n debug('Silence Duration Timeout (PSST):', (this._getJoinLogicHook(this.convoStep) && parseInt(this._getJoinLogicHook(this.convoStep).args[0])) || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT], 'ms')\n sendBotMsg(joinBotMsg(this.botMsgs, this.joinLastPrevMsg))\n this.firstMsg = false\n this.joinLastPrevMsg = this.botMsgs[this.botMsgs.length - 1]\n this.botMsgs = []\n }\n }, (this._getJoinLogicHook(this.convoStep) && parseInt(this._getJoinLogicHook(this.convoStep).args[0])) || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT])\n }\n }\n }\n })\n }).catch(err => {\n reject(new Error('Error: ' + err))\n })\n })\n }\n\n async UserSays (msg) {\n debug('UserSays called')\n\n debug(msg)\n\n if (!msg.attachments) {\n msg.attachments = []\n }\n return new Promise((resolve, reject) => {\n setTimeout(async () => {\n let duration = 0\n if (msg && msg.buttons && msg.buttons.length > 0) {\n const request = JSON.stringify({\n METHOD: 'sendDtmf',\n digits: msg.buttons[0].payload,\n sessionId: this.sessionId\n })\n this.ws.send(request)\n } else if (msg && msg.messageText) {\n if (!this.axiosTtsParams) reject(new Error('TTS not configured, only audio input supported'))\n if (this.axiosTtsParams) {\n const ttsRequest = {\n ...this.axiosTtsParams,\n params: {\n ...(this.axiosTtsParams.params || {}),\n text: msg.messageText\n },\n data: this._getBody(Capabilities.VOIP_TTS_BODY),\n responseType: 'arraybuffer'\n }\n msg.sourceData = ttsRequest\n\n let ttsResponse = null\n try {\n ttsResponse = await axios(ttsRequest)\n } catch (err) {\n reject(new Error(`TTS \"${msg.messageText}\" failed - ${this._getAxiosErrOutput(err)}`))\n }\n if (msg && msg.messageText && msg.messageText.length > 0) {\n const apiKey = this._extractApiKey(this._getBody(Capabilities.VOIP_TTS_BODY))\n this.eventEmitter.emit('CONSUMPTION_METADATA', this.container, {\n type: _.isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',\n metricName: 'consumption.e2e.voip.tts.characters',\n credits: msg.messageText.length,\n apiKey\n })\n }\n if (Buffer.isBuffer(ttsResponse.data)) {\n duration = ttsResponse.headers['content-duration']\n const request = JSON.stringify({\n METHOD: 'sendAudio',\n PESQ: false,\n sessionId: this.sessionId,\n b64_buffer: ttsResponse.data.toString('base64')\n })\n msg.attachments.push({\n name: 'tts.wav',\n mimeType: 'audio/wav',\n base64: ttsResponse.data.toString('base64')\n })\n this.ws.send(request)\n } else {\n reject(new Error(`TTS failed, response is: ${this._getAxiosShortenedOutput(ttsResponse.data)}`))\n }\n }\n }\n if (msg && msg.media && msg.media.length > 0 && msg.media[0].buffer) {\n const request = JSON.stringify({\n METHOD: 'sendAudio',\n sessionId: this.sessionId,\n b64_buffer: msg.media[0].buffer.toString('base64')\n })\n this.ws.send(request)\n msg.attachments.push({\n name: msg.media[0].mediaUri,\n mimeType: msg.media[0].mimeType,\n base64: msg.media[0].buffer.toString('base64')\n })\n\n try {\n const metadata = await mm.parseBuffer(msg.media[0].buffer)\n if (metadata && metadata.format && metadata.format.duration) {\n debug('Audio duration of user audio:', metadata.format.duration, 'seconds')\n duration = Math.round(metadata.format.duration)\n } else {\n reject(new Error('Could not determine audio duration from metadata'))\n }\n } catch (err) {\n reject(new Error(`Getting audio duration failed: ${err.message}`))\n }\n }\n setTimeout(resolve, duration * 1000)\n }, 0)\n })\n }\n\n async Stop () {\n debug(`${this.sessionId} - Stop called`)\n if (this.ws && this.ws.readyState !== WebSocket.CLOSED) {\n const request = JSON.stringify({\n METHOD: 'stopCall',\n sessionId: this.sessionId\n })\n this.ws.send(request)\n await new Promise(resolve => {\n setTimeout(resolve, 100000)\n setInterval(() => {\n if (this.end) {\n this.wsOpened = false\n this.ws = null\n this.end = false\n this.convoStep = null\n this.firstSttInfoReceived = false\n resolve()\n }\n }, 100)\n })\n } else {\n this.wsOpened = false\n this.ws = null\n this.end = false\n this.convoStep = null\n this.firstSttInfoReceived = false\n }\n }\n\n _getParams (capParams) {\n if (this.caps[capParams]) {\n if (_.isString(this.caps[capParams])) return JSON.parse(this.caps[capParams])\n else return this.caps[capParams]\n }\n return {}\n }\n\n _getBody (capBody) {\n if (this.caps[capBody]) {\n if (_.isString(this.caps[capBody])) return JSON.parse(this.caps[capBody])\n else return this.caps[capBody]\n }\n return null\n }\n\n _getHeaders (capHeaders) {\n if (this.caps[capHeaders]) {\n if (_.isString(this.caps[capHeaders])) return JSON.parse(this.caps[capHeaders])\n else return this.caps[capHeaders]\n }\n return {}\n }\n\n _getAxiosUrl (baseUrl, extUrl) {\n return baseUrl.substr(0, baseUrl.indexOf('/', 8)) + extUrl\n }\n\n _getAxiosShortenedOutput (data) {\n if (data) {\n if (_.isBuffer(data)) {\n try {\n data = data.toString()\n } catch (err) {\n }\n }\n return _.truncate(_.isString(data) ? data : JSON.stringify(data), { length: 200 })\n } else {\n return ''\n }\n }\n\n _getAxiosErrOutput (err) {\n if (err && err.response) {\n return `Status: ${err.response.status} / Response: ${this._getAxiosShortenedOutput(err.response.data)}`\n } else {\n return err.message\n }\n }\n\n _extractApiKey (body) {\n return _.get(body, 'polly.credentials.accessKeyId') ||\n _.get(body, 'google.credentials.client_email') ||\n _.get(body, 'ibm.credentials.apikey') ||\n _.get(body, 'awstranscribe.credentials.accessKeyId') ||\n _.get(body, 'azure.credentials.subscriptionKey') ||\n null\n }\n\n _getJoinLogicHook (convoStep) {\n if (_.isNil(convoStep)) return null\n if (_.isNil(convoStep.logicHooks)) return null\n return convoStep && convoStep.logicHooks && convoStep.logicHooks.find(lh => lh.name === 'VOIP_JOIN_SILENCE_DURATION')\n }\n\n _getIgnoreSilenceDurationAsserterLogicHook (convoStep) {\n if (_.isNil(convoStep)) return null\n if (_.isNil(convoStep.logicHooks)) return null\n return convoStep && convoStep.logicHooks && convoStep.logicHooks.find(lh => lh.name === 'VOIP_IGNORE_SILENCE_DURATION')\n }\n\n _getConfidenceScoreLogicHook (convoStep) {\n if (_.isNil(convoStep)) return null\n if (_.isNil(convoStep.logicHooks)) return null\n return convoStep && convoStep.logicHooks && convoStep.logicHooks.find(lh => lh.name === 'VOIP_CONFIDENCE_THRESHOLD')\n }\n\n _getConfidenceScore (parsedData) {\n // Azure Speech Service\n if (parsedData?.data?.source?.debug?.privJson) {\n const privJson = JSON.parse(parsedData?.data?.source?.debug?.privJson)\n if (privJson && privJson.NBest && privJson.NBest.length > 0) {\n return Math.max(...privJson.NBest.map(n => n.Confidence))\n }\n }\n return null\n }\n}\n\nmodule.exports = BotiumConnectorVoip\n","const debug = require('debug')('botium-voip-logichook-ignore-silence-duration')\n\nmodule.exports = class IgnoreSilenceDurationLogicHook {\n constructor (context, caps = {}, args = {}) {\n this.context = context\n this.caps = caps\n this.globalArgs = args\n }\n\n async onBotPrepare (props) {\n debug('Silence duration assertion ignored by logic hook')\n }\n}\n","const debug = require('debug')('botium-voip-logichook-join-silence-duration')\n\nmodule.exports = class JoinLogicHook {\n constructor (context, caps = {}, args = {}) {\n this.context = context\n this.caps = caps\n this.globalArgs = args\n }\n\n async onBotPrepare (props) {\n debug('Joined bot messages because of JOIN logic hook')\n }\n}\n","const debug = require('debug')('botium-voip-logichook-confidence-threshold')\n\nmodule.exports = class ConfidenceThresholdLogicHook {\n constructor (context, caps = {}, args = {}) {\n this.context = context\n this.caps = caps\n this.globalArgs = args\n }\n\n async onBotPrepare (props) {\n debug('Updated confidence threshold because of ConfidenceThreshold LogicHook')\n }\n}\n","const BotiumConnectorVoip = require('./src/connector')\nconst IgnoreSilenceDurationLogicHook = require('./src/ignore-sd-logichook')\nconst JoinLogicHook = require('./src/join-logichook')\nconst ConfidenceThresholdLogicHook = require('./src/confidence-threshold-logichook')\n\nmodule.exports = {\n PluginVersion: 1,\n PluginClass: BotiumConnectorVoip,\n PluginDesc: {\n name: 'Voice over IP',\n provider: 'Botium',\n features: {\n audioInput: true,\n e2eTesting: true\n },\n capabilities: [\n {\n name: 'VOIP_STT',\n label: 'Speech Recognition Profile',\n type: 'speechrecognitionprofile',\n required: true\n },\n {\n name: 'VOIP_TTS',\n label: 'Speech Synthesis Profile',\n type: 'speechsynthesisprofile',\n required: true\n }\n ]\n },\n PluginLogicHooks: {\n VOIP_IGNORE_SILENCE_DURATION: IgnoreSilenceDurationLogicHook,\n VOIP_JOIN_SILENCE_DURATION: JoinLogicHook,\n VOIP_CONFIDENCE_THRESHOLD: ConfidenceThresholdLogicHook\n }\n}\n"],"names":["debug","require$$0","Capabilities","VOIP_STT_URL_STREAM","VOIP_STT_PARAMS_STREAM","VOIP_STT_METHOD_STREAM","VOIP_STT_BODY_STREAM","VOIP_STT_BODY","VOIP_STT_HEADERS","VOIP_STT_TIMEOUT","VOIP_STT_MESSAGE_HANDLING","VOIP_STT_MESSAGE_HANDLING_TIMEOUT","VOIP_STT_MESSAGE_HANDLING_DELIMITER","VOIP_STT_MESSAGE_HANDLING_PUNCTUATION","VOIP_TTS_URL","VOIP_TTS_PARAMS","VOIP_TTS_METHOD","VOIP_TTS_BODY","VOIP_TTS_HEADERS","VOIP_TTS_TIMEOUT","VOIP_WORKER_URL","VOIP_WORKER_APIKEY","VOIP_SIP_POOL_CALLER_ENABLE","VOIP_SIP_CALLER_REGISTRAR_URI","VOIP_SIP_CALLER_ADDRESS","VOIP_SIP_CALLER_USERNAME","VOIP_SIP_CALLER_PASSWORD","VOIP_SIP_PROXY","VOIP_SIP_PROTOCOL","VOIP_SIP_REG_HEADERS","VOIP_SIP_INVITE_HEADERS","VOIP_SIP_CALLEE_URI","VOIP_ICE_ENABLE","VOIP_ICE_STUN_SERVERS","VOIP_ICE_TURN_ENABLE","VOIP_ICE_TURN_SERVER","VOIP_ICE_TURN_USER","VOIP_ICE_TURN_PASSWORD","VOIP_ICE_TURN_PROTOCOL","VOIP_WEBSOCKET_CONNECT_MAXRETRIES","VOIP_WEBSOCKET_CONNECT_TIMEOUT","VOIP_SILENCE_DURATION_TIMEOUT_ENABLE","VOIP_SILENCE_DURATION_TIMEOUT","VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE","VOIP_SILENCE_DURATION_TIMEOUT_START","VOIP_STT_CONFIDENCE_THRESHOLD","VOIP_USE_GLOBAL_VOIP_WORKER","Defaults","VOIP_STT_METHOD","BotiumConnectorVoip","constructor","queueBotSays","eventEmitter","caps","botMsgs","sentencesBuilding","sentencesFinal","sentenceBuilding","Validate","axiosTtsParams","url","params","_getParams","method","timeout","headers","_getHeaders","data","axios","_getAxiosUrl","status","_getAxiosShortenedOutput","Error","err","_getAxiosErrOutput","Object","assign","Start","stopCalled","fullRecord","end","connected","convoStep","sendBotMsg","botMsg","setTimeout","joinBotMsg","joinLastPrevMsg","messageText","map","m","join","sourceData","_","isNil","silenceDuration","start","voiceDuration","length","splitBotMsgs","splitSentences","s","match","RegExp","botMsgsFinal","sentences","push","botMsgCount","sentence","omit","connect","retryIndex","res","API_KEY","process","env","BOTIUM_VOIP_WORKER_APIKEY","URL","path","BOTIUM_VOIP_WORKER_URL","replace","toString","message","Promise","resolve","reject","wsEndpoint","port","ws","WebSocket","Cookie","on","then","catch","isArray","isEmpty","split","container","silence","msgCount","firstMsg","firstSttInfoReceived","silenceTimeout","wsOpened","request","METHOD","SIP_CALLER_AUTO","SIP_PROXY","SIP_PROTOCOL","SIP_CALLER_URI","VOIP_SIP_CALLER_URI","SIP_CALLER_USERNAME","SIP_CALLER_PASSWORD","SIP_CALLER_ADDRESS","SIP_CALLER_REGISTRAR_URI","SIP_CALLEE_URI","SIP_REG_HEADERS","SIP_INVITE_HEADERS","ICE_ENABLE","ICE_STUN_SERVERS","ICE_TURN_SERVER","ICE_TURN_USERNAME","ICE_TURN_PASSWORD","ICE_TURN_PROTOCOL","MIN_SILENCE_DURATION","STT_CONFIG","stt_url","stt_params","stt_body","TTS_CONFIG","tts_url","tts_params","tts_body","JSON","stringify","send","sessionId","parsedData","parse","parsedDataLog","cloneDeep","type","voipConfig","event","apiKey","_extractApiKey","_getBody","connectDuration","emit","category","metricName","credits","_getIgnoreSilenceDurationAsserterLogicHook","_getJoinLogicHook","toFixed","name","mimeType","base64","final","clearTimeout","prevData","joinLogicHook","isJoinMethod","matched","parseInt","args","confidenceThreshold","_getConfidenceScoreLogicHook","successfulConfidenceScore","_getConfidenceScore","forEach","botMsgsExpanded","UserSays","msg","attachments","duration","buttons","digits","payload","ttsRequest","text","responseType","ttsResponse","Buffer","isBuffer","PESQ","b64_buffer","media","buffer","mediaUri","metadata","mm","parseBuffer","format","Math","round","Stop","readyState","CLOSED","setInterval","capParams","isString","capBody","capHeaders","baseUrl","extUrl","substr","indexOf","truncate","response","body","get","logicHooks","find","lh","source","privJson","NBest","max","n","Confidence","connector","ignoreSdLogichook","IgnoreSilenceDurationLogicHook","context","globalArgs","onBotPrepare","props","joinLogichook","JoinLogicHook","confidenceThresholdLogichook","ConfidenceThresholdLogicHook","botiumConnectorVoip","PluginVersion","PluginClass","PluginDesc","provider","features","audioInput","e2eTesting","capabilities","label","required","PluginLogicHooks","VOIP_IGNORE_SILENCE_DURATION","VOIP_JOIN_SILENCE_DURATION","VOIP_CONFIDENCE_THRESHOLD"],"mappings":"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"}
1
+ {"version":3,"file":"botium-connector-voip-cjs.js","sources":["../src/connector.js","../src/ignore-sd-logichook.js","../src/join-logichook.js","../src/confidence-threshold-logichook.js","../index.js"],"sourcesContent":["const WebSocket = require('ws')\nconst _ = require('lodash')\nconst axios = require('axios')\nconst debug = require('debug')('botium-connector-voip')\nconst path = require('path')\nconst mm = require('music-metadata')\n\nconst Capabilities = {\n VOIP_STT_URL_STREAM: 'VOIP_STT_URL_STREAM',\n VOIP_STT_PARAMS_STREAM: 'VOIP_STT_PARAMS_STREAM',\n VOIP_STT_METHOD_STREAM: 'VOIP_STT_METHOD_STREAM',\n VOIP_STT_BODY_STREAM: 'VOIP_STT_BODY_STREAM',\n VOIP_STT_BODY: 'VOIP_STT_BODY',\n VOIP_STT_HEADERS: 'VOIP_STT_HEADERS',\n VOIP_STT_TIMEOUT: 'VOIP_STT_TIMEOUT',\n VOIP_STT_MESSAGE_HANDLING: 'VOIP_STT_MESSAGE_HANDLING',\n VOIP_STT_MESSAGE_HANDLING_TIMEOUT: 'VOIP_STT_MESSAGE_HANDLING_TIMEOUT',\n VOIP_STT_MESSAGE_HANDLING_DELIMITER: 'VOIP_STT_MESSAGE_HANDLING_DELIMITER',\n VOIP_STT_MESSAGE_HANDLING_PUNCTUATION: 'VOIP_STT_MESSAGE_HANDLING_PUNCTUATION',\n VOIP_TTS_URL: 'VOIP_TTS_URL',\n VOIP_TTS_PARAMS: 'VOIP_TTS_PARAMS',\n VOIP_TTS_METHOD: 'VOIP_TTS_METHOD',\n VOIP_TTS_BODY: 'VOIP_TTS_BODY',\n VOIP_TTS_HEADERS: 'VOIP_TTS_HEADERS',\n VOIP_TTS_TIMEOUT: 'VOIP_TTS_TIMEOUT',\n VOIP_WORKER_URL: 'VOIP_WORKER_URL',\n VOIP_WORKER_APIKEY: 'VOIP_WORKER_APIKEY',\n VOIP_SIP_POOL_CALLER_ENABLE: 'VOIP_SIP_POOL_CALLER_ENABLE',\n VOIP_SIP_CALLER_REGISTRAR_URI: 'VOIP_SIP_CALLER_REGISTRAR_URI',\n VOIP_SIP_CALLER_ADDRESS: 'VOIP_SIP_CALLER_ADDRESS',\n VOIP_SIP_CALLER_USERNAME: 'VOIP_SIP_CALLER_USERNAME',\n VOIP_SIP_CALLER_PASSWORD: 'VOIP_SIP_CALLER_PASSWORD',\n VOIP_SIP_PROXY: 'VOIP_SIP_PROXY',\n VOIP_SIP_PROTOCOL: 'VOIP_SIP_PROTOCOL',\n VOIP_SIP_REG_HEADERS: 'VOIP_SIP_REG_HEADERS',\n VOIP_SIP_INVITE_HEADERS: 'VOIP_SIP_INVITE_HEADERS',\n VOIP_SIP_CALLEE_URI: 'VOIP_SIP_CALLEE_URI',\n VOIP_ICE_ENABLE: 'VOIP_ICE_ENABLE',\n VOIP_ICE_STUN_SERVERS: 'VOIP_ICE_STUN_SERVERS',\n VOIP_ICE_TURN_ENABLE: 'VOIP_ICE_TURN_ENABLE',\n VOIP_ICE_TURN_SERVER: 'VOIP_ICE_TURN_SERVER',\n VOIP_ICE_TURN_USER: 'VOIP_ICE_TURN_USER',\n VOIP_ICE_TURN_PASSWORD: 'VOIP_ICE_TURN_PASSWORD',\n VOIP_ICE_TURN_PROTOCOL: 'VOIP_ICE_TURN_PROTOCOL',\n VOIP_WEBSOCKET_CONNECT_MAXRETRIES: 'VOIP_WEBSOCKET_CONNECT_MAXRETRIES',\n VOIP_WEBSOCKET_CONNECT_TIMEOUT: 'VOIP_WEBSOCKET_CONNECT_TIMEOUT',\n VOIP_SILENCE_DURATION_TIMEOUT_ENABLE: 'VOIP_SILENCE_DURATION_TIMEOUT_ENABLE',\n VOIP_SILENCE_DURATION_TIMEOUT: 'VOIP_SILENCE_DURATION_TIMEOUT',\n VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE: 'VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE',\n VOIP_SILENCE_DURATION_TIMEOUT_START: 'VOIP_SILENCE_DURATION_TIMEOUT_START',\n VOIP_STT_CONFIDENCE_THRESHOLD: 'VOIP_STT_CONFIDENCE_THRESHOLD',\n VOIP_USE_GLOBAL_VOIP_WORKER: 'VOIP_USE_GLOBAL_VOIP_WORKER'\n}\n\nconst Defaults = {\n VOIP_STT_METHOD: 'POST',\n VOIP_STT_TIMEOUT: 10000,\n VOIP_TTS_METHOD: 'GET',\n VOIP_TTS_TIMEOUT: 10000,\n VOIP_STT_MESSAGE_HANDLING: 'ORIGINAL',\n VOIP_STT_MESSAGE_HANDLING_TIMEOUT: 2500,\n VOIP_STT_MESSAGE_HANDLING_DELIMITER: '. ',\n VOIP_STT_MESSAGE_HANDLING_PUNCTUATION: '.!?',\n VOIP_WEBSOCKET_CONNECT_TIMEOUT: 4000,\n VOIP_WEBSOCKET_CONNECT_MAXRETRIES: 5,\n VOIP_SILENCE_DURATION_TIMEOUT: 2500,\n VOIP_SILENCE_DURATION_TIMEOUT_ENABLE: false,\n VOIP_SILENCE_DURATION_TIMEOUT_START: 1000,\n VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE: false,\n VOIP_STT_CONFIDENCE_THRESHOLD: 0.5,\n VOIP_USE_GLOBAL_VOIP_WORKER: false,\n VOIP_SIP_PROTOCOL: 'TCP'\n}\n\nclass BotiumConnectorVoip {\n constructor ({ queueBotSays, eventEmitter, caps }) {\n this.queueBotSays = queueBotSays\n this.caps = caps\n this.eventEmitter = eventEmitter\n this.botMsgs = []\n this.sentencesBuilding = 0\n this.sentencesFinal = 0\n this.sentenceBuilding = false\n }\n\n async Validate () {\n debug('Validate called')\n debug(this.caps.VOIP_STT_MESSAGE_HANDLING)\n\n if (this.caps.VOIP_TTS_URL) {\n this.axiosTtsParams = {\n url: this.caps.VOIP_TTS_URL,\n params: this._getParams(Capabilities.VOIP_TTS_PARAMS),\n method: this.caps.VOIP_TTS_METHOD,\n timeout: this.caps.VOIP_TTS_TIMEOUT,\n headers: this._getHeaders(Capabilities.VOIP_TTS_HEADERS)\n }\n try {\n const { data } = await axios({\n ...this.axiosTtsParams,\n url: this._getAxiosUrl(this.caps.VOIP_TTS_URL, '/api/status')\n })\n if (data && data.status === 'OK') {\n debug(`Checking TTS Status response: ${this._getAxiosShortenedOutput(data)}`)\n } else {\n throw new Error(`Checking TTS Status failed, response is: ${this._getAxiosShortenedOutput(data)}`)\n }\n } catch (err) {\n throw new Error(`Checking TTS Status failed - ${this._getAxiosErrOutput(err)}`)\n }\n }\n\n this.caps = Object.assign({}, Defaults, this.caps)\n }\n\n async Start () {\n debug('Start called')\n debug(this.caps[Capabilities.VOIP_TTS_URL])\n\n this.stopCalled = false\n\n this.fullRecord = ''\n this.end = false\n this.connected = false\n this.convoStep = null\n\n const sendBotMsg = (botMsg) => { setTimeout(() => this.queueBotSays(botMsg), 0) }\n\n const joinBotMsg = (botMsgs, joinLastPrevMsg) => {\n const botMsg = {}\n botMsg.messageText = botMsgs.map(m => m.messageText).join(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_DELIMITER] || '')\n botMsg.sourceData = botMsgs.map(m => m.sourceData)\n if (_.isNil(joinLastPrevMsg)) {\n botMsg.sourceData[0].silenceDuration = botMsgs[0].sourceData.data.start\n botMsg.sourceData[0].voiceDuration = botMsgs[botMsgs.length - 1].sourceData.data.end - botMsgs[0].sourceData.data.start\n } else {\n botMsg.sourceData[0].silenceDuration = botMsgs[0].sourceData.data.start - joinLastPrevMsg.sourceData.data.end\n botMsg.sourceData[0].voiceDuration = botMsgs[botMsgs.length - 1].sourceData.data.end - botMsgs[0].sourceData.data.start\n }\n return botMsg\n }\n\n const splitBotMsgs = botMsgs => {\n const splitSentences = s => s.match(new RegExp(`[^${this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_PUNCTUATION]}]+[${this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_PUNCTUATION]}]+`, 'g'))\n const botMsgsFinal = []\n for (const botMsg of botMsgs) {\n const sentences = splitSentences(botMsg.messageText)\n if (_.isNil(sentences)) {\n botMsgsFinal.push(botMsg)\n } else {\n let botMsgCount = 0\n for (const sentence of sentences) {\n botMsgsFinal.push({\n messageText: sentence,\n sourceData: (botMsgCount === 0) ? botMsg.sourceData : _.omit(botMsg.sourceData, ['silenceDuration'])\n })\n botMsgCount++\n }\n }\n }\n return botMsgsFinal\n }\n\n let data = null\n let headers = null\n const connect = async (retryIndex) => {\n retryIndex = retryIndex || 0\n try {\n const res = await axios({\n method: 'post',\n data: {\n API_KEY: this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER] ? process.env.BOTIUM_VOIP_WORKER_APIKEY : this.caps[Capabilities.VOIP_WORKER_APIKEY]\n },\n url: new URL(path.join(`${this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER] ? process.env.BOTIUM_VOIP_WORKER_URL : this.caps[Capabilities.VOIP_WORKER_URL].replace('wss', 'https').replace('ws', 'http')}`, 'initCall')).toString()\n })\n if (res) {\n data = res.data\n headers = res.headers\n }\n } catch (err) {\n debug(`Retry ${retryIndex} / ${this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_MAXRETRIES]}: Connecting to VOIP Worker failed: ${err.message || 'Not reachable'}`)\n if (retryIndex === this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_MAXRETRIES]) {\n throw new Error(`Connecting to VOIP Worker failed: ${err.message || 'Not reachable'}`)\n }\n // Retry after the defined timeout\n await new Promise(resolve => setTimeout(resolve, this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_TIMEOUT]))\n\n // Retry the connection\n await connect(retryIndex + 1)\n }\n }\n await connect()\n\n return new Promise((resolve, reject) => {\n const wsEndpoint = `${this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER] ? process.env.BOTIUM_VOIP_WORKER_URL : this.caps[Capabilities.VOIP_WORKER_URL]}/ws/${data.port}`\n const connect = (retryIndex) => {\n retryIndex = retryIndex || 0\n return new Promise((resolve, reject) => {\n if ('set-cookie' in headers) {\n this.ws = new WebSocket(wsEndpoint, {\n headers: {\n Cookie: headers['set-cookie']\n }\n })\n } else {\n this.ws = new WebSocket(wsEndpoint)\n }\n this.ws.on('open', () => {\n resolve()\n })\n this.ws.on('error', () => {\n if (retryIndex === this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_MAXRETRIES]) {\n reject(new Error(`Websocket connection failed to ${wsEndpoint}`))\n }\n setTimeout(() => connect(retryIndex + 1).then(resolve).catch(reject), this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_TIMEOUT])\n })\n })\n }\n connect().then(() => {\n if (!_.isArray(this.caps[Capabilities.VOIP_ICE_STUN_SERVERS])) {\n if (_.isEmpty(this.caps[Capabilities.VOIP_ICE_STUN_SERVERS])) {\n this.caps[Capabilities.VOIP_ICE_STUN_SERVERS] = []\n } else {\n this.caps[Capabilities.VOIP_ICE_STUN_SERVERS] = this.caps[Capabilities.VOIP_ICE_STUN_SERVERS].split(',')\n }\n }\n\n this.eventEmitter.on('CONVO_STEP_NEXT', (container, convoStep) => {\n this.convoStep = convoStep\n })\n\n this.silence = null\n this.msgCount = 0\n this.firstMsg = true\n this.firstSttInfoReceived = false\n this.silenceTimeout = null\n\n this.wsOpened = true\n debug(`Websocket connection to ${wsEndpoint} opened.`)\n const request = {\n METHOD: 'initCall',\n SIP_CALLER_AUTO: this.caps[Capabilities.VOIP_SIP_POOL_CALLER_ENABLE],\n SIP_PROXY: this.caps[Capabilities.VOIP_SIP_PROXY],\n SIP_PROTOCOL: this.caps[Capabilities.VOIP_SIP_PROTOCOL],\n SIP_CALLER_URI: this.caps[Capabilities.VOIP_SIP_CALLER_URI],\n SIP_CALLER_USERNAME: this.caps[Capabilities.VOIP_SIP_CALLER_USERNAME],\n SIP_CALLER_PASSWORD: this.caps[Capabilities.VOIP_SIP_CALLER_PASSWORD],\n SIP_CALLER_ADDRESS: this.caps[Capabilities.VOIP_SIP_CALLER_ADDRESS],\n SIP_CALLER_REGISTRAR_URI: this.caps[Capabilities.VOIP_SIP_CALLER_REGISTRAR_URI],\n SIP_CALLEE_URI: this.caps[Capabilities.VOIP_SIP_CALLEE_URI],\n SIP_REG_HEADERS: this.caps[Capabilities.VOIP_SIP_REG_HEADERS],\n SIP_INVITE_HEADERS: this.caps[Capabilities.VOIP_SIP_INVITE_HEADERS],\n ICE_ENABLE: this.caps[Capabilities.VOIP_ICE_ENABLE],\n ICE_STUN_SERVERS: this.caps[Capabilities.VOIP_ICE_STUN_SERVERS],\n ICE_TURN_SERVER: this.caps[Capabilities.VOIP_ICE_TURN_SERVER],\n ICE_TURN_USERNAME: this.caps[Capabilities.VOIP_ICE_TURN_USER],\n ICE_TURN_PASSWORD: this.caps[Capabilities.VOIP_ICE_TURN_PASSWORD],\n ICE_TURN_PROTOCOL: this.caps[Capabilities.VOIP_ICE_TURN_PROTOCOL] || 'TCP',\n MIN_SILENCE_DURATION: this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_ENABLE] ? this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT] : null,\n STT_CONFIG: {\n stt_url: this.caps[Capabilities.VOIP_STT_URL_STREAM],\n stt_params: this.caps[Capabilities.VOIP_STT_PARAMS_STREAM],\n stt_body: this.caps[Capabilities.VOIP_STT_BODY_STREAM] || null\n },\n TTS_CONFIG: {\n tts_url: this.caps[Capabilities.VOIP_TTS_URL],\n tts_params: this.caps[Capabilities.VOIP_TTS_PARAMS],\n tts_body: this.caps[Capabilities.VOIP_TTS_BODY] || null\n }\n }\n\n debug(JSON.stringify(request, null, 2))\n this.ws.send(JSON.stringify(request))\n\n this.ws.on('error', (err) => {\n debug(err)\n if (!this.wsOpened) {\n this.end = true\n reject(new Error(`${this.sessionId} - Websocket connection to ${wsEndpoint} error: ${err.message || err}`))\n }\n })\n this.ws.on('message', async (data) => {\n const parsedData = JSON.parse(data)\n\n const parsedDataLog = _.cloneDeep(parsedData)\n parsedDataLog.fullRecord = '<full_record_buffer>'\n\n debug(JSON.stringify(parsedDataLog, null, 2))\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'initialized') {\n this.sessionId = parsedData.voipConfig.sessionId\n }\n\n // if sessionId is not the same as the one in the callinfo, return\n if (parsedData && parsedData.voipConfig && parsedData.voipConfig.sessionId && parsedData.voipConfig.sessionId !== this.sessionId) {\n debug('sessionId mismatch, returning')\n return\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'unauthorized') {\n reject(new Error('Error: Cannot open a call: SIP Authorization failed'))\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'forbidden' && parsedData.event === 'onCallRegState') {\n reject(new Error('Error: Sip Registration failed'))\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'connected') {\n resolve()\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'disconnected') {\n const apiKey = this._extractApiKey(this._getBody(Capabilities.VOIP_STT_BODY))\n if (parsedData.connectDuration && parsedData.connectDuration > 0) {\n this.eventEmitter.emit('CONSUMPTION_METADATA', this, {\n type: _.isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',\n category: 'e2eVoiceIvr',\n metricName: 'consumption.e2e.voip.stt.seconds',\n transactions: parsedData.connectDuration,\n apiKey\n })\n }\n }\n\n if (parsedData && parsedData.type === 'error') {\n this.end = true\n reject(new Error(`Error: ${parsedData.message}`))\n sendBotMsg(new Error(`Error: ${parsedData.message}`))\n }\n\n if (parsedData && parsedData.type === 'silence') {\n if (_.isNil(this._getIgnoreSilenceDurationAsserterLogicHook(this.convoStep))) {\n if (_.isNil(this._getJoinLogicHook(this.convoStep)) && parsedData.data.silence.length > 0) {\n this.end = true\n sendBotMsg(new Error(`Silence Duration of ${parsedData.data.silence[0][2].toFixed(2)}s exceeded General Silence Duration Timeout of ${this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT] / 1000}s`))\n }\n }\n }\n\n if (parsedData && parsedData.type === 'fullRecord') {\n this.eventEmitter.emit('MESSAGE_ATTACHMENT', this.container, {\n name: 'full_record.wav',\n mimeType: 'audio/wav',\n base64: parsedData.fullRecord\n })\n this.end = true\n }\n\n if (parsedData && parsedData.data && parsedData.data.final === false) {\n if (this.silenceTimeout) {\n clearTimeout(this.silenceTimeout)\n }\n if (_.isNil(this._getIgnoreSilenceDurationAsserterLogicHook(this.convoStep))) {\n if (!this.firstSttInfoReceived && _.isNil(this._getJoinLogicHook(this.convoStep)) && this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE] && parsedData.data.start && parsedData.data.start * 1000 > this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_START]) {\n this.end = true\n sendBotMsg(new Error(`Silence Duration of ${parsedData.data.start}s exceeded Initial Silence Duration Timeout of ${this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_START] / 1000}s`))\n }\n }\n this.firstSttInfoReceived = true\n if (this.prevData) {\n if (!_.isNil(parsedData.data.start)) {\n const silenceDuration = parsedData.data.start - this.prevData.data.end\n const joinLogicHook = this._getJoinLogicHook(this.convoStep)\n const isJoinMethod = this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'JOIN'\n let matched = false\n if ((!_.isNil(joinLogicHook) && isJoinMethod && silenceDuration > parseInt(joinLogicHook.args[0])) / 1000) {\n matched = true\n } else if ((_.isNil(joinLogicHook) && isJoinMethod && (silenceDuration > parseInt(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT]) / 1000))) {\n matched = true\n }\n if (matched && this.botMsgs.length > 0) {\n sendBotMsg(joinBotMsg(this.botMsgs, this.joinLastPrevMsg))\n this.firstMsg = false\n this.joinLastPrevMsg = this.botMsgs[this.botMsgs.length - 1]\n this.botMsgs = []\n }\n }\n }\n }\n\n if (parsedData && parsedData.data && parsedData.data.type === 'stt' && parsedData.data.final) {\n const confidenceThreshold = ((this._getConfidenceScoreLogicHook(this.convoStep) && this._getConfidenceScoreLogicHook(this.convoStep).args[0]) || this.caps[Capabilities.VOIP_STT_CONFIDENCE_THRESHOLD])\n const successfulConfidenceScore = this._getConfidenceScore(parsedData) >= confidenceThreshold\n debug(`Message: ${parsedData.data.message} / Confidence Score: ${this._getConfidenceScore(parsedData)} (Threshold: ${confidenceThreshold})`)\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'ORIGINAL' && (_.isNil(this._getJoinLogicHook(this.convoStep)))) {\n let botMsg = { messageText: parsedData.data.message }\n if (this.firstMsg) {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n this.firstMsg = false\n } else {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start - this.prevData.data.end\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n }\n this.prevData = parsedData\n if (successfulConfidenceScore) {\n this.botMsgs.push(botMsg)\n this.botMsgs.forEach(botMsg => sendBotMsg(botMsg))\n }\n this.botMsgs = []\n }\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'SPLIT' || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'EXPAND') {\n let botMsg = { messageText: parsedData.data.message }\n if (this.firstMsg) {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n this.firstMsg = false\n } else {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start - this.prevData.data.end\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n }\n this.prevData = parsedData\n if (successfulConfidenceScore) {\n this.botMsgs.push(botMsg)\n const botMsgsExpanded = splitBotMsgs(this.botMsgs)\n botMsgsExpanded.forEach(botMsg => sendBotMsg(botMsg))\n }\n this.botMsgs = []\n }\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'JOIN' || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'CONCAT' || !_.isNil(this._getJoinLogicHook(this.convoStep))) {\n const botMsg = { messageText: parsedData.data.message, sourceData: parsedData }\n this.prevData = parsedData\n if (successfulConfidenceScore) {\n this.botMsgs.push(botMsg)\n this.silenceTimeout = setTimeout(() => {\n if (this.botMsgs.length > 0) {\n debug('Silence Duration Timeout (PSST):', (this._getJoinLogicHook(this.convoStep) && parseInt(this._getJoinLogicHook(this.convoStep).args[0])) || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT], 'ms')\n sendBotMsg(joinBotMsg(this.botMsgs, this.joinLastPrevMsg))\n this.firstMsg = false\n this.joinLastPrevMsg = this.botMsgs[this.botMsgs.length - 1]\n this.botMsgs = []\n }\n }, (this._getJoinLogicHook(this.convoStep) && parseInt(this._getJoinLogicHook(this.convoStep).args[0])) || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT])\n }\n }\n }\n })\n }).catch(err => {\n reject(new Error('Error: ' + err))\n })\n })\n }\n\n async UserSays (msg) {\n debug('UserSays called')\n\n debug(msg)\n\n if (!msg.attachments) {\n msg.attachments = []\n }\n return new Promise((resolve, reject) => {\n setTimeout(async () => {\n let duration = 0\n if (msg && msg.buttons && msg.buttons.length > 0) {\n const request = JSON.stringify({\n METHOD: 'sendDtmf',\n digits: msg.buttons[0].payload,\n sessionId: this.sessionId\n })\n this.ws.send(request)\n } else if (msg && msg.messageText) {\n if (!this.axiosTtsParams) reject(new Error('TTS not configured, only audio input supported'))\n if (this.axiosTtsParams) {\n const ttsRequest = {\n ...this.axiosTtsParams,\n params: {\n ...(this.axiosTtsParams.params || {}),\n text: msg.messageText\n },\n data: this._getBody(Capabilities.VOIP_TTS_BODY),\n responseType: 'arraybuffer'\n }\n msg.sourceData = ttsRequest\n\n let ttsResponse = null\n try {\n ttsResponse = await axios(ttsRequest)\n } catch (err) {\n reject(new Error(`TTS \"${msg.messageText}\" failed - ${this._getAxiosErrOutput(err)}`))\n }\n if (msg && msg.messageText && msg.messageText.length > 0) {\n const apiKey = this._extractApiKey(this._getBody(Capabilities.VOIP_TTS_BODY))\n this.eventEmitter.emit('CONSUMPTION_METADATA', this.container, {\n type: _.isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',\n metricName: 'consumption.e2e.voip.tts.characters',\n transactions: msg.messageText.length,\n apiKey\n })\n }\n if (Buffer.isBuffer(ttsResponse.data)) {\n duration = ttsResponse.headers['content-duration']\n const request = JSON.stringify({\n METHOD: 'sendAudio',\n PESQ: false,\n sessionId: this.sessionId,\n b64_buffer: ttsResponse.data.toString('base64')\n })\n msg.attachments.push({\n name: 'tts.wav',\n mimeType: 'audio/wav',\n base64: ttsResponse.data.toString('base64')\n })\n this.ws.send(request)\n } else {\n reject(new Error(`TTS failed, response is: ${this._getAxiosShortenedOutput(ttsResponse.data)}`))\n }\n }\n }\n if (msg && msg.media && msg.media.length > 0 && msg.media[0].buffer) {\n const request = JSON.stringify({\n METHOD: 'sendAudio',\n sessionId: this.sessionId,\n b64_buffer: msg.media[0].buffer.toString('base64')\n })\n this.ws.send(request)\n msg.attachments.push({\n name: msg.media[0].mediaUri,\n mimeType: msg.media[0].mimeType,\n base64: msg.media[0].buffer.toString('base64')\n })\n\n try {\n const metadata = await mm.parseBuffer(msg.media[0].buffer)\n if (metadata && metadata.format && metadata.format.duration) {\n debug('Audio duration of user audio:', metadata.format.duration, 'seconds')\n duration = Math.round(metadata.format.duration)\n } else {\n reject(new Error('Could not determine audio duration from metadata'))\n }\n } catch (err) {\n reject(new Error(`Getting audio duration failed: ${err.message}`))\n }\n }\n setTimeout(resolve, duration * 1000)\n }, 0)\n })\n }\n\n async Stop () {\n debug(`${this.sessionId} - Stop called`)\n if (this.ws && this.ws.readyState !== WebSocket.CLOSED) {\n const request = JSON.stringify({\n METHOD: 'stopCall',\n sessionId: this.sessionId\n })\n this.ws.send(request)\n await new Promise(resolve => {\n setTimeout(resolve, 100000)\n setInterval(() => {\n if (this.end) {\n this.wsOpened = false\n this.ws = null\n this.end = false\n this.convoStep = null\n this.firstSttInfoReceived = false\n resolve()\n }\n }, 100)\n })\n } else {\n this.wsOpened = false\n this.ws = null\n this.end = false\n this.convoStep = null\n this.firstSttInfoReceived = false\n }\n }\n\n _getParams (capParams) {\n if (this.caps[capParams]) {\n if (_.isString(this.caps[capParams])) return JSON.parse(this.caps[capParams])\n else return this.caps[capParams]\n }\n return {}\n }\n\n _getBody (capBody) {\n if (this.caps[capBody]) {\n if (_.isString(this.caps[capBody])) return JSON.parse(this.caps[capBody])\n else return this.caps[capBody]\n }\n return null\n }\n\n _getHeaders (capHeaders) {\n if (this.caps[capHeaders]) {\n if (_.isString(this.caps[capHeaders])) return JSON.parse(this.caps[capHeaders])\n else return this.caps[capHeaders]\n }\n return {}\n }\n\n _getAxiosUrl (baseUrl, extUrl) {\n return baseUrl.substr(0, baseUrl.indexOf('/', 8)) + extUrl\n }\n\n _getAxiosShortenedOutput (data) {\n if (data) {\n if (_.isBuffer(data)) {\n try {\n data = data.toString()\n } catch (err) {\n }\n }\n return _.truncate(_.isString(data) ? data : JSON.stringify(data), { length: 200 })\n } else {\n return ''\n }\n }\n\n _getAxiosErrOutput (err) {\n if (err && err.response) {\n return `Status: ${err.response.status} / Response: ${this._getAxiosShortenedOutput(err.response.data)}`\n } else {\n return err.message\n }\n }\n\n _extractApiKey (body) {\n return _.get(body, 'polly.credentials.accessKeyId') ||\n _.get(body, 'google.credentials.client_email') ||\n _.get(body, 'ibm.credentials.apikey') ||\n _.get(body, 'awstranscribe.credentials.accessKeyId') ||\n _.get(body, 'azure.credentials.subscriptionKey') ||\n null\n }\n\n _getJoinLogicHook (convoStep) {\n if (_.isNil(convoStep)) return null\n if (_.isNil(convoStep.logicHooks)) return null\n return convoStep && convoStep.logicHooks && convoStep.logicHooks.find(lh => lh.name === 'VOIP_JOIN_SILENCE_DURATION')\n }\n\n _getIgnoreSilenceDurationAsserterLogicHook (convoStep) {\n if (_.isNil(convoStep)) return null\n if (_.isNil(convoStep.logicHooks)) return null\n return convoStep && convoStep.logicHooks && convoStep.logicHooks.find(lh => lh.name === 'VOIP_IGNORE_SILENCE_DURATION')\n }\n\n _getConfidenceScoreLogicHook (convoStep) {\n if (_.isNil(convoStep)) return null\n if (_.isNil(convoStep.logicHooks)) return null\n return convoStep && convoStep.logicHooks && convoStep.logicHooks.find(lh => lh.name === 'VOIP_CONFIDENCE_THRESHOLD')\n }\n\n _getConfidenceScore (parsedData) {\n // Azure Speech Service\n if (parsedData?.data?.source?.debug?.privJson) {\n const privJson = JSON.parse(parsedData?.data?.source?.debug?.privJson)\n if (privJson && privJson.NBest && privJson.NBest.length > 0) {\n return Math.max(...privJson.NBest.map(n => n.Confidence))\n }\n }\n return null\n }\n}\n\nmodule.exports = BotiumConnectorVoip\n","const debug = require('debug')('botium-voip-logichook-ignore-silence-duration')\n\nmodule.exports = class IgnoreSilenceDurationLogicHook {\n constructor (context, caps = {}, args = {}) {\n this.context = context\n this.caps = caps\n this.globalArgs = args\n }\n\n async onBotPrepare (props) {\n debug('Silence duration assertion ignored by logic hook')\n }\n}\n","const debug = require('debug')('botium-voip-logichook-join-silence-duration')\n\nmodule.exports = class JoinLogicHook {\n constructor (context, caps = {}, args = {}) {\n this.context = context\n this.caps = caps\n this.globalArgs = args\n }\n\n async onBotPrepare (props) {\n debug('Joined bot messages because of JOIN logic hook')\n }\n}\n","const debug = require('debug')('botium-voip-logichook-confidence-threshold')\n\nmodule.exports = class ConfidenceThresholdLogicHook {\n constructor (context, caps = {}, args = {}) {\n this.context = context\n this.caps = caps\n this.globalArgs = args\n }\n\n async onBotPrepare (props) {\n debug('Updated confidence threshold because of ConfidenceThreshold LogicHook')\n }\n}\n","const BotiumConnectorVoip = require('./src/connector')\nconst IgnoreSilenceDurationLogicHook = require('./src/ignore-sd-logichook')\nconst JoinLogicHook = require('./src/join-logichook')\nconst ConfidenceThresholdLogicHook = require('./src/confidence-threshold-logichook')\n\nmodule.exports = {\n PluginVersion: 1,\n PluginClass: BotiumConnectorVoip,\n PluginDesc: {\n name: 'Voice over IP',\n provider: 'Botium',\n features: {\n audioInput: true,\n e2eTesting: true\n },\n capabilities: [\n {\n name: 'VOIP_STT',\n label: 'Speech Recognition Profile',\n type: 'speechrecognitionprofile',\n required: true\n },\n {\n name: 'VOIP_TTS',\n label: 'Speech Synthesis Profile',\n type: 'speechsynthesisprofile',\n required: true\n }\n ]\n },\n PluginLogicHooks: {\n VOIP_IGNORE_SILENCE_DURATION: IgnoreSilenceDurationLogicHook,\n VOIP_JOIN_SILENCE_DURATION: JoinLogicHook,\n VOIP_CONFIDENCE_THRESHOLD: ConfidenceThresholdLogicHook\n }\n}\n"],"names":["debug","require$$0","Capabilities","VOIP_STT_URL_STREAM","VOIP_STT_PARAMS_STREAM","VOIP_STT_METHOD_STREAM","VOIP_STT_BODY_STREAM","VOIP_STT_BODY","VOIP_STT_HEADERS","VOIP_STT_TIMEOUT","VOIP_STT_MESSAGE_HANDLING","VOIP_STT_MESSAGE_HANDLING_TIMEOUT","VOIP_STT_MESSAGE_HANDLING_DELIMITER","VOIP_STT_MESSAGE_HANDLING_PUNCTUATION","VOIP_TTS_URL","VOIP_TTS_PARAMS","VOIP_TTS_METHOD","VOIP_TTS_BODY","VOIP_TTS_HEADERS","VOIP_TTS_TIMEOUT","VOIP_WORKER_URL","VOIP_WORKER_APIKEY","VOIP_SIP_POOL_CALLER_ENABLE","VOIP_SIP_CALLER_REGISTRAR_URI","VOIP_SIP_CALLER_ADDRESS","VOIP_SIP_CALLER_USERNAME","VOIP_SIP_CALLER_PASSWORD","VOIP_SIP_PROXY","VOIP_SIP_PROTOCOL","VOIP_SIP_REG_HEADERS","VOIP_SIP_INVITE_HEADERS","VOIP_SIP_CALLEE_URI","VOIP_ICE_ENABLE","VOIP_ICE_STUN_SERVERS","VOIP_ICE_TURN_ENABLE","VOIP_ICE_TURN_SERVER","VOIP_ICE_TURN_USER","VOIP_ICE_TURN_PASSWORD","VOIP_ICE_TURN_PROTOCOL","VOIP_WEBSOCKET_CONNECT_MAXRETRIES","VOIP_WEBSOCKET_CONNECT_TIMEOUT","VOIP_SILENCE_DURATION_TIMEOUT_ENABLE","VOIP_SILENCE_DURATION_TIMEOUT","VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE","VOIP_SILENCE_DURATION_TIMEOUT_START","VOIP_STT_CONFIDENCE_THRESHOLD","VOIP_USE_GLOBAL_VOIP_WORKER","Defaults","VOIP_STT_METHOD","BotiumConnectorVoip","constructor","queueBotSays","eventEmitter","caps","botMsgs","sentencesBuilding","sentencesFinal","sentenceBuilding","Validate","axiosTtsParams","url","params","_getParams","method","timeout","headers","_getHeaders","data","axios","_getAxiosUrl","status","_getAxiosShortenedOutput","Error","err","_getAxiosErrOutput","Object","assign","Start","stopCalled","fullRecord","end","connected","convoStep","sendBotMsg","botMsg","setTimeout","joinBotMsg","joinLastPrevMsg","messageText","map","m","join","sourceData","_","isNil","silenceDuration","start","voiceDuration","length","splitBotMsgs","splitSentences","s","match","RegExp","botMsgsFinal","sentences","push","botMsgCount","sentence","omit","connect","retryIndex","res","API_KEY","process","env","BOTIUM_VOIP_WORKER_APIKEY","URL","path","BOTIUM_VOIP_WORKER_URL","replace","toString","message","Promise","resolve","reject","wsEndpoint","port","ws","WebSocket","Cookie","on","then","catch","isArray","isEmpty","split","container","silence","msgCount","firstMsg","firstSttInfoReceived","silenceTimeout","wsOpened","request","METHOD","SIP_CALLER_AUTO","SIP_PROXY","SIP_PROTOCOL","SIP_CALLER_URI","VOIP_SIP_CALLER_URI","SIP_CALLER_USERNAME","SIP_CALLER_PASSWORD","SIP_CALLER_ADDRESS","SIP_CALLER_REGISTRAR_URI","SIP_CALLEE_URI","SIP_REG_HEADERS","SIP_INVITE_HEADERS","ICE_ENABLE","ICE_STUN_SERVERS","ICE_TURN_SERVER","ICE_TURN_USERNAME","ICE_TURN_PASSWORD","ICE_TURN_PROTOCOL","MIN_SILENCE_DURATION","STT_CONFIG","stt_url","stt_params","stt_body","TTS_CONFIG","tts_url","tts_params","tts_body","JSON","stringify","send","sessionId","parsedData","parse","parsedDataLog","cloneDeep","type","voipConfig","event","apiKey","_extractApiKey","_getBody","connectDuration","emit","category","metricName","transactions","_getIgnoreSilenceDurationAsserterLogicHook","_getJoinLogicHook","toFixed","name","mimeType","base64","final","clearTimeout","prevData","joinLogicHook","isJoinMethod","matched","parseInt","args","confidenceThreshold","_getConfidenceScoreLogicHook","successfulConfidenceScore","_getConfidenceScore","forEach","botMsgsExpanded","UserSays","msg","attachments","duration","buttons","digits","payload","ttsRequest","text","responseType","ttsResponse","Buffer","isBuffer","PESQ","b64_buffer","media","buffer","mediaUri","metadata","mm","parseBuffer","format","Math","round","Stop","readyState","CLOSED","setInterval","capParams","isString","capBody","capHeaders","baseUrl","extUrl","substr","indexOf","truncate","response","body","get","logicHooks","find","lh","source","privJson","NBest","max","n","Confidence","connector","ignoreSdLogichook","IgnoreSilenceDurationLogicHook","context","globalArgs","onBotPrepare","props","joinLogichook","JoinLogicHook","confidenceThresholdLogichook","ConfidenceThresholdLogicHook","botiumConnectorVoip","PluginVersion","PluginClass","PluginDesc","provider","features","audioInput","e2eTesting","capabilities","label","required","PluginLogicHooks","VOIP_IGNORE_SILENCE_DURATION","VOIP_JOIN_SILENCE_DURATION","VOIP_CONFIDENCE_THRESHOLD"],"mappings":"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"}
@@ -274,12 +274,16 @@ class BotiumConnectorVoip {
274
274
  const parsedData = JSON.parse(data);
275
275
  const parsedDataLog = lodash.cloneDeep(parsedData);
276
276
  parsedDataLog.fullRecord = '<full_record_buffer>';
277
-
278
- // debug(JSON.stringify(parsedDataLog, null, 2))
279
-
277
+ debug$3(JSON.stringify(parsedDataLog, null, 2));
280
278
  if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'initialized') {
281
279
  this.sessionId = parsedData.voipConfig.sessionId;
282
280
  }
281
+
282
+ // if sessionId is not the same as the one in the callinfo, return
283
+ if (parsedData && parsedData.voipConfig && parsedData.voipConfig.sessionId && parsedData.voipConfig.sessionId !== this.sessionId) {
284
+ debug$3('sessionId mismatch, returning');
285
+ return;
286
+ }
283
287
  if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'unauthorized') {
284
288
  reject(new Error('Error: Cannot open a call: SIP Authorization failed'));
285
289
  }
@@ -296,7 +300,7 @@ class BotiumConnectorVoip {
296
300
  type: lodash.isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',
297
301
  category: 'e2eVoiceIvr',
298
302
  metricName: 'consumption.e2e.voip.stt.seconds',
299
- credits: parsedData.connectDuration,
303
+ transactions: parsedData.connectDuration,
300
304
  apiKey
301
305
  });
302
306
  }
@@ -478,7 +482,7 @@ class BotiumConnectorVoip {
478
482
  this.eventEmitter.emit('CONSUMPTION_METADATA', this.container, {
479
483
  type: lodash.isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',
480
484
  metricName: 'consumption.e2e.voip.tts.characters',
481
- credits: msg.messageText.length,
485
+ transactions: msg.messageText.length,
482
486
  apiKey
483
487
  });
484
488
  }
@@ -1 +1 @@
1
- {"version":3,"file":"botium-connector-voip-es.js","sources":["../src/connector.js","../src/ignore-sd-logichook.js","../src/join-logichook.js","../src/confidence-threshold-logichook.js","../index.js"],"sourcesContent":["const WebSocket = require('ws')\nconst _ = require('lodash')\nconst axios = require('axios')\nconst debug = require('debug')('botium-connector-voip')\nconst path = require('path')\nconst mm = require('music-metadata')\n\nconst Capabilities = {\n VOIP_STT_URL_STREAM: 'VOIP_STT_URL_STREAM',\n VOIP_STT_PARAMS_STREAM: 'VOIP_STT_PARAMS_STREAM',\n VOIP_STT_METHOD_STREAM: 'VOIP_STT_METHOD_STREAM',\n VOIP_STT_BODY_STREAM: 'VOIP_STT_BODY_STREAM',\n VOIP_STT_BODY: 'VOIP_STT_BODY',\n VOIP_STT_HEADERS: 'VOIP_STT_HEADERS',\n VOIP_STT_TIMEOUT: 'VOIP_STT_TIMEOUT',\n VOIP_STT_MESSAGE_HANDLING: 'VOIP_STT_MESSAGE_HANDLING',\n VOIP_STT_MESSAGE_HANDLING_TIMEOUT: 'VOIP_STT_MESSAGE_HANDLING_TIMEOUT',\n VOIP_STT_MESSAGE_HANDLING_DELIMITER: 'VOIP_STT_MESSAGE_HANDLING_DELIMITER',\n VOIP_STT_MESSAGE_HANDLING_PUNCTUATION: 'VOIP_STT_MESSAGE_HANDLING_PUNCTUATION',\n VOIP_TTS_URL: 'VOIP_TTS_URL',\n VOIP_TTS_PARAMS: 'VOIP_TTS_PARAMS',\n VOIP_TTS_METHOD: 'VOIP_TTS_METHOD',\n VOIP_TTS_BODY: 'VOIP_TTS_BODY',\n VOIP_TTS_HEADERS: 'VOIP_TTS_HEADERS',\n VOIP_TTS_TIMEOUT: 'VOIP_TTS_TIMEOUT',\n VOIP_WORKER_URL: 'VOIP_WORKER_URL',\n VOIP_WORKER_APIKEY: 'VOIP_WORKER_APIKEY',\n VOIP_SIP_POOL_CALLER_ENABLE: 'VOIP_SIP_POOL_CALLER_ENABLE',\n VOIP_SIP_CALLER_REGISTRAR_URI: 'VOIP_SIP_CALLER_REGISTRAR_URI',\n VOIP_SIP_CALLER_ADDRESS: 'VOIP_SIP_CALLER_ADDRESS',\n VOIP_SIP_CALLER_USERNAME: 'VOIP_SIP_CALLER_USERNAME',\n VOIP_SIP_CALLER_PASSWORD: 'VOIP_SIP_CALLER_PASSWORD',\n VOIP_SIP_PROXY: 'VOIP_SIP_PROXY',\n VOIP_SIP_PROTOCOL: 'VOIP_SIP_PROTOCOL',\n VOIP_SIP_REG_HEADERS: 'VOIP_SIP_REG_HEADERS',\n VOIP_SIP_INVITE_HEADERS: 'VOIP_SIP_INVITE_HEADERS',\n VOIP_SIP_CALLEE_URI: 'VOIP_SIP_CALLEE_URI',\n VOIP_ICE_ENABLE: 'VOIP_ICE_ENABLE',\n VOIP_ICE_STUN_SERVERS: 'VOIP_ICE_STUN_SERVERS',\n VOIP_ICE_TURN_ENABLE: 'VOIP_ICE_TURN_ENABLE',\n VOIP_ICE_TURN_SERVER: 'VOIP_ICE_TURN_SERVER',\n VOIP_ICE_TURN_USER: 'VOIP_ICE_TURN_USER',\n VOIP_ICE_TURN_PASSWORD: 'VOIP_ICE_TURN_PASSWORD',\n VOIP_ICE_TURN_PROTOCOL: 'VOIP_ICE_TURN_PROTOCOL',\n VOIP_WEBSOCKET_CONNECT_MAXRETRIES: 'VOIP_WEBSOCKET_CONNECT_MAXRETRIES',\n VOIP_WEBSOCKET_CONNECT_TIMEOUT: 'VOIP_WEBSOCKET_CONNECT_TIMEOUT',\n VOIP_SILENCE_DURATION_TIMEOUT_ENABLE: 'VOIP_SILENCE_DURATION_TIMEOUT_ENABLE',\n VOIP_SILENCE_DURATION_TIMEOUT: 'VOIP_SILENCE_DURATION_TIMEOUT',\n VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE: 'VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE',\n VOIP_SILENCE_DURATION_TIMEOUT_START: 'VOIP_SILENCE_DURATION_TIMEOUT_START',\n VOIP_STT_CONFIDENCE_THRESHOLD: 'VOIP_STT_CONFIDENCE_THRESHOLD',\n VOIP_USE_GLOBAL_VOIP_WORKER: 'VOIP_USE_GLOBAL_VOIP_WORKER'\n}\n\nconst Defaults = {\n VOIP_STT_METHOD: 'POST',\n VOIP_STT_TIMEOUT: 10000,\n VOIP_TTS_METHOD: 'GET',\n VOIP_TTS_TIMEOUT: 10000,\n VOIP_STT_MESSAGE_HANDLING: 'ORIGINAL',\n VOIP_STT_MESSAGE_HANDLING_TIMEOUT: 2500,\n VOIP_STT_MESSAGE_HANDLING_DELIMITER: '. ',\n VOIP_STT_MESSAGE_HANDLING_PUNCTUATION: '.!?',\n VOIP_WEBSOCKET_CONNECT_TIMEOUT: 4000,\n VOIP_WEBSOCKET_CONNECT_MAXRETRIES: 5,\n VOIP_SILENCE_DURATION_TIMEOUT: 2500,\n VOIP_SILENCE_DURATION_TIMEOUT_ENABLE: false,\n VOIP_SILENCE_DURATION_TIMEOUT_START: 1000,\n VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE: false,\n VOIP_STT_CONFIDENCE_THRESHOLD: 0.5,\n VOIP_USE_GLOBAL_VOIP_WORKER: false,\n VOIP_SIP_PROTOCOL: 'TCP'\n}\n\nclass BotiumConnectorVoip {\n constructor ({ queueBotSays, eventEmitter, caps }) {\n this.queueBotSays = queueBotSays\n this.caps = caps\n this.eventEmitter = eventEmitter\n this.botMsgs = []\n this.sentencesBuilding = 0\n this.sentencesFinal = 0\n this.sentenceBuilding = false\n }\n\n async Validate () {\n debug('Validate called')\n debug(this.caps.VOIP_STT_MESSAGE_HANDLING)\n\n if (this.caps.VOIP_TTS_URL) {\n this.axiosTtsParams = {\n url: this.caps.VOIP_TTS_URL,\n params: this._getParams(Capabilities.VOIP_TTS_PARAMS),\n method: this.caps.VOIP_TTS_METHOD,\n timeout: this.caps.VOIP_TTS_TIMEOUT,\n headers: this._getHeaders(Capabilities.VOIP_TTS_HEADERS)\n }\n try {\n const { data } = await axios({\n ...this.axiosTtsParams,\n url: this._getAxiosUrl(this.caps.VOIP_TTS_URL, '/api/status')\n })\n if (data && data.status === 'OK') {\n debug(`Checking TTS Status response: ${this._getAxiosShortenedOutput(data)}`)\n } else {\n throw new Error(`Checking TTS Status failed, response is: ${this._getAxiosShortenedOutput(data)}`)\n }\n } catch (err) {\n throw new Error(`Checking TTS Status failed - ${this._getAxiosErrOutput(err)}`)\n }\n }\n\n this.caps = Object.assign({}, Defaults, this.caps)\n }\n\n async Start () {\n debug('Start called')\n debug(this.caps[Capabilities.VOIP_TTS_URL])\n\n this.stopCalled = false\n\n this.fullRecord = ''\n this.end = false\n this.connected = false\n this.convoStep = null\n\n const sendBotMsg = (botMsg) => { setTimeout(() => this.queueBotSays(botMsg), 0) }\n\n const joinBotMsg = (botMsgs, joinLastPrevMsg) => {\n const botMsg = {}\n botMsg.messageText = botMsgs.map(m => m.messageText).join(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_DELIMITER] || '')\n botMsg.sourceData = botMsgs.map(m => m.sourceData)\n if (_.isNil(joinLastPrevMsg)) {\n botMsg.sourceData[0].silenceDuration = botMsgs[0].sourceData.data.start\n botMsg.sourceData[0].voiceDuration = botMsgs[botMsgs.length - 1].sourceData.data.end - botMsgs[0].sourceData.data.start\n } else {\n botMsg.sourceData[0].silenceDuration = botMsgs[0].sourceData.data.start - joinLastPrevMsg.sourceData.data.end\n botMsg.sourceData[0].voiceDuration = botMsgs[botMsgs.length - 1].sourceData.data.end - botMsgs[0].sourceData.data.start\n }\n return botMsg\n }\n\n const splitBotMsgs = botMsgs => {\n const splitSentences = s => s.match(new RegExp(`[^${this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_PUNCTUATION]}]+[${this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_PUNCTUATION]}]+`, 'g'))\n const botMsgsFinal = []\n for (const botMsg of botMsgs) {\n const sentences = splitSentences(botMsg.messageText)\n if (_.isNil(sentences)) {\n botMsgsFinal.push(botMsg)\n } else {\n let botMsgCount = 0\n for (const sentence of sentences) {\n botMsgsFinal.push({\n messageText: sentence,\n sourceData: (botMsgCount === 0) ? botMsg.sourceData : _.omit(botMsg.sourceData, ['silenceDuration'])\n })\n botMsgCount++\n }\n }\n }\n return botMsgsFinal\n }\n\n let data = null\n let headers = null\n const connect = async (retryIndex) => {\n retryIndex = retryIndex || 0\n try {\n const res = await axios({\n method: 'post',\n data: {\n API_KEY: this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER] ? process.env.BOTIUM_VOIP_WORKER_APIKEY : this.caps[Capabilities.VOIP_WORKER_APIKEY]\n },\n url: new URL(path.join(`${this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER] ? process.env.BOTIUM_VOIP_WORKER_URL : this.caps[Capabilities.VOIP_WORKER_URL].replace('wss', 'https').replace('ws', 'http')}`, 'initCall')).toString()\n })\n if (res) {\n data = res.data\n headers = res.headers\n }\n } catch (err) {\n debug(`Retry ${retryIndex} / ${this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_MAXRETRIES]}: Connecting to VOIP Worker failed: ${err.message || 'Not reachable'}`)\n if (retryIndex === this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_MAXRETRIES]) {\n throw new Error(`Connecting to VOIP Worker failed: ${err.message || 'Not reachable'}`)\n }\n // Retry after the defined timeout\n await new Promise(resolve => setTimeout(resolve, this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_TIMEOUT]))\n\n // Retry the connection\n await connect(retryIndex + 1)\n }\n }\n await connect()\n\n return new Promise((resolve, reject) => {\n const wsEndpoint = `${this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER] ? process.env.BOTIUM_VOIP_WORKER_URL : this.caps[Capabilities.VOIP_WORKER_URL]}/ws/${data.port}`\n const connect = (retryIndex) => {\n retryIndex = retryIndex || 0\n return new Promise((resolve, reject) => {\n if ('set-cookie' in headers) {\n this.ws = new WebSocket(wsEndpoint, {\n headers: {\n Cookie: headers['set-cookie']\n }\n })\n } else {\n this.ws = new WebSocket(wsEndpoint)\n }\n this.ws.on('open', () => {\n resolve()\n })\n this.ws.on('error', () => {\n if (retryIndex === this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_MAXRETRIES]) {\n reject(new Error(`Websocket connection failed to ${wsEndpoint}`))\n }\n setTimeout(() => connect(retryIndex + 1).then(resolve).catch(reject), this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_TIMEOUT])\n })\n })\n }\n connect().then(() => {\n if (!_.isArray(this.caps[Capabilities.VOIP_ICE_STUN_SERVERS])) {\n if (_.isEmpty(this.caps[Capabilities.VOIP_ICE_STUN_SERVERS])) {\n this.caps[Capabilities.VOIP_ICE_STUN_SERVERS] = []\n } else {\n this.caps[Capabilities.VOIP_ICE_STUN_SERVERS] = this.caps[Capabilities.VOIP_ICE_STUN_SERVERS].split(',')\n }\n }\n\n this.eventEmitter.on('CONVO_STEP_NEXT', (container, convoStep) => {\n this.convoStep = convoStep\n })\n\n this.silence = null\n this.msgCount = 0\n this.firstMsg = true\n this.firstSttInfoReceived = false\n this.silenceTimeout = null\n\n this.wsOpened = true\n debug(`Websocket connection to ${wsEndpoint} opened.`)\n const request = {\n METHOD: 'initCall',\n SIP_CALLER_AUTO: this.caps[Capabilities.VOIP_SIP_POOL_CALLER_ENABLE],\n SIP_PROXY: this.caps[Capabilities.VOIP_SIP_PROXY],\n SIP_PROTOCOL: this.caps[Capabilities.VOIP_SIP_PROTOCOL],\n SIP_CALLER_URI: this.caps[Capabilities.VOIP_SIP_CALLER_URI],\n SIP_CALLER_USERNAME: this.caps[Capabilities.VOIP_SIP_CALLER_USERNAME],\n SIP_CALLER_PASSWORD: this.caps[Capabilities.VOIP_SIP_CALLER_PASSWORD],\n SIP_CALLER_ADDRESS: this.caps[Capabilities.VOIP_SIP_CALLER_ADDRESS],\n SIP_CALLER_REGISTRAR_URI: this.caps[Capabilities.VOIP_SIP_CALLER_REGISTRAR_URI],\n SIP_CALLEE_URI: this.caps[Capabilities.VOIP_SIP_CALLEE_URI],\n SIP_REG_HEADERS: this.caps[Capabilities.VOIP_SIP_REG_HEADERS],\n SIP_INVITE_HEADERS: this.caps[Capabilities.VOIP_SIP_INVITE_HEADERS],\n ICE_ENABLE: this.caps[Capabilities.VOIP_ICE_ENABLE],\n ICE_STUN_SERVERS: this.caps[Capabilities.VOIP_ICE_STUN_SERVERS],\n ICE_TURN_SERVER: this.caps[Capabilities.VOIP_ICE_TURN_SERVER],\n ICE_TURN_USERNAME: this.caps[Capabilities.VOIP_ICE_TURN_USER],\n ICE_TURN_PASSWORD: this.caps[Capabilities.VOIP_ICE_TURN_PASSWORD],\n ICE_TURN_PROTOCOL: this.caps[Capabilities.VOIP_ICE_TURN_PROTOCOL] || 'TCP',\n MIN_SILENCE_DURATION: this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_ENABLE] ? this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT] : null,\n STT_CONFIG: {\n stt_url: this.caps[Capabilities.VOIP_STT_URL_STREAM],\n stt_params: this.caps[Capabilities.VOIP_STT_PARAMS_STREAM],\n stt_body: this.caps[Capabilities.VOIP_STT_BODY_STREAM] || null\n },\n TTS_CONFIG: {\n tts_url: this.caps[Capabilities.VOIP_TTS_URL],\n tts_params: this.caps[Capabilities.VOIP_TTS_PARAMS],\n tts_body: this.caps[Capabilities.VOIP_TTS_BODY] || null\n }\n }\n\n debug(JSON.stringify(request, null, 2))\n this.ws.send(JSON.stringify(request))\n\n this.ws.on('error', (err) => {\n debug(err)\n if (!this.wsOpened) {\n this.end = true\n reject(new Error(`${this.sessionId} - Websocket connection to ${wsEndpoint} error: ${err.message || err}`))\n }\n })\n this.ws.on('message', async (data) => {\n const parsedData = JSON.parse(data)\n\n const parsedDataLog = _.cloneDeep(parsedData)\n parsedDataLog.fullRecord = '<full_record_buffer>'\n\n // debug(JSON.stringify(parsedDataLog, null, 2))\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'initialized') {\n this.sessionId = parsedData.voipConfig.sessionId\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'unauthorized') {\n reject(new Error('Error: Cannot open a call: SIP Authorization failed'))\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'forbidden' && parsedData.event === 'onCallRegState') {\n reject(new Error('Error: Sip Registration failed'))\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'connected') {\n resolve()\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'disconnected') {\n const apiKey = this._extractApiKey(this._getBody(Capabilities.VOIP_STT_BODY))\n if (parsedData.connectDuration && parsedData.connectDuration > 0) {\n this.eventEmitter.emit('CONSUMPTION_METADATA', this, {\n type: _.isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',\n category: 'e2eVoiceIvr',\n metricName: 'consumption.e2e.voip.stt.seconds',\n credits: parsedData.connectDuration,\n apiKey\n })\n }\n }\n\n if (parsedData && parsedData.type === 'error') {\n this.end = true\n reject(new Error(`Error: ${parsedData.message}`))\n sendBotMsg(new Error(`Error: ${parsedData.message}`))\n }\n\n if (parsedData && parsedData.type === 'silence') {\n if (_.isNil(this._getIgnoreSilenceDurationAsserterLogicHook(this.convoStep))) {\n if (_.isNil(this._getJoinLogicHook(this.convoStep)) && parsedData.data.silence.length > 0) {\n this.end = true\n sendBotMsg(new Error(`Silence Duration of ${parsedData.data.silence[0][2].toFixed(2)}s exceeded General Silence Duration Timeout of ${this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT] / 1000}s`))\n }\n }\n }\n\n if (parsedData && parsedData.type === 'fullRecord') {\n this.eventEmitter.emit('MESSAGE_ATTACHMENT', this.container, {\n name: 'full_record.wav',\n mimeType: 'audio/wav',\n base64: parsedData.fullRecord\n })\n this.end = true\n }\n\n if (parsedData && parsedData.data && parsedData.data.final === false) {\n if (this.silenceTimeout) {\n clearTimeout(this.silenceTimeout)\n }\n if (_.isNil(this._getIgnoreSilenceDurationAsserterLogicHook(this.convoStep))) {\n if (!this.firstSttInfoReceived && _.isNil(this._getJoinLogicHook(this.convoStep)) && this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE] && parsedData.data.start && parsedData.data.start * 1000 > this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_START]) {\n this.end = true\n sendBotMsg(new Error(`Silence Duration of ${parsedData.data.start}s exceeded Initial Silence Duration Timeout of ${this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_START] / 1000}s`))\n }\n }\n this.firstSttInfoReceived = true\n if (this.prevData) {\n if (!_.isNil(parsedData.data.start)) {\n const silenceDuration = parsedData.data.start - this.prevData.data.end\n const joinLogicHook = this._getJoinLogicHook(this.convoStep)\n const isJoinMethod = this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'JOIN'\n let matched = false\n if ((!_.isNil(joinLogicHook) && isJoinMethod && silenceDuration > parseInt(joinLogicHook.args[0])) / 1000) {\n matched = true\n } else if ((_.isNil(joinLogicHook) && isJoinMethod && (silenceDuration > parseInt(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT]) / 1000))) {\n matched = true\n }\n if (matched && this.botMsgs.length > 0) {\n sendBotMsg(joinBotMsg(this.botMsgs, this.joinLastPrevMsg))\n this.firstMsg = false\n this.joinLastPrevMsg = this.botMsgs[this.botMsgs.length - 1]\n this.botMsgs = []\n }\n }\n }\n }\n\n if (parsedData && parsedData.data && parsedData.data.type === 'stt' && parsedData.data.final) {\n const confidenceThreshold = ((this._getConfidenceScoreLogicHook(this.convoStep) && this._getConfidenceScoreLogicHook(this.convoStep).args[0]) || this.caps[Capabilities.VOIP_STT_CONFIDENCE_THRESHOLD])\n const successfulConfidenceScore = this._getConfidenceScore(parsedData) >= confidenceThreshold\n debug(`Message: ${parsedData.data.message} / Confidence Score: ${this._getConfidenceScore(parsedData)} (Threshold: ${confidenceThreshold})`)\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'ORIGINAL' && (_.isNil(this._getJoinLogicHook(this.convoStep)))) {\n let botMsg = { messageText: parsedData.data.message }\n if (this.firstMsg) {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n this.firstMsg = false\n } else {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start - this.prevData.data.end\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n }\n this.prevData = parsedData\n if (successfulConfidenceScore) {\n this.botMsgs.push(botMsg)\n this.botMsgs.forEach(botMsg => sendBotMsg(botMsg))\n }\n this.botMsgs = []\n }\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'SPLIT' || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'EXPAND') {\n let botMsg = { messageText: parsedData.data.message }\n if (this.firstMsg) {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n this.firstMsg = false\n } else {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start - this.prevData.data.end\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n }\n this.prevData = parsedData\n if (successfulConfidenceScore) {\n this.botMsgs.push(botMsg)\n const botMsgsExpanded = splitBotMsgs(this.botMsgs)\n botMsgsExpanded.forEach(botMsg => sendBotMsg(botMsg))\n }\n this.botMsgs = []\n }\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'JOIN' || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'CONCAT' || !_.isNil(this._getJoinLogicHook(this.convoStep))) {\n const botMsg = { messageText: parsedData.data.message, sourceData: parsedData }\n this.prevData = parsedData\n if (successfulConfidenceScore) {\n this.botMsgs.push(botMsg)\n this.silenceTimeout = setTimeout(() => {\n if (this.botMsgs.length > 0) {\n debug('Silence Duration Timeout (PSST):', (this._getJoinLogicHook(this.convoStep) && parseInt(this._getJoinLogicHook(this.convoStep).args[0])) || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT], 'ms')\n sendBotMsg(joinBotMsg(this.botMsgs, this.joinLastPrevMsg))\n this.firstMsg = false\n this.joinLastPrevMsg = this.botMsgs[this.botMsgs.length - 1]\n this.botMsgs = []\n }\n }, (this._getJoinLogicHook(this.convoStep) && parseInt(this._getJoinLogicHook(this.convoStep).args[0])) || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT])\n }\n }\n }\n })\n }).catch(err => {\n reject(new Error('Error: ' + err))\n })\n })\n }\n\n async UserSays (msg) {\n debug('UserSays called')\n\n debug(msg)\n\n if (!msg.attachments) {\n msg.attachments = []\n }\n return new Promise((resolve, reject) => {\n setTimeout(async () => {\n let duration = 0\n if (msg && msg.buttons && msg.buttons.length > 0) {\n const request = JSON.stringify({\n METHOD: 'sendDtmf',\n digits: msg.buttons[0].payload,\n sessionId: this.sessionId\n })\n this.ws.send(request)\n } else if (msg && msg.messageText) {\n if (!this.axiosTtsParams) reject(new Error('TTS not configured, only audio input supported'))\n if (this.axiosTtsParams) {\n const ttsRequest = {\n ...this.axiosTtsParams,\n params: {\n ...(this.axiosTtsParams.params || {}),\n text: msg.messageText\n },\n data: this._getBody(Capabilities.VOIP_TTS_BODY),\n responseType: 'arraybuffer'\n }\n msg.sourceData = ttsRequest\n\n let ttsResponse = null\n try {\n ttsResponse = await axios(ttsRequest)\n } catch (err) {\n reject(new Error(`TTS \"${msg.messageText}\" failed - ${this._getAxiosErrOutput(err)}`))\n }\n if (msg && msg.messageText && msg.messageText.length > 0) {\n const apiKey = this._extractApiKey(this._getBody(Capabilities.VOIP_TTS_BODY))\n this.eventEmitter.emit('CONSUMPTION_METADATA', this.container, {\n type: _.isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',\n metricName: 'consumption.e2e.voip.tts.characters',\n credits: msg.messageText.length,\n apiKey\n })\n }\n if (Buffer.isBuffer(ttsResponse.data)) {\n duration = ttsResponse.headers['content-duration']\n const request = JSON.stringify({\n METHOD: 'sendAudio',\n PESQ: false,\n sessionId: this.sessionId,\n b64_buffer: ttsResponse.data.toString('base64')\n })\n msg.attachments.push({\n name: 'tts.wav',\n mimeType: 'audio/wav',\n base64: ttsResponse.data.toString('base64')\n })\n this.ws.send(request)\n } else {\n reject(new Error(`TTS failed, response is: ${this._getAxiosShortenedOutput(ttsResponse.data)}`))\n }\n }\n }\n if (msg && msg.media && msg.media.length > 0 && msg.media[0].buffer) {\n const request = JSON.stringify({\n METHOD: 'sendAudio',\n sessionId: this.sessionId,\n b64_buffer: msg.media[0].buffer.toString('base64')\n })\n this.ws.send(request)\n msg.attachments.push({\n name: msg.media[0].mediaUri,\n mimeType: msg.media[0].mimeType,\n base64: msg.media[0].buffer.toString('base64')\n })\n\n try {\n const metadata = await mm.parseBuffer(msg.media[0].buffer)\n if (metadata && metadata.format && metadata.format.duration) {\n debug('Audio duration of user audio:', metadata.format.duration, 'seconds')\n duration = Math.round(metadata.format.duration)\n } else {\n reject(new Error('Could not determine audio duration from metadata'))\n }\n } catch (err) {\n reject(new Error(`Getting audio duration failed: ${err.message}`))\n }\n }\n setTimeout(resolve, duration * 1000)\n }, 0)\n })\n }\n\n async Stop () {\n debug(`${this.sessionId} - Stop called`)\n if (this.ws && this.ws.readyState !== WebSocket.CLOSED) {\n const request = JSON.stringify({\n METHOD: 'stopCall',\n sessionId: this.sessionId\n })\n this.ws.send(request)\n await new Promise(resolve => {\n setTimeout(resolve, 100000)\n setInterval(() => {\n if (this.end) {\n this.wsOpened = false\n this.ws = null\n this.end = false\n this.convoStep = null\n this.firstSttInfoReceived = false\n resolve()\n }\n }, 100)\n })\n } else {\n this.wsOpened = false\n this.ws = null\n this.end = false\n this.convoStep = null\n this.firstSttInfoReceived = false\n }\n }\n\n _getParams (capParams) {\n if (this.caps[capParams]) {\n if (_.isString(this.caps[capParams])) return JSON.parse(this.caps[capParams])\n else return this.caps[capParams]\n }\n return {}\n }\n\n _getBody (capBody) {\n if (this.caps[capBody]) {\n if (_.isString(this.caps[capBody])) return JSON.parse(this.caps[capBody])\n else return this.caps[capBody]\n }\n return null\n }\n\n _getHeaders (capHeaders) {\n if (this.caps[capHeaders]) {\n if (_.isString(this.caps[capHeaders])) return JSON.parse(this.caps[capHeaders])\n else return this.caps[capHeaders]\n }\n return {}\n }\n\n _getAxiosUrl (baseUrl, extUrl) {\n return baseUrl.substr(0, baseUrl.indexOf('/', 8)) + extUrl\n }\n\n _getAxiosShortenedOutput (data) {\n if (data) {\n if (_.isBuffer(data)) {\n try {\n data = data.toString()\n } catch (err) {\n }\n }\n return _.truncate(_.isString(data) ? data : JSON.stringify(data), { length: 200 })\n } else {\n return ''\n }\n }\n\n _getAxiosErrOutput (err) {\n if (err && err.response) {\n return `Status: ${err.response.status} / Response: ${this._getAxiosShortenedOutput(err.response.data)}`\n } else {\n return err.message\n }\n }\n\n _extractApiKey (body) {\n return _.get(body, 'polly.credentials.accessKeyId') ||\n _.get(body, 'google.credentials.client_email') ||\n _.get(body, 'ibm.credentials.apikey') ||\n _.get(body, 'awstranscribe.credentials.accessKeyId') ||\n _.get(body, 'azure.credentials.subscriptionKey') ||\n null\n }\n\n _getJoinLogicHook (convoStep) {\n if (_.isNil(convoStep)) return null\n if (_.isNil(convoStep.logicHooks)) return null\n return convoStep && convoStep.logicHooks && convoStep.logicHooks.find(lh => lh.name === 'VOIP_JOIN_SILENCE_DURATION')\n }\n\n _getIgnoreSilenceDurationAsserterLogicHook (convoStep) {\n if (_.isNil(convoStep)) return null\n if (_.isNil(convoStep.logicHooks)) return null\n return convoStep && convoStep.logicHooks && convoStep.logicHooks.find(lh => lh.name === 'VOIP_IGNORE_SILENCE_DURATION')\n }\n\n _getConfidenceScoreLogicHook (convoStep) {\n if (_.isNil(convoStep)) return null\n if (_.isNil(convoStep.logicHooks)) return null\n return convoStep && convoStep.logicHooks && convoStep.logicHooks.find(lh => lh.name === 'VOIP_CONFIDENCE_THRESHOLD')\n }\n\n _getConfidenceScore (parsedData) {\n // Azure Speech Service\n if (parsedData?.data?.source?.debug?.privJson) {\n const privJson = JSON.parse(parsedData?.data?.source?.debug?.privJson)\n if (privJson && privJson.NBest && privJson.NBest.length > 0) {\n return Math.max(...privJson.NBest.map(n => n.Confidence))\n }\n }\n return null\n }\n}\n\nmodule.exports = BotiumConnectorVoip\n","const debug = require('debug')('botium-voip-logichook-ignore-silence-duration')\n\nmodule.exports = class IgnoreSilenceDurationLogicHook {\n constructor (context, caps = {}, args = {}) {\n this.context = context\n this.caps = caps\n this.globalArgs = args\n }\n\n async onBotPrepare (props) {\n debug('Silence duration assertion ignored by logic hook')\n }\n}\n","const debug = require('debug')('botium-voip-logichook-join-silence-duration')\n\nmodule.exports = class JoinLogicHook {\n constructor (context, caps = {}, args = {}) {\n this.context = context\n this.caps = caps\n this.globalArgs = args\n }\n\n async onBotPrepare (props) {\n debug('Joined bot messages because of JOIN logic hook')\n }\n}\n","const debug = require('debug')('botium-voip-logichook-confidence-threshold')\n\nmodule.exports = class ConfidenceThresholdLogicHook {\n constructor (context, caps = {}, args = {}) {\n this.context = context\n this.caps = caps\n this.globalArgs = args\n }\n\n async onBotPrepare (props) {\n debug('Updated confidence threshold because of ConfidenceThreshold LogicHook')\n }\n}\n","const BotiumConnectorVoip = require('./src/connector')\nconst IgnoreSilenceDurationLogicHook = require('./src/ignore-sd-logichook')\nconst JoinLogicHook = require('./src/join-logichook')\nconst ConfidenceThresholdLogicHook = require('./src/confidence-threshold-logichook')\n\nmodule.exports = {\n PluginVersion: 1,\n PluginClass: BotiumConnectorVoip,\n PluginDesc: {\n name: 'Voice over IP',\n provider: 'Botium',\n features: {\n audioInput: true,\n e2eTesting: true\n },\n capabilities: [\n {\n name: 'VOIP_STT',\n label: 'Speech Recognition Profile',\n type: 'speechrecognitionprofile',\n required: true\n },\n {\n name: 'VOIP_TTS',\n label: 'Speech Synthesis Profile',\n type: 'speechsynthesisprofile',\n required: true\n }\n ]\n },\n PluginLogicHooks: {\n VOIP_IGNORE_SILENCE_DURATION: IgnoreSilenceDurationLogicHook,\n VOIP_JOIN_SILENCE_DURATION: JoinLogicHook,\n VOIP_CONFIDENCE_THRESHOLD: ConfidenceThresholdLogicHook\n }\n}\n"],"names":["debug","require$$0","Capabilities","VOIP_STT_URL_STREAM","VOIP_STT_PARAMS_STREAM","VOIP_STT_METHOD_STREAM","VOIP_STT_BODY_STREAM","VOIP_STT_BODY","VOIP_STT_HEADERS","VOIP_STT_TIMEOUT","VOIP_STT_MESSAGE_HANDLING","VOIP_STT_MESSAGE_HANDLING_TIMEOUT","VOIP_STT_MESSAGE_HANDLING_DELIMITER","VOIP_STT_MESSAGE_HANDLING_PUNCTUATION","VOIP_TTS_URL","VOIP_TTS_PARAMS","VOIP_TTS_METHOD","VOIP_TTS_BODY","VOIP_TTS_HEADERS","VOIP_TTS_TIMEOUT","VOIP_WORKER_URL","VOIP_WORKER_APIKEY","VOIP_SIP_POOL_CALLER_ENABLE","VOIP_SIP_CALLER_REGISTRAR_URI","VOIP_SIP_CALLER_ADDRESS","VOIP_SIP_CALLER_USERNAME","VOIP_SIP_CALLER_PASSWORD","VOIP_SIP_PROXY","VOIP_SIP_PROTOCOL","VOIP_SIP_REG_HEADERS","VOIP_SIP_INVITE_HEADERS","VOIP_SIP_CALLEE_URI","VOIP_ICE_ENABLE","VOIP_ICE_STUN_SERVERS","VOIP_ICE_TURN_ENABLE","VOIP_ICE_TURN_SERVER","VOIP_ICE_TURN_USER","VOIP_ICE_TURN_PASSWORD","VOIP_ICE_TURN_PROTOCOL","VOIP_WEBSOCKET_CONNECT_MAXRETRIES","VOIP_WEBSOCKET_CONNECT_TIMEOUT","VOIP_SILENCE_DURATION_TIMEOUT_ENABLE","VOIP_SILENCE_DURATION_TIMEOUT","VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE","VOIP_SILENCE_DURATION_TIMEOUT_START","VOIP_STT_CONFIDENCE_THRESHOLD","VOIP_USE_GLOBAL_VOIP_WORKER","Defaults","VOIP_STT_METHOD","BotiumConnectorVoip","constructor","queueBotSays","eventEmitter","caps","botMsgs","sentencesBuilding","sentencesFinal","sentenceBuilding","Validate","axiosTtsParams","url","params","_getParams","method","timeout","headers","_getHeaders","data","axios","_getAxiosUrl","status","_getAxiosShortenedOutput","Error","err","_getAxiosErrOutput","Object","assign","Start","stopCalled","fullRecord","end","connected","convoStep","sendBotMsg","botMsg","setTimeout","joinBotMsg","joinLastPrevMsg","messageText","map","m","join","sourceData","_","isNil","silenceDuration","start","voiceDuration","length","splitBotMsgs","splitSentences","s","match","RegExp","botMsgsFinal","sentences","push","botMsgCount","sentence","omit","connect","retryIndex","res","API_KEY","process","env","BOTIUM_VOIP_WORKER_APIKEY","URL","path","BOTIUM_VOIP_WORKER_URL","replace","toString","message","Promise","resolve","reject","wsEndpoint","port","ws","WebSocket","Cookie","on","then","catch","isArray","isEmpty","split","container","silence","msgCount","firstMsg","firstSttInfoReceived","silenceTimeout","wsOpened","request","METHOD","SIP_CALLER_AUTO","SIP_PROXY","SIP_PROTOCOL","SIP_CALLER_URI","VOIP_SIP_CALLER_URI","SIP_CALLER_USERNAME","SIP_CALLER_PASSWORD","SIP_CALLER_ADDRESS","SIP_CALLER_REGISTRAR_URI","SIP_CALLEE_URI","SIP_REG_HEADERS","SIP_INVITE_HEADERS","ICE_ENABLE","ICE_STUN_SERVERS","ICE_TURN_SERVER","ICE_TURN_USERNAME","ICE_TURN_PASSWORD","ICE_TURN_PROTOCOL","MIN_SILENCE_DURATION","STT_CONFIG","stt_url","stt_params","stt_body","TTS_CONFIG","tts_url","tts_params","tts_body","JSON","stringify","send","sessionId","parsedData","parse","parsedDataLog","cloneDeep","type","voipConfig","event","apiKey","_extractApiKey","_getBody","connectDuration","emit","category","metricName","credits","_getIgnoreSilenceDurationAsserterLogicHook","_getJoinLogicHook","toFixed","name","mimeType","base64","final","clearTimeout","prevData","joinLogicHook","isJoinMethod","matched","parseInt","args","confidenceThreshold","_getConfidenceScoreLogicHook","successfulConfidenceScore","_getConfidenceScore","forEach","botMsgsExpanded","UserSays","msg","attachments","duration","buttons","digits","payload","ttsRequest","text","responseType","ttsResponse","Buffer","isBuffer","PESQ","b64_buffer","media","buffer","mediaUri","metadata","mm","parseBuffer","format","Math","round","Stop","readyState","CLOSED","setInterval","capParams","isString","capBody","capHeaders","baseUrl","extUrl","substr","indexOf","truncate","response","body","get","logicHooks","find","lh","source","privJson","NBest","max","n","Confidence","connector","ignoreSdLogichook","IgnoreSilenceDurationLogicHook","context","globalArgs","onBotPrepare","props","joinLogichook","JoinLogicHook","confidenceThresholdLogichook","ConfidenceThresholdLogicHook","botiumConnectorVoip","PluginVersion","PluginClass","PluginDesc","provider","features","audioInput","e2eTesting","capabilities","label","required","PluginLogicHooks","VOIP_IGNORE_SILENCE_DURATION","VOIP_JOIN_SILENCE_DURATION","VOIP_CONFIDENCE_THRESHOLD"],"mappings":"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"}
1
+ {"version":3,"file":"botium-connector-voip-es.js","sources":["../src/connector.js","../src/ignore-sd-logichook.js","../src/join-logichook.js","../src/confidence-threshold-logichook.js","../index.js"],"sourcesContent":["const WebSocket = require('ws')\nconst _ = require('lodash')\nconst axios = require('axios')\nconst debug = require('debug')('botium-connector-voip')\nconst path = require('path')\nconst mm = require('music-metadata')\n\nconst Capabilities = {\n VOIP_STT_URL_STREAM: 'VOIP_STT_URL_STREAM',\n VOIP_STT_PARAMS_STREAM: 'VOIP_STT_PARAMS_STREAM',\n VOIP_STT_METHOD_STREAM: 'VOIP_STT_METHOD_STREAM',\n VOIP_STT_BODY_STREAM: 'VOIP_STT_BODY_STREAM',\n VOIP_STT_BODY: 'VOIP_STT_BODY',\n VOIP_STT_HEADERS: 'VOIP_STT_HEADERS',\n VOIP_STT_TIMEOUT: 'VOIP_STT_TIMEOUT',\n VOIP_STT_MESSAGE_HANDLING: 'VOIP_STT_MESSAGE_HANDLING',\n VOIP_STT_MESSAGE_HANDLING_TIMEOUT: 'VOIP_STT_MESSAGE_HANDLING_TIMEOUT',\n VOIP_STT_MESSAGE_HANDLING_DELIMITER: 'VOIP_STT_MESSAGE_HANDLING_DELIMITER',\n VOIP_STT_MESSAGE_HANDLING_PUNCTUATION: 'VOIP_STT_MESSAGE_HANDLING_PUNCTUATION',\n VOIP_TTS_URL: 'VOIP_TTS_URL',\n VOIP_TTS_PARAMS: 'VOIP_TTS_PARAMS',\n VOIP_TTS_METHOD: 'VOIP_TTS_METHOD',\n VOIP_TTS_BODY: 'VOIP_TTS_BODY',\n VOIP_TTS_HEADERS: 'VOIP_TTS_HEADERS',\n VOIP_TTS_TIMEOUT: 'VOIP_TTS_TIMEOUT',\n VOIP_WORKER_URL: 'VOIP_WORKER_URL',\n VOIP_WORKER_APIKEY: 'VOIP_WORKER_APIKEY',\n VOIP_SIP_POOL_CALLER_ENABLE: 'VOIP_SIP_POOL_CALLER_ENABLE',\n VOIP_SIP_CALLER_REGISTRAR_URI: 'VOIP_SIP_CALLER_REGISTRAR_URI',\n VOIP_SIP_CALLER_ADDRESS: 'VOIP_SIP_CALLER_ADDRESS',\n VOIP_SIP_CALLER_USERNAME: 'VOIP_SIP_CALLER_USERNAME',\n VOIP_SIP_CALLER_PASSWORD: 'VOIP_SIP_CALLER_PASSWORD',\n VOIP_SIP_PROXY: 'VOIP_SIP_PROXY',\n VOIP_SIP_PROTOCOL: 'VOIP_SIP_PROTOCOL',\n VOIP_SIP_REG_HEADERS: 'VOIP_SIP_REG_HEADERS',\n VOIP_SIP_INVITE_HEADERS: 'VOIP_SIP_INVITE_HEADERS',\n VOIP_SIP_CALLEE_URI: 'VOIP_SIP_CALLEE_URI',\n VOIP_ICE_ENABLE: 'VOIP_ICE_ENABLE',\n VOIP_ICE_STUN_SERVERS: 'VOIP_ICE_STUN_SERVERS',\n VOIP_ICE_TURN_ENABLE: 'VOIP_ICE_TURN_ENABLE',\n VOIP_ICE_TURN_SERVER: 'VOIP_ICE_TURN_SERVER',\n VOIP_ICE_TURN_USER: 'VOIP_ICE_TURN_USER',\n VOIP_ICE_TURN_PASSWORD: 'VOIP_ICE_TURN_PASSWORD',\n VOIP_ICE_TURN_PROTOCOL: 'VOIP_ICE_TURN_PROTOCOL',\n VOIP_WEBSOCKET_CONNECT_MAXRETRIES: 'VOIP_WEBSOCKET_CONNECT_MAXRETRIES',\n VOIP_WEBSOCKET_CONNECT_TIMEOUT: 'VOIP_WEBSOCKET_CONNECT_TIMEOUT',\n VOIP_SILENCE_DURATION_TIMEOUT_ENABLE: 'VOIP_SILENCE_DURATION_TIMEOUT_ENABLE',\n VOIP_SILENCE_DURATION_TIMEOUT: 'VOIP_SILENCE_DURATION_TIMEOUT',\n VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE: 'VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE',\n VOIP_SILENCE_DURATION_TIMEOUT_START: 'VOIP_SILENCE_DURATION_TIMEOUT_START',\n VOIP_STT_CONFIDENCE_THRESHOLD: 'VOIP_STT_CONFIDENCE_THRESHOLD',\n VOIP_USE_GLOBAL_VOIP_WORKER: 'VOIP_USE_GLOBAL_VOIP_WORKER'\n}\n\nconst Defaults = {\n VOIP_STT_METHOD: 'POST',\n VOIP_STT_TIMEOUT: 10000,\n VOIP_TTS_METHOD: 'GET',\n VOIP_TTS_TIMEOUT: 10000,\n VOIP_STT_MESSAGE_HANDLING: 'ORIGINAL',\n VOIP_STT_MESSAGE_HANDLING_TIMEOUT: 2500,\n VOIP_STT_MESSAGE_HANDLING_DELIMITER: '. ',\n VOIP_STT_MESSAGE_HANDLING_PUNCTUATION: '.!?',\n VOIP_WEBSOCKET_CONNECT_TIMEOUT: 4000,\n VOIP_WEBSOCKET_CONNECT_MAXRETRIES: 5,\n VOIP_SILENCE_DURATION_TIMEOUT: 2500,\n VOIP_SILENCE_DURATION_TIMEOUT_ENABLE: false,\n VOIP_SILENCE_DURATION_TIMEOUT_START: 1000,\n VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE: false,\n VOIP_STT_CONFIDENCE_THRESHOLD: 0.5,\n VOIP_USE_GLOBAL_VOIP_WORKER: false,\n VOIP_SIP_PROTOCOL: 'TCP'\n}\n\nclass BotiumConnectorVoip {\n constructor ({ queueBotSays, eventEmitter, caps }) {\n this.queueBotSays = queueBotSays\n this.caps = caps\n this.eventEmitter = eventEmitter\n this.botMsgs = []\n this.sentencesBuilding = 0\n this.sentencesFinal = 0\n this.sentenceBuilding = false\n }\n\n async Validate () {\n debug('Validate called')\n debug(this.caps.VOIP_STT_MESSAGE_HANDLING)\n\n if (this.caps.VOIP_TTS_URL) {\n this.axiosTtsParams = {\n url: this.caps.VOIP_TTS_URL,\n params: this._getParams(Capabilities.VOIP_TTS_PARAMS),\n method: this.caps.VOIP_TTS_METHOD,\n timeout: this.caps.VOIP_TTS_TIMEOUT,\n headers: this._getHeaders(Capabilities.VOIP_TTS_HEADERS)\n }\n try {\n const { data } = await axios({\n ...this.axiosTtsParams,\n url: this._getAxiosUrl(this.caps.VOIP_TTS_URL, '/api/status')\n })\n if (data && data.status === 'OK') {\n debug(`Checking TTS Status response: ${this._getAxiosShortenedOutput(data)}`)\n } else {\n throw new Error(`Checking TTS Status failed, response is: ${this._getAxiosShortenedOutput(data)}`)\n }\n } catch (err) {\n throw new Error(`Checking TTS Status failed - ${this._getAxiosErrOutput(err)}`)\n }\n }\n\n this.caps = Object.assign({}, Defaults, this.caps)\n }\n\n async Start () {\n debug('Start called')\n debug(this.caps[Capabilities.VOIP_TTS_URL])\n\n this.stopCalled = false\n\n this.fullRecord = ''\n this.end = false\n this.connected = false\n this.convoStep = null\n\n const sendBotMsg = (botMsg) => { setTimeout(() => this.queueBotSays(botMsg), 0) }\n\n const joinBotMsg = (botMsgs, joinLastPrevMsg) => {\n const botMsg = {}\n botMsg.messageText = botMsgs.map(m => m.messageText).join(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_DELIMITER] || '')\n botMsg.sourceData = botMsgs.map(m => m.sourceData)\n if (_.isNil(joinLastPrevMsg)) {\n botMsg.sourceData[0].silenceDuration = botMsgs[0].sourceData.data.start\n botMsg.sourceData[0].voiceDuration = botMsgs[botMsgs.length - 1].sourceData.data.end - botMsgs[0].sourceData.data.start\n } else {\n botMsg.sourceData[0].silenceDuration = botMsgs[0].sourceData.data.start - joinLastPrevMsg.sourceData.data.end\n botMsg.sourceData[0].voiceDuration = botMsgs[botMsgs.length - 1].sourceData.data.end - botMsgs[0].sourceData.data.start\n }\n return botMsg\n }\n\n const splitBotMsgs = botMsgs => {\n const splitSentences = s => s.match(new RegExp(`[^${this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_PUNCTUATION]}]+[${this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_PUNCTUATION]}]+`, 'g'))\n const botMsgsFinal = []\n for (const botMsg of botMsgs) {\n const sentences = splitSentences(botMsg.messageText)\n if (_.isNil(sentences)) {\n botMsgsFinal.push(botMsg)\n } else {\n let botMsgCount = 0\n for (const sentence of sentences) {\n botMsgsFinal.push({\n messageText: sentence,\n sourceData: (botMsgCount === 0) ? botMsg.sourceData : _.omit(botMsg.sourceData, ['silenceDuration'])\n })\n botMsgCount++\n }\n }\n }\n return botMsgsFinal\n }\n\n let data = null\n let headers = null\n const connect = async (retryIndex) => {\n retryIndex = retryIndex || 0\n try {\n const res = await axios({\n method: 'post',\n data: {\n API_KEY: this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER] ? process.env.BOTIUM_VOIP_WORKER_APIKEY : this.caps[Capabilities.VOIP_WORKER_APIKEY]\n },\n url: new URL(path.join(`${this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER] ? process.env.BOTIUM_VOIP_WORKER_URL : this.caps[Capabilities.VOIP_WORKER_URL].replace('wss', 'https').replace('ws', 'http')}`, 'initCall')).toString()\n })\n if (res) {\n data = res.data\n headers = res.headers\n }\n } catch (err) {\n debug(`Retry ${retryIndex} / ${this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_MAXRETRIES]}: Connecting to VOIP Worker failed: ${err.message || 'Not reachable'}`)\n if (retryIndex === this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_MAXRETRIES]) {\n throw new Error(`Connecting to VOIP Worker failed: ${err.message || 'Not reachable'}`)\n }\n // Retry after the defined timeout\n await new Promise(resolve => setTimeout(resolve, this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_TIMEOUT]))\n\n // Retry the connection\n await connect(retryIndex + 1)\n }\n }\n await connect()\n\n return new Promise((resolve, reject) => {\n const wsEndpoint = `${this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER] ? process.env.BOTIUM_VOIP_WORKER_URL : this.caps[Capabilities.VOIP_WORKER_URL]}/ws/${data.port}`\n const connect = (retryIndex) => {\n retryIndex = retryIndex || 0\n return new Promise((resolve, reject) => {\n if ('set-cookie' in headers) {\n this.ws = new WebSocket(wsEndpoint, {\n headers: {\n Cookie: headers['set-cookie']\n }\n })\n } else {\n this.ws = new WebSocket(wsEndpoint)\n }\n this.ws.on('open', () => {\n resolve()\n })\n this.ws.on('error', () => {\n if (retryIndex === this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_MAXRETRIES]) {\n reject(new Error(`Websocket connection failed to ${wsEndpoint}`))\n }\n setTimeout(() => connect(retryIndex + 1).then(resolve).catch(reject), this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_TIMEOUT])\n })\n })\n }\n connect().then(() => {\n if (!_.isArray(this.caps[Capabilities.VOIP_ICE_STUN_SERVERS])) {\n if (_.isEmpty(this.caps[Capabilities.VOIP_ICE_STUN_SERVERS])) {\n this.caps[Capabilities.VOIP_ICE_STUN_SERVERS] = []\n } else {\n this.caps[Capabilities.VOIP_ICE_STUN_SERVERS] = this.caps[Capabilities.VOIP_ICE_STUN_SERVERS].split(',')\n }\n }\n\n this.eventEmitter.on('CONVO_STEP_NEXT', (container, convoStep) => {\n this.convoStep = convoStep\n })\n\n this.silence = null\n this.msgCount = 0\n this.firstMsg = true\n this.firstSttInfoReceived = false\n this.silenceTimeout = null\n\n this.wsOpened = true\n debug(`Websocket connection to ${wsEndpoint} opened.`)\n const request = {\n METHOD: 'initCall',\n SIP_CALLER_AUTO: this.caps[Capabilities.VOIP_SIP_POOL_CALLER_ENABLE],\n SIP_PROXY: this.caps[Capabilities.VOIP_SIP_PROXY],\n SIP_PROTOCOL: this.caps[Capabilities.VOIP_SIP_PROTOCOL],\n SIP_CALLER_URI: this.caps[Capabilities.VOIP_SIP_CALLER_URI],\n SIP_CALLER_USERNAME: this.caps[Capabilities.VOIP_SIP_CALLER_USERNAME],\n SIP_CALLER_PASSWORD: this.caps[Capabilities.VOIP_SIP_CALLER_PASSWORD],\n SIP_CALLER_ADDRESS: this.caps[Capabilities.VOIP_SIP_CALLER_ADDRESS],\n SIP_CALLER_REGISTRAR_URI: this.caps[Capabilities.VOIP_SIP_CALLER_REGISTRAR_URI],\n SIP_CALLEE_URI: this.caps[Capabilities.VOIP_SIP_CALLEE_URI],\n SIP_REG_HEADERS: this.caps[Capabilities.VOIP_SIP_REG_HEADERS],\n SIP_INVITE_HEADERS: this.caps[Capabilities.VOIP_SIP_INVITE_HEADERS],\n ICE_ENABLE: this.caps[Capabilities.VOIP_ICE_ENABLE],\n ICE_STUN_SERVERS: this.caps[Capabilities.VOIP_ICE_STUN_SERVERS],\n ICE_TURN_SERVER: this.caps[Capabilities.VOIP_ICE_TURN_SERVER],\n ICE_TURN_USERNAME: this.caps[Capabilities.VOIP_ICE_TURN_USER],\n ICE_TURN_PASSWORD: this.caps[Capabilities.VOIP_ICE_TURN_PASSWORD],\n ICE_TURN_PROTOCOL: this.caps[Capabilities.VOIP_ICE_TURN_PROTOCOL] || 'TCP',\n MIN_SILENCE_DURATION: this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_ENABLE] ? this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT] : null,\n STT_CONFIG: {\n stt_url: this.caps[Capabilities.VOIP_STT_URL_STREAM],\n stt_params: this.caps[Capabilities.VOIP_STT_PARAMS_STREAM],\n stt_body: this.caps[Capabilities.VOIP_STT_BODY_STREAM] || null\n },\n TTS_CONFIG: {\n tts_url: this.caps[Capabilities.VOIP_TTS_URL],\n tts_params: this.caps[Capabilities.VOIP_TTS_PARAMS],\n tts_body: this.caps[Capabilities.VOIP_TTS_BODY] || null\n }\n }\n\n debug(JSON.stringify(request, null, 2))\n this.ws.send(JSON.stringify(request))\n\n this.ws.on('error', (err) => {\n debug(err)\n if (!this.wsOpened) {\n this.end = true\n reject(new Error(`${this.sessionId} - Websocket connection to ${wsEndpoint} error: ${err.message || err}`))\n }\n })\n this.ws.on('message', async (data) => {\n const parsedData = JSON.parse(data)\n\n const parsedDataLog = _.cloneDeep(parsedData)\n parsedDataLog.fullRecord = '<full_record_buffer>'\n\n debug(JSON.stringify(parsedDataLog, null, 2))\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'initialized') {\n this.sessionId = parsedData.voipConfig.sessionId\n }\n\n // if sessionId is not the same as the one in the callinfo, return\n if (parsedData && parsedData.voipConfig && parsedData.voipConfig.sessionId && parsedData.voipConfig.sessionId !== this.sessionId) {\n debug('sessionId mismatch, returning')\n return\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'unauthorized') {\n reject(new Error('Error: Cannot open a call: SIP Authorization failed'))\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'forbidden' && parsedData.event === 'onCallRegState') {\n reject(new Error('Error: Sip Registration failed'))\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'connected') {\n resolve()\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'disconnected') {\n const apiKey = this._extractApiKey(this._getBody(Capabilities.VOIP_STT_BODY))\n if (parsedData.connectDuration && parsedData.connectDuration > 0) {\n this.eventEmitter.emit('CONSUMPTION_METADATA', this, {\n type: _.isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',\n category: 'e2eVoiceIvr',\n metricName: 'consumption.e2e.voip.stt.seconds',\n transactions: parsedData.connectDuration,\n apiKey\n })\n }\n }\n\n if (parsedData && parsedData.type === 'error') {\n this.end = true\n reject(new Error(`Error: ${parsedData.message}`))\n sendBotMsg(new Error(`Error: ${parsedData.message}`))\n }\n\n if (parsedData && parsedData.type === 'silence') {\n if (_.isNil(this._getIgnoreSilenceDurationAsserterLogicHook(this.convoStep))) {\n if (_.isNil(this._getJoinLogicHook(this.convoStep)) && parsedData.data.silence.length > 0) {\n this.end = true\n sendBotMsg(new Error(`Silence Duration of ${parsedData.data.silence[0][2].toFixed(2)}s exceeded General Silence Duration Timeout of ${this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT] / 1000}s`))\n }\n }\n }\n\n if (parsedData && parsedData.type === 'fullRecord') {\n this.eventEmitter.emit('MESSAGE_ATTACHMENT', this.container, {\n name: 'full_record.wav',\n mimeType: 'audio/wav',\n base64: parsedData.fullRecord\n })\n this.end = true\n }\n\n if (parsedData && parsedData.data && parsedData.data.final === false) {\n if (this.silenceTimeout) {\n clearTimeout(this.silenceTimeout)\n }\n if (_.isNil(this._getIgnoreSilenceDurationAsserterLogicHook(this.convoStep))) {\n if (!this.firstSttInfoReceived && _.isNil(this._getJoinLogicHook(this.convoStep)) && this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE] && parsedData.data.start && parsedData.data.start * 1000 > this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_START]) {\n this.end = true\n sendBotMsg(new Error(`Silence Duration of ${parsedData.data.start}s exceeded Initial Silence Duration Timeout of ${this.caps[Capabilities.VOIP_SILENCE_DURATION_TIMEOUT_START] / 1000}s`))\n }\n }\n this.firstSttInfoReceived = true\n if (this.prevData) {\n if (!_.isNil(parsedData.data.start)) {\n const silenceDuration = parsedData.data.start - this.prevData.data.end\n const joinLogicHook = this._getJoinLogicHook(this.convoStep)\n const isJoinMethod = this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'JOIN'\n let matched = false\n if ((!_.isNil(joinLogicHook) && isJoinMethod && silenceDuration > parseInt(joinLogicHook.args[0])) / 1000) {\n matched = true\n } else if ((_.isNil(joinLogicHook) && isJoinMethod && (silenceDuration > parseInt(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT]) / 1000))) {\n matched = true\n }\n if (matched && this.botMsgs.length > 0) {\n sendBotMsg(joinBotMsg(this.botMsgs, this.joinLastPrevMsg))\n this.firstMsg = false\n this.joinLastPrevMsg = this.botMsgs[this.botMsgs.length - 1]\n this.botMsgs = []\n }\n }\n }\n }\n\n if (parsedData && parsedData.data && parsedData.data.type === 'stt' && parsedData.data.final) {\n const confidenceThreshold = ((this._getConfidenceScoreLogicHook(this.convoStep) && this._getConfidenceScoreLogicHook(this.convoStep).args[0]) || this.caps[Capabilities.VOIP_STT_CONFIDENCE_THRESHOLD])\n const successfulConfidenceScore = this._getConfidenceScore(parsedData) >= confidenceThreshold\n debug(`Message: ${parsedData.data.message} / Confidence Score: ${this._getConfidenceScore(parsedData)} (Threshold: ${confidenceThreshold})`)\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'ORIGINAL' && (_.isNil(this._getJoinLogicHook(this.convoStep)))) {\n let botMsg = { messageText: parsedData.data.message }\n if (this.firstMsg) {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n this.firstMsg = false\n } else {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start - this.prevData.data.end\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n }\n this.prevData = parsedData\n if (successfulConfidenceScore) {\n this.botMsgs.push(botMsg)\n this.botMsgs.forEach(botMsg => sendBotMsg(botMsg))\n }\n this.botMsgs = []\n }\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'SPLIT' || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'EXPAND') {\n let botMsg = { messageText: parsedData.data.message }\n if (this.firstMsg) {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n this.firstMsg = false\n } else {\n const sourceData = parsedData\n sourceData.silenceDuration = parsedData.data.start - this.prevData.data.end\n sourceData.voiceDuration = parsedData.data.end - parsedData.data.start\n botMsg = Object.assign({}, botMsg, { sourceData })\n }\n this.prevData = parsedData\n if (successfulConfidenceScore) {\n this.botMsgs.push(botMsg)\n const botMsgsExpanded = splitBotMsgs(this.botMsgs)\n botMsgsExpanded.forEach(botMsg => sendBotMsg(botMsg))\n }\n this.botMsgs = []\n }\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'JOIN' || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'CONCAT' || !_.isNil(this._getJoinLogicHook(this.convoStep))) {\n const botMsg = { messageText: parsedData.data.message, sourceData: parsedData }\n this.prevData = parsedData\n if (successfulConfidenceScore) {\n this.botMsgs.push(botMsg)\n this.silenceTimeout = setTimeout(() => {\n if (this.botMsgs.length > 0) {\n debug('Silence Duration Timeout (PSST):', (this._getJoinLogicHook(this.convoStep) && parseInt(this._getJoinLogicHook(this.convoStep).args[0])) || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT], 'ms')\n sendBotMsg(joinBotMsg(this.botMsgs, this.joinLastPrevMsg))\n this.firstMsg = false\n this.joinLastPrevMsg = this.botMsgs[this.botMsgs.length - 1]\n this.botMsgs = []\n }\n }, (this._getJoinLogicHook(this.convoStep) && parseInt(this._getJoinLogicHook(this.convoStep).args[0])) || this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT])\n }\n }\n }\n })\n }).catch(err => {\n reject(new Error('Error: ' + err))\n })\n })\n }\n\n async UserSays (msg) {\n debug('UserSays called')\n\n debug(msg)\n\n if (!msg.attachments) {\n msg.attachments = []\n }\n return new Promise((resolve, reject) => {\n setTimeout(async () => {\n let duration = 0\n if (msg && msg.buttons && msg.buttons.length > 0) {\n const request = JSON.stringify({\n METHOD: 'sendDtmf',\n digits: msg.buttons[0].payload,\n sessionId: this.sessionId\n })\n this.ws.send(request)\n } else if (msg && msg.messageText) {\n if (!this.axiosTtsParams) reject(new Error('TTS not configured, only audio input supported'))\n if (this.axiosTtsParams) {\n const ttsRequest = {\n ...this.axiosTtsParams,\n params: {\n ...(this.axiosTtsParams.params || {}),\n text: msg.messageText\n },\n data: this._getBody(Capabilities.VOIP_TTS_BODY),\n responseType: 'arraybuffer'\n }\n msg.sourceData = ttsRequest\n\n let ttsResponse = null\n try {\n ttsResponse = await axios(ttsRequest)\n } catch (err) {\n reject(new Error(`TTS \"${msg.messageText}\" failed - ${this._getAxiosErrOutput(err)}`))\n }\n if (msg && msg.messageText && msg.messageText.length > 0) {\n const apiKey = this._extractApiKey(this._getBody(Capabilities.VOIP_TTS_BODY))\n this.eventEmitter.emit('CONSUMPTION_METADATA', this.container, {\n type: _.isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',\n metricName: 'consumption.e2e.voip.tts.characters',\n transactions: msg.messageText.length,\n apiKey\n })\n }\n if (Buffer.isBuffer(ttsResponse.data)) {\n duration = ttsResponse.headers['content-duration']\n const request = JSON.stringify({\n METHOD: 'sendAudio',\n PESQ: false,\n sessionId: this.sessionId,\n b64_buffer: ttsResponse.data.toString('base64')\n })\n msg.attachments.push({\n name: 'tts.wav',\n mimeType: 'audio/wav',\n base64: ttsResponse.data.toString('base64')\n })\n this.ws.send(request)\n } else {\n reject(new Error(`TTS failed, response is: ${this._getAxiosShortenedOutput(ttsResponse.data)}`))\n }\n }\n }\n if (msg && msg.media && msg.media.length > 0 && msg.media[0].buffer) {\n const request = JSON.stringify({\n METHOD: 'sendAudio',\n sessionId: this.sessionId,\n b64_buffer: msg.media[0].buffer.toString('base64')\n })\n this.ws.send(request)\n msg.attachments.push({\n name: msg.media[0].mediaUri,\n mimeType: msg.media[0].mimeType,\n base64: msg.media[0].buffer.toString('base64')\n })\n\n try {\n const metadata = await mm.parseBuffer(msg.media[0].buffer)\n if (metadata && metadata.format && metadata.format.duration) {\n debug('Audio duration of user audio:', metadata.format.duration, 'seconds')\n duration = Math.round(metadata.format.duration)\n } else {\n reject(new Error('Could not determine audio duration from metadata'))\n }\n } catch (err) {\n reject(new Error(`Getting audio duration failed: ${err.message}`))\n }\n }\n setTimeout(resolve, duration * 1000)\n }, 0)\n })\n }\n\n async Stop () {\n debug(`${this.sessionId} - Stop called`)\n if (this.ws && this.ws.readyState !== WebSocket.CLOSED) {\n const request = JSON.stringify({\n METHOD: 'stopCall',\n sessionId: this.sessionId\n })\n this.ws.send(request)\n await new Promise(resolve => {\n setTimeout(resolve, 100000)\n setInterval(() => {\n if (this.end) {\n this.wsOpened = false\n this.ws = null\n this.end = false\n this.convoStep = null\n this.firstSttInfoReceived = false\n resolve()\n }\n }, 100)\n })\n } else {\n this.wsOpened = false\n this.ws = null\n this.end = false\n this.convoStep = null\n this.firstSttInfoReceived = false\n }\n }\n\n _getParams (capParams) {\n if (this.caps[capParams]) {\n if (_.isString(this.caps[capParams])) return JSON.parse(this.caps[capParams])\n else return this.caps[capParams]\n }\n return {}\n }\n\n _getBody (capBody) {\n if (this.caps[capBody]) {\n if (_.isString(this.caps[capBody])) return JSON.parse(this.caps[capBody])\n else return this.caps[capBody]\n }\n return null\n }\n\n _getHeaders (capHeaders) {\n if (this.caps[capHeaders]) {\n if (_.isString(this.caps[capHeaders])) return JSON.parse(this.caps[capHeaders])\n else return this.caps[capHeaders]\n }\n return {}\n }\n\n _getAxiosUrl (baseUrl, extUrl) {\n return baseUrl.substr(0, baseUrl.indexOf('/', 8)) + extUrl\n }\n\n _getAxiosShortenedOutput (data) {\n if (data) {\n if (_.isBuffer(data)) {\n try {\n data = data.toString()\n } catch (err) {\n }\n }\n return _.truncate(_.isString(data) ? data : JSON.stringify(data), { length: 200 })\n } else {\n return ''\n }\n }\n\n _getAxiosErrOutput (err) {\n if (err && err.response) {\n return `Status: ${err.response.status} / Response: ${this._getAxiosShortenedOutput(err.response.data)}`\n } else {\n return err.message\n }\n }\n\n _extractApiKey (body) {\n return _.get(body, 'polly.credentials.accessKeyId') ||\n _.get(body, 'google.credentials.client_email') ||\n _.get(body, 'ibm.credentials.apikey') ||\n _.get(body, 'awstranscribe.credentials.accessKeyId') ||\n _.get(body, 'azure.credentials.subscriptionKey') ||\n null\n }\n\n _getJoinLogicHook (convoStep) {\n if (_.isNil(convoStep)) return null\n if (_.isNil(convoStep.logicHooks)) return null\n return convoStep && convoStep.logicHooks && convoStep.logicHooks.find(lh => lh.name === 'VOIP_JOIN_SILENCE_DURATION')\n }\n\n _getIgnoreSilenceDurationAsserterLogicHook (convoStep) {\n if (_.isNil(convoStep)) return null\n if (_.isNil(convoStep.logicHooks)) return null\n return convoStep && convoStep.logicHooks && convoStep.logicHooks.find(lh => lh.name === 'VOIP_IGNORE_SILENCE_DURATION')\n }\n\n _getConfidenceScoreLogicHook (convoStep) {\n if (_.isNil(convoStep)) return null\n if (_.isNil(convoStep.logicHooks)) return null\n return convoStep && convoStep.logicHooks && convoStep.logicHooks.find(lh => lh.name === 'VOIP_CONFIDENCE_THRESHOLD')\n }\n\n _getConfidenceScore (parsedData) {\n // Azure Speech Service\n if (parsedData?.data?.source?.debug?.privJson) {\n const privJson = JSON.parse(parsedData?.data?.source?.debug?.privJson)\n if (privJson && privJson.NBest && privJson.NBest.length > 0) {\n return Math.max(...privJson.NBest.map(n => n.Confidence))\n }\n }\n return null\n }\n}\n\nmodule.exports = BotiumConnectorVoip\n","const debug = require('debug')('botium-voip-logichook-ignore-silence-duration')\n\nmodule.exports = class IgnoreSilenceDurationLogicHook {\n constructor (context, caps = {}, args = {}) {\n this.context = context\n this.caps = caps\n this.globalArgs = args\n }\n\n async onBotPrepare (props) {\n debug('Silence duration assertion ignored by logic hook')\n }\n}\n","const debug = require('debug')('botium-voip-logichook-join-silence-duration')\n\nmodule.exports = class JoinLogicHook {\n constructor (context, caps = {}, args = {}) {\n this.context = context\n this.caps = caps\n this.globalArgs = args\n }\n\n async onBotPrepare (props) {\n debug('Joined bot messages because of JOIN logic hook')\n }\n}\n","const debug = require('debug')('botium-voip-logichook-confidence-threshold')\n\nmodule.exports = class ConfidenceThresholdLogicHook {\n constructor (context, caps = {}, args = {}) {\n this.context = context\n this.caps = caps\n this.globalArgs = args\n }\n\n async onBotPrepare (props) {\n debug('Updated confidence threshold because of ConfidenceThreshold LogicHook')\n }\n}\n","const BotiumConnectorVoip = require('./src/connector')\nconst IgnoreSilenceDurationLogicHook = require('./src/ignore-sd-logichook')\nconst JoinLogicHook = require('./src/join-logichook')\nconst ConfidenceThresholdLogicHook = require('./src/confidence-threshold-logichook')\n\nmodule.exports = {\n PluginVersion: 1,\n PluginClass: BotiumConnectorVoip,\n PluginDesc: {\n name: 'Voice over IP',\n provider: 'Botium',\n features: {\n audioInput: true,\n e2eTesting: true\n },\n capabilities: [\n {\n name: 'VOIP_STT',\n label: 'Speech Recognition Profile',\n type: 'speechrecognitionprofile',\n required: true\n },\n {\n name: 'VOIP_TTS',\n label: 'Speech Synthesis Profile',\n type: 'speechsynthesisprofile',\n required: true\n }\n ]\n },\n PluginLogicHooks: {\n VOIP_IGNORE_SILENCE_DURATION: IgnoreSilenceDurationLogicHook,\n VOIP_JOIN_SILENCE_DURATION: JoinLogicHook,\n VOIP_CONFIDENCE_THRESHOLD: ConfidenceThresholdLogicHook\n }\n}\n"],"names":["debug","require$$0","Capabilities","VOIP_STT_URL_STREAM","VOIP_STT_PARAMS_STREAM","VOIP_STT_METHOD_STREAM","VOIP_STT_BODY_STREAM","VOIP_STT_BODY","VOIP_STT_HEADERS","VOIP_STT_TIMEOUT","VOIP_STT_MESSAGE_HANDLING","VOIP_STT_MESSAGE_HANDLING_TIMEOUT","VOIP_STT_MESSAGE_HANDLING_DELIMITER","VOIP_STT_MESSAGE_HANDLING_PUNCTUATION","VOIP_TTS_URL","VOIP_TTS_PARAMS","VOIP_TTS_METHOD","VOIP_TTS_BODY","VOIP_TTS_HEADERS","VOIP_TTS_TIMEOUT","VOIP_WORKER_URL","VOIP_WORKER_APIKEY","VOIP_SIP_POOL_CALLER_ENABLE","VOIP_SIP_CALLER_REGISTRAR_URI","VOIP_SIP_CALLER_ADDRESS","VOIP_SIP_CALLER_USERNAME","VOIP_SIP_CALLER_PASSWORD","VOIP_SIP_PROXY","VOIP_SIP_PROTOCOL","VOIP_SIP_REG_HEADERS","VOIP_SIP_INVITE_HEADERS","VOIP_SIP_CALLEE_URI","VOIP_ICE_ENABLE","VOIP_ICE_STUN_SERVERS","VOIP_ICE_TURN_ENABLE","VOIP_ICE_TURN_SERVER","VOIP_ICE_TURN_USER","VOIP_ICE_TURN_PASSWORD","VOIP_ICE_TURN_PROTOCOL","VOIP_WEBSOCKET_CONNECT_MAXRETRIES","VOIP_WEBSOCKET_CONNECT_TIMEOUT","VOIP_SILENCE_DURATION_TIMEOUT_ENABLE","VOIP_SILENCE_DURATION_TIMEOUT","VOIP_SILENCE_DURATION_TIMEOUT_START_ENABLE","VOIP_SILENCE_DURATION_TIMEOUT_START","VOIP_STT_CONFIDENCE_THRESHOLD","VOIP_USE_GLOBAL_VOIP_WORKER","Defaults","VOIP_STT_METHOD","BotiumConnectorVoip","constructor","queueBotSays","eventEmitter","caps","botMsgs","sentencesBuilding","sentencesFinal","sentenceBuilding","Validate","axiosTtsParams","url","params","_getParams","method","timeout","headers","_getHeaders","data","axios","_getAxiosUrl","status","_getAxiosShortenedOutput","Error","err","_getAxiosErrOutput","Object","assign","Start","stopCalled","fullRecord","end","connected","convoStep","sendBotMsg","botMsg","setTimeout","joinBotMsg","joinLastPrevMsg","messageText","map","m","join","sourceData","_","isNil","silenceDuration","start","voiceDuration","length","splitBotMsgs","splitSentences","s","match","RegExp","botMsgsFinal","sentences","push","botMsgCount","sentence","omit","connect","retryIndex","res","API_KEY","process","env","BOTIUM_VOIP_WORKER_APIKEY","URL","path","BOTIUM_VOIP_WORKER_URL","replace","toString","message","Promise","resolve","reject","wsEndpoint","port","ws","WebSocket","Cookie","on","then","catch","isArray","isEmpty","split","container","silence","msgCount","firstMsg","firstSttInfoReceived","silenceTimeout","wsOpened","request","METHOD","SIP_CALLER_AUTO","SIP_PROXY","SIP_PROTOCOL","SIP_CALLER_URI","VOIP_SIP_CALLER_URI","SIP_CALLER_USERNAME","SIP_CALLER_PASSWORD","SIP_CALLER_ADDRESS","SIP_CALLER_REGISTRAR_URI","SIP_CALLEE_URI","SIP_REG_HEADERS","SIP_INVITE_HEADERS","ICE_ENABLE","ICE_STUN_SERVERS","ICE_TURN_SERVER","ICE_TURN_USERNAME","ICE_TURN_PASSWORD","ICE_TURN_PROTOCOL","MIN_SILENCE_DURATION","STT_CONFIG","stt_url","stt_params","stt_body","TTS_CONFIG","tts_url","tts_params","tts_body","JSON","stringify","send","sessionId","parsedData","parse","parsedDataLog","cloneDeep","type","voipConfig","event","apiKey","_extractApiKey","_getBody","connectDuration","emit","category","metricName","transactions","_getIgnoreSilenceDurationAsserterLogicHook","_getJoinLogicHook","toFixed","name","mimeType","base64","final","clearTimeout","prevData","joinLogicHook","isJoinMethod","matched","parseInt","args","confidenceThreshold","_getConfidenceScoreLogicHook","successfulConfidenceScore","_getConfidenceScore","forEach","botMsgsExpanded","UserSays","msg","attachments","duration","buttons","digits","payload","ttsRequest","text","responseType","ttsResponse","Buffer","isBuffer","PESQ","b64_buffer","media","buffer","mediaUri","metadata","mm","parseBuffer","format","Math","round","Stop","readyState","CLOSED","setInterval","capParams","isString","capBody","capHeaders","baseUrl","extUrl","substr","indexOf","truncate","response","body","get","logicHooks","find","lh","source","privJson","NBest","max","n","Confidence","connector","ignoreSdLogichook","IgnoreSilenceDurationLogicHook","context","globalArgs","onBotPrepare","props","joinLogichook","JoinLogicHook","confidenceThresholdLogichook","ConfidenceThresholdLogicHook","botiumConnectorVoip","PluginVersion","PluginClass","PluginDesc","provider","features","audioInput","e2eTesting","capabilities","label","required","PluginLogicHooks","VOIP_IGNORE_SILENCE_DURATION","VOIP_JOIN_SILENCE_DURATION","VOIP_CONFIDENCE_THRESHOLD"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "botium-connector-voip",
3
- "version": "0.0.17",
3
+ "version": "0.0.19",
4
4
  "description": "Botium Voice over IP Connector",
5
5
  "main": "dist/botium-connector-voip-cjs.js",
6
6
  "module": "dist/botium-connector-voip-es.js",
package/src/connector.js CHANGED
@@ -285,12 +285,18 @@ class BotiumConnectorVoip {
285
285
  const parsedDataLog = _.cloneDeep(parsedData)
286
286
  parsedDataLog.fullRecord = '<full_record_buffer>'
287
287
 
288
- // debug(JSON.stringify(parsedDataLog, null, 2))
288
+ debug(JSON.stringify(parsedDataLog, null, 2))
289
289
 
290
290
  if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'initialized') {
291
291
  this.sessionId = parsedData.voipConfig.sessionId
292
292
  }
293
293
 
294
+ // if sessionId is not the same as the one in the callinfo, return
295
+ if (parsedData && parsedData.voipConfig && parsedData.voipConfig.sessionId && parsedData.voipConfig.sessionId !== this.sessionId) {
296
+ debug('sessionId mismatch, returning')
297
+ return
298
+ }
299
+
294
300
  if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'unauthorized') {
295
301
  reject(new Error('Error: Cannot open a call: SIP Authorization failed'))
296
302
  }
@@ -310,7 +316,7 @@ class BotiumConnectorVoip {
310
316
  type: _.isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',
311
317
  category: 'e2eVoiceIvr',
312
318
  metricName: 'consumption.e2e.voip.stt.seconds',
313
- credits: parsedData.connectDuration,
319
+ transactions: parsedData.connectDuration,
314
320
  apiKey
315
321
  })
316
322
  }
@@ -486,7 +492,7 @@ class BotiumConnectorVoip {
486
492
  this.eventEmitter.emit('CONSUMPTION_METADATA', this.container, {
487
493
  type: _.isNil(apiKey) ? 'INBUILT' : 'THIRD_PARTY',
488
494
  metricName: 'consumption.e2e.voip.tts.characters',
489
- credits: msg.messageText.length,
495
+ transactions: msg.messageText.length,
490
496
  apiKey
491
497
  })
492
498
  }