diff --git a/lib/middleware.js b/lib/middleware.js index edcb8a89..61dc3d56 100644 --- a/lib/middleware.js +++ b/lib/middleware.js @@ -28,7 +28,7 @@ module.exports = function(srf, logger) { writeAlerts, AlertType } = srf.locals; - const {lookupAccountDetails} = dbUtils(logger, srf); + const {lookupAccountDetails, lookupGoogleCustomVoice} = dbUtils(logger, srf); async function initLocals(req, res, next) { const callId = req.get('Call-ID'); @@ -299,6 +299,21 @@ module.exports = function(srf, logger) { else app2.notifier = {request: () => {}, close: () => {}}; } + // Resolve application.speech_synthesis_voice if it's custom voice + if (app2.speech_synthesis_vendor === 'google' && app2.speech_synthesis_voice.startsWith('custom_')) { + const arr = /custom_(.*)/.exec(app2.speech_synthesis_voice); + if (arr) { + const google_custom_voice_sid = arr[1]; + const [custom_voice] = await lookupGoogleCustomVoice(google_custom_voice_sid); + if (custom_voice) { + app2.speech_synthesis_voice = { + reportedUsage: custom_voice.reported_usage, + model: custom_voice.model + }; + } + } + } + req.locals.application = app2; // eslint-disable-next-line no-unused-vars diff --git a/lib/utils/db-utils.js b/lib/utils/db-utils.js index 2ca608b5..a1396ce0 100644 --- a/lib/utils/db-utils.js +++ b/lib/utils/db-utils.js @@ -27,6 +27,9 @@ WHERE pn.account_sid IS NULL AND pn.service_provider_sid = (SELECT service_provider_sid from accounts where account_sid = ?) AND pn.number = ?`; +const sqlQueryGoogleCustomVoices = `SELECT * +FROM google_custom_voices +WHERE google_custom_voice_sid = ?`; const speechMapper = (cred) => { const {credential, ...obj} = cred; @@ -161,10 +164,22 @@ module.exports = (logger, srf) => { } }; + const lookupGoogleCustomVoice = async(google_custom_voice_sid) => { + const pp = pool.promise(); + try { + const [r] = await pp.query(sqlQueryGoogleCustomVoices, [google_custom_voice_sid]); + return r; + + } catch (err) { + logger.error({err}, `lookupGoogleCustomVoices: Error ${google_custom_voice_sid}`); + } + }; + return { lookupAccountDetails, updateSpeechCredentialLastUsed, lookupCarrier, - lookupCarrierByPhoneNumber + lookupCarrierByPhoneNumber, + lookupGoogleCustomVoice }; }; diff --git a/package-lock.json b/package-lock.json index fc3c3e9a..a8dc5432 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@jambonz/http-health-check": "^0.0.1", "@jambonz/mw-registrar": "^0.2.4", "@jambonz/realtimedb-helpers": "^0.8.6", - "@jambonz/speech-utils": "^0.0.22", + "@jambonz/speech-utils": "^0.0.24", "@jambonz/stats-collector": "^0.1.9", "@jambonz/time-series": "^0.2.8", "@jambonz/verb-specifications": "^0.0.44", @@ -3145,9 +3145,9 @@ } }, "node_modules/@jambonz/speech-utils": { - "version": "0.0.22", - "resolved": "https://registry.npmjs.org/@jambonz/speech-utils/-/speech-utils-0.0.22.tgz", - "integrity": "sha512-+gFWDTNUbf3RwG9a7PInJom0YKiGgW8i2m6WFRjJuSk1StiY4BKWr+sE6JL9SBHz9UrjyLb8P2tfJKwoo/JKSA==", + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/@jambonz/speech-utils/-/speech-utils-0.0.24.tgz", + "integrity": "sha512-FpywxkjohC7wBBS9Xz9pRYXyO9D/tt2xgHFseWSoe0kO/6DbFudoLAI5uGB7AyUbTeGeKBiVZDJSNadsM4Iv4A==", "dependencies": { "@aws-sdk/client-polly": "^3.359.0", "@google-cloud/text-to-speech": "^4.2.1", @@ -13239,9 +13239,9 @@ } }, "@jambonz/speech-utils": { - "version": "0.0.22", - "resolved": "https://registry.npmjs.org/@jambonz/speech-utils/-/speech-utils-0.0.22.tgz", - "integrity": "sha512-+gFWDTNUbf3RwG9a7PInJom0YKiGgW8i2m6WFRjJuSk1StiY4BKWr+sE6JL9SBHz9UrjyLb8P2tfJKwoo/JKSA==", + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/@jambonz/speech-utils/-/speech-utils-0.0.24.tgz", + "integrity": "sha512-FpywxkjohC7wBBS9Xz9pRYXyO9D/tt2xgHFseWSoe0kO/6DbFudoLAI5uGB7AyUbTeGeKBiVZDJSNadsM4Iv4A==", "requires": { "@aws-sdk/client-polly": "^3.359.0", "@google-cloud/text-to-speech": "^4.2.1", diff --git a/package.json b/package.json index 951fe9b2..5a4df70b 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "@jambonz/http-health-check": "^0.0.1", "@jambonz/mw-registrar": "^0.2.4", "@jambonz/realtimedb-helpers": "^0.8.6", - "@jambonz/speech-utils": "^0.0.22", + "@jambonz/speech-utils": "^0.0.24", "@jambonz/stats-collector": "^0.1.9", "@jambonz/time-series": "^0.2.8", "@jambonz/verb-specifications": "^0.0.44",