botium-connector-voip 0.0.21 → 0.0.22

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 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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"}
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\n// Logging policy: info = rare, business-relevant lifecycle events (always visible).\n// debug = high-frequency diagnostics (DEBUG=botium-connector-voip). warn = degraded but continuing.\n// error = abort/failure. No secrets in info; STT text only as length or truncated in info.\n\nconst _info = (event, data) => {\n const parts = Object.entries({ event, ...data })\n .filter(([, v]) => v != null && v !== '')\n .map(([k, v]) => `${k}=${typeof v === 'string' && v.length > 80 ? `\"${v.substring(0, 77)}...\"` : JSON.stringify(v)}`)\n console.info(`[botium-connector-voip] ${parts.join(' ')}`)\n}\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 VOIP_USER_INPUT_PREFER_VOICE: 'VOIP_USER_INPUT_PREFER_VOICE'\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 VOIP_USER_INPUT_PREFER_VOICE: true\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 let httpInitRetries = 0\n const connectHttp = 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 httpInitRetries = retryIndex + 1\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 connectHttp(retryIndex + 1)\n }\n }\n await connectHttp()\n if (httpInitRetries > 0) {\n _info('connected_after_retries', { phase: 'initCall', retries: httpInitRetries })\n }\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 connectWs = (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(retryIndex)\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(() => connectWs(retryIndex + 1).then(resolve).catch(reject), this.caps[Capabilities.VOIP_WEBSOCKET_CONNECT_TIMEOUT])\n })\n })\n }\n connectWs().then((wsRetries) => {\n if (wsRetries > 0) {\n _info('connected_after_retries', { phase: 'websocket', retries: wsRetries })\n }\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.sttPartialCount = 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 _info('callinfo_initialized', {\n sessionId: this.sessionId,\n sttHandling: this.caps[Capabilities.VOIP_STT_MESSAGE_HANDLING]\n })\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 _info('callinfo_connected', { sessionId: this.sessionId })\n resolve()\n }\n\n if (parsedData && parsedData.type === 'callinfo' && parsedData.status === 'disconnected') {\n _info('callinfo_disconnected', {\n sessionId: this.sessionId,\n connectDurationSec: parsedData.connectDuration || null,\n sttPartialCount: this.sttPartialCount\n })\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 const base64Len = (this.fullRecord || tail || '').length\n emitFullRecordAttachment(this.fullRecord || tail)\n _info('recording_attached', { sessionId: this.sessionId, source: 'fullRecordEnd', base64Len })\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 const base64 = _extractFullRecordBase64(parsedData)\n emitFullRecordAttachment(base64)\n _info('recording_attached', { sessionId: this.sessionId, source: 'fullRecord', base64Len: (base64 || '').length })\n this.end = true\n }\n\n if (parsedData && parsedData.data && parsedData.data.final === false) {\n this.sttPartialCount++\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 const msgText = parsedData.data.message || ''\n const msgLen = typeof msgText === 'string' ? msgText.length : 0\n const msgPreview = typeof msgText === 'string' ? msgText.trim().substring(0, 80) : ''\n debug(`Message: ${parsedData.data.message} / Confidence Score: ${this._getConfidenceScore(parsedData)} (Threshold: ${confidenceThreshold})`)\n _info('stt_final', {\n sessionId: this.sessionId,\n message: msgPreview,\n messageLength: msgLen,\n confidence: this._getConfidenceScore(parsedData),\n threshold: confidenceThreshold,\n accepted: successfulConfidenceScore\n })\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 const hasText = !!(msg && msg.messageText)\n const hasVoiceMedia = !!(msg && msg.media && msg.media.length > 0 && msg.media[0].buffer)\n const hasDtmf = !!(msg && msg.buttons && msg.buttons.length > 0)\n const dtmfMatch = msg && msg.messageText && msg.messageText.match(/<DTMF>([^<]+)<\\/DTMF>/i)\n const inputType = hasDtmf || dtmfMatch ? 'dtmf' : (hasText && hasVoiceMedia ? 'mixed' : hasText ? 'text' : hasVoiceMedia ? 'media' : 'unknown')\n const msgPreview = hasText && msg.messageText ? String(msg.messageText).trim().substring(0, 80) : ''\n _info('user_says', {\n sessionId: this.sessionId,\n inputType,\n message: msgPreview || undefined,\n messageLength: hasText && msg.messageText ? msg.messageText.length : undefined,\n mediaSize: hasVoiceMedia && msg.media[0] && Buffer.isBuffer(msg.media[0].buffer) ? msg.media[0].buffer.length : undefined\n })\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 const preferVoiceCapRaw = this.caps[Capabilities.VOIP_USER_INPUT_PREFER_VOICE]\n const preferVoice = !!preferVoiceCapRaw\n const skipTtsForMixedInput = preferVoice && hasText && hasVoiceMedia\n debug(`UserSays routing: hasText=${hasText} hasVoiceMedia=${hasVoiceMedia} preferVoice=${preferVoice} preferVoiceRaw=${JSON.stringify(preferVoiceCapRaw)} skipTtsForMixedInput=${skipTtsForMixedInput}`)\n\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 (!skipTtsForMixedInput) {\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 debug('UserSays routing: executing TTS branch')\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 } else {\n debug('UserSays routing: skipping TTS for mixed input because VOIP_USER_INPUT_PREFER_VOICE is enabled')\n }\n }\n if (msg && msg.media && msg.media.length > 0 && msg.media[0].buffer) {\n debug('UserSays routing: executing MEDIA branch')\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 name: 'VOIP_USER_INPUT_PREFER_VOICE',\n label: 'Prefer voice media when both text and voice present',\n type: 'boolean',\n required: false,\n advanced: 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","_info","event","data","parts","Object","entries","filter","v","map","k","length","substring","JSON","stringify","console","info","join","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","VOIP_USER_INPUT_PREFER_VOICE","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","assign","axiosTtsParams","url","params","_getParams","method","timeout","headers","_getHeaders","httpAgent","httpsAgent","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","m","sourceData","firstStart","get","lastEnd","prevEnd","silenceDuration","voiceDuration","splitBotMsgs","splitSentences","s","match","RegExp","botMsgsFinal","sentences","isNil","push","botMsgCount","sentence","omit","httpInitRetries","connectHttp","retryIndex","workerUrl","process","env","BOTIUM_VOIP_WORKER_URL","replace","baseUrl","endsWith","slice","res","API_KEY","BOTIUM_VOIP_WORKER_APIKEY","message","Promise","resolve","phase","retries","reject","wsEndpoint","port","connectWs","ws","WebSocket","Cookie","on","then","catch","wsRetries","isArray","isEmpty","split","container","_maybePrefetchTts","readyState","OPEN","joinLogicHook","_getJoinLogicHook","silenceMs","args","Math","max","sessionId","send","METHOD","silenceDurationMs","silence","msgCount","sttPartialCount","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","connectDurationSec","connectDuration","apiKey","_extractApiKey","_getBody","category","metricName","transactions","chunk","tail","base64Len","source","_getIgnoreSilenceDurationAsserterLogicHook","toFixed","final","clearTimeout","start","prevData","isJoinMethod","toJoinTimeoutMs","ms","parsed","matched","joinTimeoutMs","confidenceThreshold","_getConfidenceScoreLogicHook","successfulConfidenceScore","_getConfidenceScore","msgText","msgLen","msgPreview","trim","messageLength","confidence","threshold","accepted","forEach","botMsgsExpanded","UserSays","msg","hasText","hasVoiceMedia","media","hasDtmf","buttons","dtmfMatch","inputType","undefined","mediaSize","Buffer","isBuffer","safeLog","hasMedia","mediaMimeType","attachments","a","title","duration","preferVoiceCapRaw","preferVoice","skipTtsForMixedInput","digits","payload","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","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","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","advanced","PluginLogicHooks","VOIP_IGNORE_SILENCE_DURATION","VOIP_JOIN_SILENCE_DURATION","VOIP_CONFIDENCE_THRESHOLD"],"mappings":"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"}
package/index.js CHANGED
@@ -25,6 +25,13 @@ module.exports = {
25
25
  label: 'Speech Synthesis Profile',
26
26
  type: 'speechsynthesisprofile',
27
27
  required: true
28
+ },
29
+ {
30
+ name: 'VOIP_USER_INPUT_PREFER_VOICE',
31
+ label: 'Prefer voice media when both text and voice present',
32
+ type: 'boolean',
33
+ required: false,
34
+ advanced: true
28
35
  }
29
36
  ]
30
37
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "botium-connector-voip",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
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",