diff --git a/lib/tasks/say.js b/lib/tasks/say.js index 8523b1144..e10bd6f48 100644 --- a/lib/tasks/say.js +++ b/lib/tasks/say.js @@ -68,6 +68,12 @@ class TaskSay extends Task { const salt = cs.callSid; let credentials = cs.getSpeechCredentials(vendor, 'tts', label); + + // override Synthesizer options from config verb + if (cs.synthesizer && cs.synthesizer.options) { + this.options = cs.synthesizer.options; + } + /* parse Nuance voices into name and model */ let model; if (vendor === 'nuance' && voice) { diff --git a/lib/tasks/transcribe.js b/lib/tasks/transcribe.js index c6a387c4c..754dbc908 100644 --- a/lib/tasks/transcribe.js +++ b/lib/tasks/transcribe.js @@ -89,13 +89,13 @@ class TaskTranscribe extends SttTask { stopTranscription = true; this.ep.stopTranscription({ vendor: this.vendor, - bugname: this.bugname + bugname: this.ep.transcribe_bugname }) .catch((err) => this.logger.info(err, 'Error TaskTranscribe:kill')); } if (this.separateRecognitionPerChannel && this.ep2 && this.ep2.connected) { stopTranscription = true; - this.ep2.stopTranscription({vendor: this.vendor}) + this.ep2.stopTranscription({vendor: this.vendor, bugname: this.ep2.transcribe_bugname}) .catch((err) => this.logger.info(err, 'Error TaskTranscribe:kill')); } @@ -132,6 +132,7 @@ class TaskTranscribe extends SttTask { async _setSpeechHandlers(cs, ep, channel) { if (this[`_speechHandlersSet_${channel}`]) return; this[`_speechHandlersSet_${channel}`] = true; + let bugname; /* some special deepgram logic */ if (this.vendor === 'deepgram') { @@ -141,7 +142,7 @@ class TaskTranscribe extends SttTask { const opts = this.setChannelVarsForStt(this, this.sttCredentials, this.data.recognizer); switch (this.vendor) { case 'google': - this.bugname = `${this.bugname_prefix}google_transcribe`; + bugname = `${this.bugname_prefix}google_transcribe_${channel}`; this.addCustomEventListener(ep, GoogleTranscriptionEvents.Transcription, this._onTranscription.bind(this, cs, ep, channel)); this.addCustomEventListener(ep, GoogleTranscriptionEvents.NoAudioDetected, @@ -152,7 +153,7 @@ class TaskTranscribe extends SttTask { case 'aws': case 'polly': - this.bugname = `${this.bugname_prefix}aws_transcribe`; + bugname = `${this.bugname_prefix}aws_transcribe_${channel}`; this.addCustomEventListener(ep, AwsTranscriptionEvents.Transcription, this._onTranscription.bind(this, cs, ep, channel)); this.addCustomEventListener(ep, AwsTranscriptionEvents.NoAudioDetected, @@ -161,19 +162,19 @@ class TaskTranscribe extends SttTask { this._onMaxDurationExceeded.bind(this, cs, ep, channel)); break; case 'microsoft': - this.bugname = `${this.bugname_prefix}azure_transcribe`; + bugname = `${this.bugname_prefix}azure_transcribe_${channel}`; this.addCustomEventListener(ep, AzureTranscriptionEvents.Transcription, this._onTranscription.bind(this, cs, ep, channel)); this.addCustomEventListener(ep, AzureTranscriptionEvents.NoSpeechDetected, this._onNoAudio.bind(this, cs, ep, channel)); break; case 'nuance': - this.bugname = `${this.bugname_prefix}nuance_transcribe`; + bugname = `${this.bugname_prefix}nuance_transcribe_${channel}`; this.addCustomEventListener(ep, NuanceTranscriptionEvents.Transcription, this._onTranscription.bind(this, cs, ep, channel)); break; case 'deepgram': - this.bugname = `${this.bugname_prefix}deepgram_transcribe`; + bugname = `${this.bugname_prefix}deepgram_transcribe_${channel}`; this.addCustomEventListener(ep, DeepgramTranscriptionEvents.Transcription, this._onTranscription.bind(this, cs, ep, channel)); this.addCustomEventListener(ep, DeepgramTranscriptionEvents.Connect, @@ -186,12 +187,12 @@ class TaskTranscribe extends SttTask { break; case 'soniox': - this.bugname = `${this.bugname_prefix}soniox_transcribe`; + bugname = `${this.bugname_prefix}soniox_transcribe_${channel}`; this.addCustomEventListener(ep, SonioxTranscriptionEvents.Transcription, this._onTranscription.bind(this, cs, ep, channel)); break; case 'cobalt': - this.bugname = `${this.bugname_prefix}cobalt_transcribe`; + bugname = `${this.bugname_prefix}cobalt_transcribe_${channel}`; this.addCustomEventListener(ep, CobaltTranscriptionEvents.Transcription, this._onTranscription.bind(this, cs, ep, channel)); @@ -221,7 +222,7 @@ class TaskTranscribe extends SttTask { break; case 'ibm': - this.bugname = `${this.bugname_prefix}ibm_transcribe`; + bugname = `${this.bugname_prefix}ibm_transcribe_${channel}`; this.addCustomEventListener(ep, IbmTranscriptionEvents.Transcription, this._onTranscription.bind(this, cs, ep, channel)); this.addCustomEventListener(ep, IbmTranscriptionEvents.Connect, @@ -231,13 +232,13 @@ class TaskTranscribe extends SttTask { break; case 'nvidia': - this.bugname = `${this.bugname_prefix}nvidia_transcribe`; + bugname = `${this.bugname_prefix}nvidia_transcribe_${channel}`; this.addCustomEventListener(ep, NvidiaTranscriptionEvents.Transcription, this._onTranscription.bind(this, cs, ep, channel)); break; case 'assemblyai': - this.bugname = `${this.bugname_prefix}assemblyai_transcribe`; + bugname = `${this.bugname_prefix}assemblyai_transcribe_${channel}`; this.addCustomEventListener(ep, AssemblyAiTranscriptionEvents.Transcription, this._onTranscription.bind(this, cs, ep, channel)); this.addCustomEventListener(ep, @@ -249,7 +250,7 @@ class TaskTranscribe extends SttTask { default: if (this.vendor.startsWith('custom:')) { - this.bugname = `${this.bugname_prefix}${this.vendor}_transcribe`; + bugname = `${this.bugname_prefix}${this.vendor}_transcribe_${channel}`; this.addCustomEventListener(ep, JambonzTranscriptionEvents.Transcription, this._onTranscription.bind(this, cs, ep, channel)); this.addCustomEventListener(ep, JambonzTranscriptionEvents.Connect, this._onVendorConnect.bind(this, cs, ep)); @@ -263,7 +264,8 @@ class TaskTranscribe extends SttTask { throw new Error(`Invalid vendor ${this.vendor}`); } } - + // save dedicated bugname for each endpoint + ep.transcribe_bugname = bugname; /* common handler for all stt engine errors */ this.addCustomEventListener(ep, JambonzTranscriptionEvents.Error, this._onJambonzError.bind(this, cs, ep)); await ep.set(opts) @@ -281,13 +283,13 @@ class TaskTranscribe extends SttTask { async _transcribe(ep) { this.logger.debug( - `TaskTranscribe:_transcribe - starting transcription vendor ${this.vendor} bugname ${this.bugname}`); + `TaskTranscribe:_transcribe - starting transcription vendor ${this.vendor} bugname ${ep.transcribe_bugname}`); await ep.startTranscription({ vendor: this.vendor, interim: this.interim ? true : false, locale: this.language, channels: /*this.separateRecognitionPerChannel ? 2 : */ 1, - bugname: this.bugname, + bugname: ep.transcribe_bugname, hostport: this.hostport }); } @@ -295,7 +297,7 @@ class TaskTranscribe extends SttTask { async _onTranscription(cs, ep, channel, evt, fsEvent) { // make sure this is not a transcript from answering machine detection const bugname = fsEvent.getHeader('media-bugname'); - if (bugname && this.bugname !== bugname) return; + if (bugname && ep.transcribe_bugname !== bugname) return; if (this.vendor === 'ibm' && evt?.state === 'listening') return; @@ -443,7 +445,7 @@ class TaskTranscribe extends SttTask { if (this.isHandledByPrimaryProvider && this.fallbackVendor) { _ep.stopTranscription({ vendor: this.vendor, - bugname: this.bugname + bugname: _ep.transcribe_bugname }) .catch((err) => this.logger.error({err}, `Error stopping transcription for primary vendor ${this.vendor}`)); const {updateSpeechCredentialLastUsed} = require('../utils/db-utils')(this.logger, cs.srf);