botium-connector-voip 0.0.20 → 0.0.21

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.
@@ -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 http = require('http')\nconst https = require('https')\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_TTS_CACHE_ENABLE: 'VOIP_TTS_CACHE_ENABLE',\n VOIP_TTS_CACHE_SIZE: 'VOIP_TTS_CACHE_SIZE',\n VOIP_TTS_PREFETCH_ENABLE: 'VOIP_TTS_PREFETCH_ENABLE',\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_TTS_CACHE_ENABLE: true,\n VOIP_TTS_CACHE_SIZE: 50,\n VOIP_TTS_PREFETCH_ENABLE: true,\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\nconst TTS_HTTP_AGENT = new http.Agent({ keepAlive: true })\nconst TTS_HTTPS_AGENT = new https.Agent({ keepAlive: true })\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 this.ttsCache = new Map()\n this.ttsCacheEnabled = false\n this.ttsCacheMaxEntries = 0\n this.ttsPrefetchEnabled = false\n\n // For debugging latency between incoming STT (bot says) and outgoing audio (sendAudio)\n this._lastBotSaysQueuedAt = null\n this._lastBotSaysText = null\n }\n\n async Validate () {\n debug('Validate called')\n this.caps = Object.assign({}, Defaults, this.caps)\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 httpAgent: TTS_HTTP_AGENT,\n httpsAgent: TTS_HTTPS_AGENT\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 const cacheSize = parseInt(this.caps[Capabilities.VOIP_TTS_CACHE_SIZE], 10)\n this.ttsCacheEnabled = !!this.caps[Capabilities.VOIP_TTS_CACHE_ENABLE]\n this.ttsCacheMaxEntries = _.isFinite(cacheSize) && cacheSize > 0 ? cacheSize : 0\n this.ttsPrefetchEnabled = !!this.caps[Capabilities.VOIP_TTS_PREFETCH_ENABLE]\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 this._lastBotSaysQueuedAt = null\n this._lastBotSaysText = null\n if (this.ttsCache) {\n this.ttsCache.clear()\n }\n\n const sendBotMsg = (botMsg) => {\n this._lastBotSaysQueuedAt = Date.now()\n this._lastBotSaysText = botMsg && botMsg.messageText ? String(botMsg.messageText) : null\n setTimeout(() => this.queueBotSays(botMsg), 0)\n }\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 this._maybePrefetchTts(convoStep)\n // For PSST: send join silence duration per step to VOIP worker (controls PSST silence trigger)\n try {\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'PSST' && this.ws && this.ws.readyState === WebSocket.OPEN) {\n const joinLogicHook = this._getJoinLogicHook(convoStep)\n let silenceMs = null\n if (joinLogicHook && joinLogicHook.args && joinLogicHook.args.length > 0) {\n silenceMs = parseInt(joinLogicHook.args[0], 10)\n }\n // Fallback to global timeout if no per-step hook is set\n if (!_.isFinite(silenceMs) || silenceMs <= 0) {\n silenceMs = parseInt(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT], 10)\n }\n // PSST: treat like JOIN, but subtract 500ms from timeout\n if (_.isFinite(silenceMs) && silenceMs > 0) {\n silenceMs = Math.max(0, silenceMs - 500)\n }\n if (_.isFinite(silenceMs) && silenceMs > 0 && this.sessionId) {\n debug(`PSST: sending silenceDurationMs=${silenceMs} for sessionId=${this.sessionId}`)\n this.ws.send(JSON.stringify({\n METHOD: 'setSttSilenceDuration',\n sessionId: this.sessionId,\n silenceDurationMs: silenceMs\n }))\n }\n }\n } catch (err) {\n debug(`Failed sending PSST silence duration to VOIP worker: ${err.message || err}`)\n }\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 sttHandling = this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING]\n const isPsst = sttHandling === 'PSST'\n const sttLegacy = true\n let sttUrl = this.caps[Capabilities.VOIP_STT_URL_STREAM]\n if (isPsst && _.isString(sttUrl)) {\n const replaced = sttUrl.replace('/api/sttstream/', '/api/stt/')\n if (replaced !== sttUrl) {\n sttUrl = replaced\n } else {\n debug(`PSST: Could not derive /api/stt url from ${sttUrl}, using as-is`)\n }\n }\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_LEGACY: sttLegacy,\n STT_CONFIG: {\n stt_url: sttUrl,\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 sttHandling = this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING]\n const isPsst = sttHandling === 'PSST'\n const isJoinMethod = sttHandling === 'JOIN' || isPsst\n const toJoinTimeoutMs = (ms) => {\n const parsed = parseInt(ms, 10)\n if (!_.isFinite(parsed) || parsed <= 0) return null\n return isPsst ? Math.max(0, parsed - 500) : parsed\n }\n let matched = false\n if (!_.isNil(joinLogicHook) && isJoinMethod) {\n const joinTimeoutMs = toJoinTimeoutMs(joinLogicHook && joinLogicHook.args && joinLogicHook.args[0])\n if (_.isFinite(joinTimeoutMs) && joinTimeoutMs > 0 && silenceDuration > (joinTimeoutMs / 1000)) {\n matched = true\n }\n } else if (_.isNil(joinLogicHook) && isJoinMethod) {\n const joinTimeoutMs = toJoinTimeoutMs(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT])\n if (_.isFinite(joinTimeoutMs) && joinTimeoutMs > 0 && silenceDuration > (joinTimeoutMs / 1000)) {\n matched = true\n }\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 // ORIGINAL: emit final message immediately, unless join hooks are active.\n if (\n (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'ORIGINAL' && (_.isNil(this._getJoinLogicHook(this.convoStep))))\n ) {\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] === 'PSST' || 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 const sttHandling = this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING]\n const isPsst = sttHandling === 'PSST'\n const toJoinTimeoutMs = (ms) => {\n const parsed = parseInt(ms, 10)\n if (!_.isFinite(parsed) || parsed <= 0) return null\n return isPsst ? Math.max(0, parsed - 500) : parsed\n }\n const joinLogicHook = this._getJoinLogicHook(this.convoStep)\n let joinTimeoutMs = toJoinTimeoutMs(_.get(joinLogicHook, 'args[0]'))\n if (!_.isFinite(joinTimeoutMs) || joinTimeoutMs <= 0) {\n joinTimeoutMs = toJoinTimeoutMs(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT])\n }\n this.silenceTimeout = setTimeout(() => {\n if (this.botMsgs.length > 0) {\n debug('Silence Duration Timeout (JOIN/PSST):', joinTimeoutMs, '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 }, joinTimeoutMs || 0)\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 // Check for DTMF tag in messageText: <DTMF>1234</DTMF>\n const dtmfMatch = msg.messageText.match(/<DTMF>([^<]+)<\\/DTMF>/i)\n if (dtmfMatch && dtmfMatch[1]) {\n const digits = dtmfMatch[1]\n debug(`Sending DTMF from messageText: ${digits}`)\n const request = JSON.stringify({\n METHOD: 'sendDtmf',\n digits,\n sessionId: this.sessionId\n })\n this.ws.send(request)\n return resolve()\n }\n if (!this.axiosTtsParams) {\n if (!(msg.media && msg.media.length > 0 && msg.media[0].buffer)) {\n return reject(new Error('TTS not configured, only audio input supported'))\n }\n } else {\n const ttsRequest = this._buildTtsRequest(msg.messageText)\n if (!ttsRequest) return reject(new Error('TTS not configured, only audio input supported'))\n msg.sourceData = ttsRequest\n\n let ttsResult = null\n try {\n ttsResult = await this._getTtsAudio(ttsRequest, msg.messageText)\n } catch (err) {\n return 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 (ttsResult && Buffer.isBuffer(ttsResult.buffer)) {\n duration = parseFloat(ttsResult.duration) || 0\n const b64Buffer = ttsResult.buffer.toString('base64')\n const request = JSON.stringify({\n METHOD: 'sendAudio',\n PESQ: false,\n sessionId: this.sessionId,\n b64_buffer: b64Buffer\n })\n if (this._lastBotSaysQueuedAt) {\n const latencyMs = Date.now() - this._lastBotSaysQueuedAt\n const botText = this._lastBotSaysText ? this._lastBotSaysText.substring(0, 120) : '<unknown>'\n debug(`Latency (bot says -> sendAudio/TTS): ${latencyMs} ms (last bot: ${botText})`)\n }\n msg.attachments.push({\n name: 'tts.wav',\n mimeType: 'audio/wav',\n base64: b64Buffer\n })\n this.ws.send(request)\n } else {\n return reject(new Error('TTS failed, response is empty'))\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 if (this._lastBotSaysQueuedAt) {\n const latencyMs = Date.now() - this._lastBotSaysQueuedAt\n const botText = this._lastBotSaysText ? this._lastBotSaysText.substring(0, 120) : '<unknown>'\n debug(`Latency (bot says -> sendAudio/MEDIA): ${latencyMs} ms (last bot: ${botText})`)\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 _isTtsCacheEnabled () {\n return this.ttsCacheEnabled && this.ttsCacheMaxEntries > 0\n }\n\n _touchTtsCache (cacheKey, entry) {\n if (!this._isTtsCacheEnabled()) return\n this.ttsCache.delete(cacheKey)\n this.ttsCache.set(cacheKey, entry)\n }\n\n _setTtsCacheEntry (cacheKey, entry) {\n if (!this._isTtsCacheEnabled()) return\n this.ttsCache.set(cacheKey, entry)\n this._trimTtsCache()\n }\n\n _deleteTtsCacheEntry (cacheKey) {\n if (this.ttsCache) {\n this.ttsCache.delete(cacheKey)\n }\n }\n\n _trimTtsCache () {\n if (!this._isTtsCacheEnabled()) return\n while (this.ttsCache.size > this.ttsCacheMaxEntries) {\n const oldestKey = this.ttsCache.keys().next().value\n this.ttsCache.delete(oldestKey)\n }\n }\n\n _shouldPrefetchTtsText (text) {\n if (!_.isString(text)) return false\n if (!text.trim()) return false\n return !/\\$[A-Za-z]\\w*/.test(text)\n }\n\n _maybePrefetchTts (convoStep) {\n if (!this.ttsPrefetchEnabled || !this._isTtsCacheEnabled()) return\n if (!convoStep || convoStep.sender !== 'me') return\n if (!this._shouldPrefetchTtsText(convoStep.messageText)) return\n const ttsRequest = this._buildTtsRequest(convoStep.messageText)\n if (!ttsRequest) return\n this._getTtsAudio(ttsRequest, convoStep.messageText).catch(err => {\n debug(`TTS prefetch failed - ${this._getAxiosErrOutput(err)}`)\n })\n }\n\n _buildTtsRequest (text) {\n if (!this.axiosTtsParams) return null\n return {\n ...this.axiosTtsParams,\n params: {\n ...(this.axiosTtsParams.params || {}),\n text\n },\n data: this._getBody(Capabilities.VOIP_TTS_BODY),\n responseType: 'arraybuffer'\n }\n }\n\n _getTtsCacheKey (ttsRequest) {\n const cacheKeyObj = {\n url: ttsRequest.url,\n method: ttsRequest.method,\n params: ttsRequest.params,\n data: ttsRequest.data\n }\n try {\n return JSON.stringify(cacheKeyObj)\n } catch (err) {\n return `${ttsRequest.url}|${ttsRequest.method}|${_.get(ttsRequest, 'params.text', '')}`\n }\n }\n\n async _fetchTts (ttsRequest, text) {\n const ttsStart = Date.now()\n const ttsResponse = await axios(ttsRequest)\n const ttsMs = Date.now() - ttsStart\n const textLen = _.isString(text) ? text.length : 0\n debug(`TTS response ${ttsMs} ms (chars: ${textLen})`)\n\n if (!ttsResponse || !Buffer.isBuffer(ttsResponse.data)) {\n throw new Error(`TTS failed, response is: ${this._getAxiosShortenedOutput(ttsResponse && ttsResponse.data)}`)\n }\n const durationHeader = ttsResponse.headers && ttsResponse.headers['content-duration']\n return {\n buffer: ttsResponse.data,\n duration: durationHeader\n }\n }\n\n async _getTtsAudio (ttsRequest, text) {\n if (!ttsRequest) throw new Error('TTS request not configured')\n const cacheKey = this._getTtsCacheKey(ttsRequest)\n\n if (this._isTtsCacheEnabled()) {\n const cached = this.ttsCache.get(cacheKey)\n if (cached) {\n if (cached.state === 'ready') {\n this._touchTtsCache(cacheKey, cached)\n debug(`TTS cache hit (chars: ${_.isString(text) ? text.length : 0})`)\n return { buffer: cached.buffer, duration: cached.duration }\n }\n if (cached.state === 'pending') {\n return cached.promise\n }\n }\n }\n\n const fetchPromise = this._fetchTts(ttsRequest, text)\n .then(result => {\n if (this._isTtsCacheEnabled()) {\n this._setTtsCacheEntry(cacheKey, { state: 'ready', buffer: result.buffer, duration: result.duration })\n }\n return result\n })\n .catch(err => {\n this._deleteTtsCacheEntry(cacheKey)\n throw err\n })\n\n if (this._isTtsCacheEnabled()) {\n this._setTtsCacheEntry(cacheKey, { state: 'pending', promise: fetchPromise })\n }\n\n return fetchPromise\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_TTS_CACHE_ENABLE","VOIP_TTS_CACHE_SIZE","VOIP_TTS_PREFETCH_ENABLE","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","TTS_HTTP_AGENT","http","Agent","keepAlive","TTS_HTTPS_AGENT","https","BotiumConnectorVoip","constructor","queueBotSays","eventEmitter","caps","botMsgs","sentencesBuilding","sentencesFinal","sentenceBuilding","ttsCache","Map","ttsCacheEnabled","ttsCacheMaxEntries","ttsPrefetchEnabled","_lastBotSaysQueuedAt","_lastBotSaysText","Validate","Object","assign","axiosTtsParams","url","params","_getParams","method","timeout","headers","_getHeaders","httpAgent","httpsAgent","data","axios","_getAxiosUrl","status","_getAxiosShortenedOutput","Error","err","_getAxiosErrOutput","cacheSize","parseInt","_","isFinite","Start","stopCalled","fullRecord","end","connected","convoStep","clear","sendBotMsg","botMsg","Date","now","messageText","String","setTimeout","joinBotMsg","joinLastPrevMsg","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","_maybePrefetchTts","readyState","OPEN","joinLogicHook","_getJoinLogicHook","silenceMs","args","Math","max","sessionId","send","JSON","stringify","METHOD","silenceDurationMs","silence","msgCount","firstMsg","firstSttInfoReceived","silenceTimeout","wsOpened","sttHandling","isPsst","sttLegacy","sttUrl","isString","replaced","request","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_LEGACY","STT_CONFIG","stt_url","stt_params","stt_body","TTS_CONFIG","tts_url","tts_params","tts_body","parsedData","parse","parsedDataLog","cloneDeep","type","voipConfig","event","apiKey","_extractApiKey","_getBody","connectDuration","emit","category","metricName","transactions","_getIgnoreSilenceDurationAsserterLogicHook","toFixed","name","mimeType","base64","final","clearTimeout","prevData","isJoinMethod","toJoinTimeoutMs","ms","parsed","matched","joinTimeoutMs","confidenceThreshold","_getConfidenceScoreLogicHook","successfulConfidenceScore","_getConfidenceScore","forEach","botMsgsExpanded","get","UserSays","msg","attachments","duration","buttons","digits","payload","dtmfMatch","media","buffer","ttsRequest","_buildTtsRequest","ttsResult","_getTtsAudio","Buffer","isBuffer","parseFloat","b64Buffer","PESQ","b64_buffer","latencyMs","botText","substring","mediaUri","metadata","mm","parseBuffer","format","round","Stop","CLOSED","setInterval","_isTtsCacheEnabled","_touchTtsCache","cacheKey","entry","delete","set","_setTtsCacheEntry","_trimTtsCache","_deleteTtsCacheEntry","size","oldestKey","keys","next","value","_shouldPrefetchTtsText","text","trim","test","sender","responseType","_getTtsCacheKey","cacheKeyObj","_fetchTts","ttsStart","ttsResponse","ttsMs","textLen","durationHeader","cached","state","promise","fetchPromise","result","capParams","capBody","capHeaders","baseUrl","extUrl","substr","indexOf","truncate","response","body","logicHooks","find","lh","source","privJson","NBest","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 http = require('http')\nconst https = require('https')\nconst debug = require('debug')('botium-connector-voip')\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_TTS_CACHE_ENABLE: 'VOIP_TTS_CACHE_ENABLE',\n VOIP_TTS_CACHE_SIZE: 'VOIP_TTS_CACHE_SIZE',\n VOIP_TTS_PREFETCH_ENABLE: 'VOIP_TTS_PREFETCH_ENABLE',\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_TTS_CACHE_ENABLE: true,\n VOIP_TTS_CACHE_SIZE: 50,\n VOIP_TTS_PREFETCH_ENABLE: true,\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\nconst TTS_HTTP_AGENT = new http.Agent({ keepAlive: true })\nconst TTS_HTTPS_AGENT = new https.Agent({ keepAlive: true })\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 this.ttsCache = new Map()\n this.ttsCacheEnabled = false\n this.ttsCacheMaxEntries = 0\n this.ttsPrefetchEnabled = false\n\n // For debugging latency between incoming STT (bot says) and outgoing audio (sendAudio)\n this._lastBotSaysQueuedAt = null\n this._lastBotSaysText = null\n }\n\n async Validate () {\n debug('Validate called')\n this.caps = Object.assign({}, Defaults, this.caps)\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 httpAgent: TTS_HTTP_AGENT,\n httpsAgent: TTS_HTTPS_AGENT\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 const cacheSize = parseInt(this.caps[Capabilities.VOIP_TTS_CACHE_SIZE], 10)\n this.ttsCacheEnabled = !!this.caps[Capabilities.VOIP_TTS_CACHE_ENABLE]\n this.ttsCacheMaxEntries = _.isFinite(cacheSize) && cacheSize > 0 ? cacheSize : 0\n this.ttsPrefetchEnabled = !!this.caps[Capabilities.VOIP_TTS_PREFETCH_ENABLE]\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 this._lastBotSaysQueuedAt = null\n this._lastBotSaysText = null\n if (this.ttsCache) {\n this.ttsCache.clear()\n }\n\n const sendBotMsg = (botMsg) => {\n this._lastBotSaysQueuedAt = Date.now()\n this._lastBotSaysText = botMsg && botMsg.messageText ? String(botMsg.messageText) : null\n setTimeout(() => this.queueBotSays(botMsg), 0)\n }\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 const firstStart = _.get(botMsgs, '[0].sourceData.data.start', null)\n const lastEnd = _.get(botMsgs, `[${botMsgs.length - 1}].sourceData.data.end`, null)\n const prevEnd = _.get(joinLastPrevMsg, 'sourceData.data.end', null)\n // joinLastPrevMsg can be null (first joined message) OR incomplete (in case JOIN timeout fired before we got any final STT info).\n // In those cases, fall back to \"start-of-first-chunk\" semantics (same as previous behaviour for nil joinLastPrevMsg).\n if (_.isFinite(firstStart) && _.isFinite(lastEnd)) {\n botMsg.sourceData[0].silenceDuration = (_.isFinite(prevEnd) ? (firstStart - prevEnd) : firstStart)\n botMsg.sourceData[0].voiceDuration = lastEnd - firstStart\n } else {\n botMsg.sourceData[0].silenceDuration = _.isFinite(firstStart) ? firstStart : null\n botMsg.sourceData[0].voiceDuration = (_.isFinite(firstStart) && _.isFinite(lastEnd)) ? (lastEnd - firstStart) : null\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 workerUrl = this.caps[Capabilities.VOIP_USE_GLOBAL_VOIP_WORKER]\n ? process.env.BOTIUM_VOIP_WORKER_URL\n : this.caps[Capabilities.VOIP_WORKER_URL].replace('wss', 'https').replace('ws', 'http')\n const baseUrl = workerUrl.endsWith('/') ? workerUrl.slice(0, -1) : workerUrl\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: `${baseUrl}/initCall`\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 this._maybePrefetchTts(convoStep)\n // For PSST: send join silence duration per step to VOIP worker (controls PSST silence trigger)\n try {\n if (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'PSST' && this.ws && this.ws.readyState === WebSocket.OPEN) {\n const joinLogicHook = this._getJoinLogicHook(convoStep)\n let silenceMs = null\n if (joinLogicHook && joinLogicHook.args && joinLogicHook.args.length > 0) {\n silenceMs = parseInt(joinLogicHook.args[0], 10)\n }\n // Fallback to global timeout if no per-step hook is set\n if (!_.isFinite(silenceMs) || silenceMs <= 0) {\n silenceMs = parseInt(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT], 10)\n }\n // PSST: treat like JOIN, but subtract 500ms from timeout\n if (_.isFinite(silenceMs) && silenceMs > 0) {\n silenceMs = Math.max(0, silenceMs - 500)\n }\n if (_.isFinite(silenceMs) && silenceMs > 0 && this.sessionId) {\n debug(`PSST: sending silenceDurationMs=${silenceMs} for sessionId=${this.sessionId}`)\n this.ws.send(JSON.stringify({\n METHOD: 'setSttSilenceDuration',\n sessionId: this.sessionId,\n silenceDurationMs: silenceMs\n }))\n }\n }\n } catch (err) {\n debug(`Failed sending PSST silence duration to VOIP worker: ${err.message || err}`)\n }\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 sttHandling = this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING]\n const isPsst = sttHandling === 'PSST'\n const sttLegacy = true\n let sttUrl = this.caps[Capabilities.VOIP_STT_URL_STREAM]\n if (isPsst && _.isString(sttUrl)) {\n const replaced = sttUrl.replace('/api/sttstream/', '/api/stt/')\n if (replaced !== sttUrl) {\n sttUrl = replaced\n } else {\n debug(`PSST: Could not derive /api/stt url from ${sttUrl}, using as-is`)\n }\n }\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_LEGACY: sttLegacy,\n STT_CONFIG: {\n stt_url: sttUrl,\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 // Allow fullRecord delivery even if Stop() was already called.\n // Otherwise the recording can be dropped if the worker streams it late (common on hangup).\n if (this.stopCalled) {\n const allowedTypes = ['fullRecord', 'fullRecordStart', 'fullRecordChunk', 'fullRecordEnd', 'error']\n if (!parsedData || !parsedData.type || !allowedTypes.includes(parsedData.type)) {\n debug(`${this.sessionId} - Stop already called, ignoring incoming message`)\n return\n }\n }\n\n const parsedDataLog = _.cloneDeep(parsedData)\n // Sanitize all potential base64 fields for logging (don't dump huge buffers)\n const sanitizeBase64Fields = (obj, prefix = '') => {\n if (!obj || typeof obj !== 'object') return\n for (const key of Object.keys(obj)) {\n const val = obj[key]\n if (typeof val === 'string' && val.length > 500) {\n obj[key] = `<base64:${val.length}chars>`\n } else if (val && typeof val === 'object' && !Array.isArray(val)) {\n sanitizeBase64Fields(val, `${prefix}${key}.`)\n }\n }\n }\n sanitizeBase64Fields(parsedDataLog)\n\n debug(JSON.stringify(parsedDataLog, null, 2))\n\n const _extractFullRecordBase64 = (pd) => {\n if (!pd) return null\n // Different VOIP workers may put the payload in various fields - search all string fields\n // First try known field names\n const knownFields = [\n pd.fullRecord,\n pd.full_record,\n pd.data?.fullRecord,\n pd.data?.full_record,\n pd.data?.b64_buffer,\n pd.data?.base64,\n pd.data?.full_record_buffer,\n pd.data?.buffer,\n pd.buffer,\n pd.base64,\n pd.audio,\n pd.audioData,\n pd.data?.audio,\n pd.data?.audioData\n ]\n for (const val of knownFields) {\n if (typeof val === 'string' && val.length > 100) return val\n }\n // Fallback: find any large string field (likely base64)\n const findLargeString = (obj, depth = 0) => {\n if (!obj || typeof obj !== 'object' || depth > 3) return null\n for (const key of Object.keys(obj)) {\n const val = obj[key]\n if (typeof val === 'string' && val.length > 1000) {\n debug(`${this.sessionId} - Found base64 in field '${key}' (len=${val.length})`)\n return val\n }\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n const found = findLargeString(val, depth + 1)\n if (found) return found\n }\n }\n return null\n }\n return findLargeString(pd)\n }\n\n const emitFullRecordAttachment = (base64) => {\n if (!base64 || typeof base64 !== 'string' || base64.length === 0) {\n // Log available fields (length only) to help diagnose worker payload shape without dumping base64\n try {\n const candidates = {\n fullRecord: typeof parsedData?.fullRecord === 'string' ? parsedData.fullRecord.length : null,\n full_record: typeof parsedData?.full_record === 'string' ? parsedData.full_record.length : null,\n data_fullRecord: typeof parsedData?.data?.fullRecord === 'string' ? parsedData.data.fullRecord.length : null,\n data_full_record: typeof parsedData?.data?.full_record === 'string' ? parsedData.data.full_record.length : null,\n data_b64_buffer: typeof parsedData?.data?.b64_buffer === 'string' ? parsedData.data.b64_buffer.length : null,\n data_base64: typeof parsedData?.data?.base64 === 'string' ? parsedData.data.base64.length : null,\n data_full_record_buffer: typeof parsedData?.data?.full_record_buffer === 'string' ? parsedData.data.full_record_buffer.length : null,\n data_buffer: typeof parsedData?.data?.buffer === 'string' ? parsedData.data.buffer.length : null\n }\n debug(`${this.sessionId} - fullRecordEnd received but base64 is empty, skipping attachment emit. CandidateLengths=${JSON.stringify(candidates)}`)\n } catch (err) {\n debug(`${this.sessionId} - fullRecordEnd received but base64 is empty, skipping attachment emit (diag failed: ${err.message || err})`)\n }\n return\n }\n debug(`${this.sessionId} - Emitting MESSAGE_ATTACHMENT full_record.wav (base64Len=${base64.length}, stopCalled=${!!this.stopCalled})`)\n this.eventEmitter.emit('MESSAGE_ATTACHMENT', this.container, {\n name: 'full_record.wav',\n mimeType: 'audio/wav',\n base64,\n // Session context from capabilities for correlation\n sessionContext: {\n testSessionId: this.caps.VOIP_TEST_SESSION_ID || null,\n testSessionJobId: this.caps.VOIP_TEST_SESSION_JOB_ID || null\n }\n })\n }\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 // Full record streaming support:\n // - some VOIP workers send the recording in chunks and an end marker\n if (parsedData && parsedData.type === 'fullRecordStart') {\n this.fullRecord = ''\n }\n if (parsedData && parsedData.type === 'fullRecordChunk') {\n const chunk = _extractFullRecordBase64(parsedData)\n if (chunk) this.fullRecord = (this.fullRecord || '') + chunk\n }\n if (parsedData && parsedData.type === 'fullRecordEnd') {\n const tail = _extractFullRecordBase64(parsedData)\n if (tail) this.fullRecord = (this.fullRecord || '') + tail\n emitFullRecordAttachment(this.fullRecord || tail)\n this.end = true\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 // Non-chunked full record\n emitFullRecordAttachment(_extractFullRecordBase64(parsedData))\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 && this.prevData.data && !_.isNil(this.prevData.data.end)) {\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 sttHandling = this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING]\n const isPsst = sttHandling === 'PSST'\n const isJoinMethod = sttHandling === 'JOIN' || isPsst\n const toJoinTimeoutMs = (ms) => {\n const parsed = parseInt(ms, 10)\n if (!_.isFinite(parsed) || parsed <= 0) return null\n return isPsst ? Math.max(0, parsed - 500) : parsed\n }\n let matched = false\n if (!_.isNil(joinLogicHook) && isJoinMethod) {\n const joinTimeoutMs = toJoinTimeoutMs(joinLogicHook && joinLogicHook.args && joinLogicHook.args[0])\n if (_.isFinite(joinTimeoutMs) && joinTimeoutMs > 0 && silenceDuration > (joinTimeoutMs / 1000)) {\n matched = true\n }\n } else if (_.isNil(joinLogicHook) && isJoinMethod) {\n const joinTimeoutMs = toJoinTimeoutMs(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT])\n if (_.isFinite(joinTimeoutMs) && joinTimeoutMs > 0 && silenceDuration > (joinTimeoutMs / 1000)) {\n matched = true\n }\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 // ORIGINAL: emit final message immediately, unless join hooks are active.\n if (\n (this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING] === 'ORIGINAL' && (_.isNil(this._getJoinLogicHook(this.convoStep))))\n ) {\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 const start = _.get(parsedData, 'data.start', null)\n const prevEnd = _.get(this.prevData, 'data.end', null)\n sourceData.silenceDuration = (_.isFinite(start) && _.isFinite(prevEnd)) ? (start - prevEnd) : (_.isFinite(start) ? start : null)\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 const start = _.get(parsedData, 'data.start', null)\n const prevEnd = _.get(this.prevData, 'data.end', null)\n sourceData.silenceDuration = (_.isFinite(start) && _.isFinite(prevEnd)) ? (start - prevEnd) : (_.isFinite(start) ? start : null)\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] === 'PSST' || 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 const sttHandling = this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING]\n const isPsst = sttHandling === 'PSST'\n const toJoinTimeoutMs = (ms) => {\n const parsed = parseInt(ms, 10)\n if (!_.isFinite(parsed) || parsed <= 0) return null\n return isPsst ? Math.max(0, parsed - 500) : parsed\n }\n const joinLogicHook = this._getJoinLogicHook(this.convoStep)\n let joinTimeoutMs = toJoinTimeoutMs(_.get(joinLogicHook, 'args[0]'))\n if (!_.isFinite(joinTimeoutMs) || joinTimeoutMs <= 0) {\n joinTimeoutMs = toJoinTimeoutMs(this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING_TIMEOUT])\n }\n this.silenceTimeout = setTimeout(() => {\n if (this.botMsgs.length > 0) {\n debug('Silence Duration Timeout (JOIN/PSST):', joinTimeoutMs, '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 }, joinTimeoutMs || 0)\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 // Avoid logging large buffers/base64 (can break job logs and overwhelm stdout)\n try {\n const safeLog = {\n messageText: msg && msg.messageText ? String(msg.messageText).substring(0, 200) : undefined,\n buttons: msg && Array.isArray(msg.buttons) ? msg.buttons.length : 0,\n hasMedia: !!(msg && msg.media && msg.media.length > 0),\n mediaMimeType: msg && msg.media && msg.media[0] ? msg.media[0].mimeType : undefined,\n mediaSize: msg && msg.media && msg.media[0] && Buffer.isBuffer(msg.media[0].buffer) ? msg.media[0].buffer.length : undefined,\n attachments: msg && Array.isArray(msg.attachments) ? msg.attachments.map(a => ({\n name: a && (a.name || a.title),\n mimeType: a && a.mimeType,\n base64Len: a && a.base64 ? a.base64.length : 0\n })) : []\n }\n debug(safeLog)\n } catch (err) {\n debug(`UserSays: failed to build safe log: ${err.message || err}`)\n }\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 // Check for DTMF tag in messageText: <DTMF>1234</DTMF>\n const dtmfMatch = msg.messageText.match(/<DTMF>([^<]+)<\\/DTMF>/i)\n if (dtmfMatch && dtmfMatch[1]) {\n const digits = dtmfMatch[1]\n debug(`Sending DTMF from messageText: ${digits}`)\n const request = JSON.stringify({\n METHOD: 'sendDtmf',\n digits,\n sessionId: this.sessionId\n })\n this.ws.send(request)\n return resolve()\n }\n if (!this.axiosTtsParams) {\n if (!(msg.media && msg.media.length > 0 && msg.media[0].buffer)) {\n return reject(new Error('TTS not configured, only audio input supported'))\n }\n } else {\n const ttsRequest = this._buildTtsRequest(msg.messageText)\n if (!ttsRequest) return reject(new Error('TTS not configured, only audio input supported'))\n msg.sourceData = ttsRequest\n\n let ttsResult = null\n try {\n ttsResult = await this._getTtsAudio(ttsRequest, msg.messageText)\n } catch (err) {\n return 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 (ttsResult && Buffer.isBuffer(ttsResult.buffer)) {\n duration = parseFloat(ttsResult.duration) || 0\n const b64Buffer = ttsResult.buffer.toString('base64')\n const request = JSON.stringify({\n METHOD: 'sendAudio',\n PESQ: false,\n sessionId: this.sessionId,\n b64_buffer: b64Buffer\n })\n if (this._lastBotSaysQueuedAt) {\n const latencyMs = Date.now() - this._lastBotSaysQueuedAt\n const botText = this._lastBotSaysText ? this._lastBotSaysText.substring(0, 120) : '<unknown>'\n debug(`Latency (bot says -> sendAudio/TTS): ${latencyMs} ms (last bot: ${botText})`)\n }\n msg.attachments.push({\n name: 'tts.wav',\n mimeType: 'audio/wav',\n base64: b64Buffer\n })\n this.ws.send(request)\n } else {\n return reject(new Error('TTS failed, response is empty'))\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 if (this._lastBotSaysQueuedAt) {\n const latencyMs = Date.now() - this._lastBotSaysQueuedAt\n const botText = this._lastBotSaysText ? this._lastBotSaysText.substring(0, 120) : '<unknown>'\n debug(`Latency (bot says -> sendAudio/MEDIA): ${latencyMs} ms (last bot: ${botText})`)\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 this.stopCalled = true\n if (this.silenceTimeout) {\n clearTimeout(this.silenceTimeout)\n this.silenceTimeout = null\n }\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 const stopTimeout = setTimeout(resolve, 100000)\n this._stopWaitInterval = setInterval(() => {\n if (this.end) {\n clearTimeout(stopTimeout)\n clearInterval(this._stopWaitInterval)\n this._stopWaitInterval = null\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 _isTtsCacheEnabled () {\n return this.ttsCacheEnabled && this.ttsCacheMaxEntries > 0\n }\n\n _touchTtsCache (cacheKey, entry) {\n if (!this._isTtsCacheEnabled()) return\n this.ttsCache.delete(cacheKey)\n this.ttsCache.set(cacheKey, entry)\n }\n\n _setTtsCacheEntry (cacheKey, entry) {\n if (!this._isTtsCacheEnabled()) return\n this.ttsCache.set(cacheKey, entry)\n this._trimTtsCache()\n }\n\n _deleteTtsCacheEntry (cacheKey) {\n if (this.ttsCache) {\n this.ttsCache.delete(cacheKey)\n }\n }\n\n _trimTtsCache () {\n if (!this._isTtsCacheEnabled()) return\n while (this.ttsCache.size > this.ttsCacheMaxEntries) {\n const oldestKey = this.ttsCache.keys().next().value\n this.ttsCache.delete(oldestKey)\n }\n }\n\n _shouldPrefetchTtsText (text) {\n if (!_.isString(text)) return false\n if (!text.trim()) return false\n return !/\\$[A-Za-z]\\w*/.test(text)\n }\n\n _maybePrefetchTts (convoStep) {\n if (!this.ttsPrefetchEnabled || !this._isTtsCacheEnabled()) return\n if (!convoStep || convoStep.sender !== 'me') return\n if (!this._shouldPrefetchTtsText(convoStep.messageText)) return\n const ttsRequest = this._buildTtsRequest(convoStep.messageText)\n if (!ttsRequest) return\n this._getTtsAudio(ttsRequest, convoStep.messageText).catch(err => {\n debug(`TTS prefetch failed - ${this._getAxiosErrOutput(err)}`)\n })\n }\n\n _buildTtsRequest (text) {\n if (!this.axiosTtsParams) return null\n return {\n ...this.axiosTtsParams,\n params: {\n ...(this.axiosTtsParams.params || {}),\n text\n },\n data: this._getBody(Capabilities.VOIP_TTS_BODY),\n responseType: 'arraybuffer'\n }\n }\n\n _getTtsCacheKey (ttsRequest) {\n const cacheKeyObj = {\n url: ttsRequest.url,\n method: ttsRequest.method,\n params: ttsRequest.params,\n data: ttsRequest.data\n }\n try {\n return JSON.stringify(cacheKeyObj)\n } catch (err) {\n return `${ttsRequest.url}|${ttsRequest.method}|${_.get(ttsRequest, 'params.text', '')}`\n }\n }\n\n async _fetchTts (ttsRequest, text) {\n const ttsStart = Date.now()\n const ttsResponse = await axios(ttsRequest)\n const ttsMs = Date.now() - ttsStart\n const textLen = _.isString(text) ? text.length : 0\n debug(`TTS response ${ttsMs} ms (chars: ${textLen})`)\n\n if (!ttsResponse || !Buffer.isBuffer(ttsResponse.data)) {\n throw new Error(`TTS failed, response is: ${this._getAxiosShortenedOutput(ttsResponse && ttsResponse.data)}`)\n }\n const durationHeader = ttsResponse.headers && ttsResponse.headers['content-duration']\n return {\n buffer: ttsResponse.data,\n duration: durationHeader\n }\n }\n\n async _getTtsAudio (ttsRequest, text) {\n if (!ttsRequest) throw new Error('TTS request not configured')\n const cacheKey = this._getTtsCacheKey(ttsRequest)\n\n if (this._isTtsCacheEnabled()) {\n const cached = this.ttsCache.get(cacheKey)\n if (cached) {\n if (cached.state === 'ready') {\n this._touchTtsCache(cacheKey, cached)\n debug(`TTS cache hit (chars: ${_.isString(text) ? text.length : 0})`)\n return { buffer: cached.buffer, duration: cached.duration }\n }\n if (cached.state === 'pending') {\n return cached.promise\n }\n }\n }\n\n const fetchPromise = this._fetchTts(ttsRequest, text)\n .then(result => {\n if (this._isTtsCacheEnabled()) {\n this._setTtsCacheEntry(cacheKey, { state: 'ready', buffer: result.buffer, duration: result.duration })\n }\n return result\n })\n .catch(err => {\n this._deleteTtsCacheEntry(cacheKey)\n throw err\n })\n\n if (this._isTtsCacheEnabled()) {\n this._setTtsCacheEntry(cacheKey, { state: 'pending', promise: fetchPromise })\n }\n\n return fetchPromise\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_TTS_CACHE_ENABLE","VOIP_TTS_CACHE_SIZE","VOIP_TTS_PREFETCH_ENABLE","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","TTS_HTTP_AGENT","http","Agent","keepAlive","TTS_HTTPS_AGENT","https","BotiumConnectorVoip","constructor","queueBotSays","eventEmitter","caps","botMsgs","sentencesBuilding","sentencesFinal","sentenceBuilding","ttsCache","Map","ttsCacheEnabled","ttsCacheMaxEntries","ttsPrefetchEnabled","_lastBotSaysQueuedAt","_lastBotSaysText","Validate","Object","assign","axiosTtsParams","url","params","_getParams","method","timeout","headers","_getHeaders","httpAgent","httpsAgent","data","axios","_getAxiosUrl","status","_getAxiosShortenedOutput","Error","err","_getAxiosErrOutput","cacheSize","parseInt","_","isFinite","Start","stopCalled","fullRecord","end","connected","convoStep","clear","sendBotMsg","botMsg","Date","now","messageText","String","setTimeout","joinBotMsg","joinLastPrevMsg","map","m","join","sourceData","firstStart","get","lastEnd","length","prevEnd","silenceDuration","voiceDuration","splitBotMsgs","splitSentences","s","match","RegExp","botMsgsFinal","sentences","isNil","push","botMsgCount","sentence","omit","connect","retryIndex","workerUrl","process","env","BOTIUM_VOIP_WORKER_URL","replace","baseUrl","endsWith","slice","res","API_KEY","BOTIUM_VOIP_WORKER_APIKEY","message","Promise","resolve","reject","wsEndpoint","port","ws","WebSocket","Cookie","on","then","catch","isArray","isEmpty","split","container","_maybePrefetchTts","readyState","OPEN","joinLogicHook","_getJoinLogicHook","silenceMs","args","Math","max","sessionId","send","JSON","stringify","METHOD","silenceDurationMs","silence","msgCount","firstMsg","firstSttInfoReceived","silenceTimeout","wsOpened","sttHandling","isPsst","sttLegacy","sttUrl","isString","replaced","request","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_LEGACY","STT_CONFIG","stt_url","stt_params","stt_body","TTS_CONFIG","tts_url","tts_params","tts_body","parsedData","parse","allowedTypes","type","includes","parsedDataLog","cloneDeep","sanitizeBase64Fields","obj","prefix","key","keys","val","Array","_extractFullRecordBase64","pd","knownFields","full_record","b64_buffer","base64","full_record_buffer","buffer","audio","audioData","findLargeString","depth","found","emitFullRecordAttachment","candidates","data_fullRecord","data_full_record","data_b64_buffer","data_base64","data_full_record_buffer","data_buffer","emit","name","mimeType","sessionContext","testSessionId","VOIP_TEST_SESSION_ID","testSessionJobId","VOIP_TEST_SESSION_JOB_ID","voipConfig","event","apiKey","_extractApiKey","_getBody","connectDuration","category","metricName","transactions","chunk","tail","_getIgnoreSilenceDurationAsserterLogicHook","toFixed","final","clearTimeout","start","prevData","isJoinMethod","toJoinTimeoutMs","ms","parsed","matched","joinTimeoutMs","confidenceThreshold","_getConfidenceScoreLogicHook","successfulConfidenceScore","_getConfidenceScore","forEach","botMsgsExpanded","UserSays","msg","safeLog","substring","undefined","buttons","hasMedia","media","mediaMimeType","mediaSize","Buffer","isBuffer","attachments","a","title","base64Len","duration","digits","payload","dtmfMatch","ttsRequest","_buildTtsRequest","ttsResult","_getTtsAudio","parseFloat","b64Buffer","toString","PESQ","latencyMs","botText","mediaUri","metadata","mm","parseBuffer","format","round","Stop","CLOSED","stopTimeout","_stopWaitInterval","setInterval","clearInterval","_isTtsCacheEnabled","_touchTtsCache","cacheKey","entry","delete","set","_setTtsCacheEntry","_trimTtsCache","_deleteTtsCacheEntry","size","oldestKey","next","value","_shouldPrefetchTtsText","text","trim","test","sender","responseType","_getTtsCacheKey","cacheKeyObj","_fetchTts","ttsStart","ttsResponse","ttsMs","textLen","durationHeader","cached","state","promise","fetchPromise","result","capParams","capBody","capHeaders","extUrl","substr","indexOf","truncate","response","body","logicHooks","find","lh","source","privJson","NBest","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.20",
3
+ "version": "0.0.21",
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",