UNPKG

@cognigy/rest-api-client

Version:

Cognigy REST-Client

245 lines 13.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.prepareTransferParams = exports.transfer = void 0; /* Custom modules */ const helper_1 = require("../../../descriptors/voicegateway2/utils/helper"); const helper_2 = require("../utils/helper"); exports.transfer = { handleInput(endpointType, params, isGenericNode = false, recognitionChannel, sttVendor, sttLanguage, googleModel, sttModel, sttDisablePunctuation, deepgramEndpointing, deepgramEndpointingValue, deepgramSmartFormatting, deepgramfluxEndpointing, deepgramfluxEndOfTurnThreshold, deepgramfluxEndOfTurnTimeoutMs, speechmaticsEndpointing, speechmaticsEndpointingValue, openaiEndpointing, openaiEndpointingValue, niceEndpointing, niceEndpointingValue, mediaPath, anchorMedia) { try { switch (endpointType) { case "bandwidth": case "audioCodes": if (isGenericNode && params.transferSipHeaders) { let headers = []; for (const [key, value] of Object.entries(params.transferSipHeaders)) { headers.push({ name: key, value }); } ; params.transferSipHeaders = headers; } return this.handleAudioCodesInput((0, exports.prepareTransferParams)(params), endpointType); case "voiceGateway2": default: return this.handleVGInput((0, exports.prepareTransferParams)(params), recognitionChannel, sttVendor, sttLanguage, googleModel, sttModel, sttDisablePunctuation, deepgramEndpointing, deepgramEndpointingValue, deepgramSmartFormatting, deepgramfluxEndpointing, deepgramfluxEndOfTurnThreshold, deepgramfluxEndOfTurnTimeoutMs, speechmaticsEndpointing, speechmaticsEndpointingValue, openaiEndpointing, openaiEndpointingValue, niceEndpointing, niceEndpointingValue, mediaPath, anchorMedia); } } catch (error) { throw Error(error.message); } }, handleVGInput(transferParam, recognitionChannel, sttVendor, sttLanguage, googleModel, sttModel, sttDisablePunctuation, deepgramEndpointing, deepgramEndpointingValue, deepgramSmartFormatting, deepgramfluxEndpointing, deepgramfluxEndOfTurnThreshold, deepgramfluxEndOfTurnTimeoutMs, speechmaticsEndpointing, speechmaticsEndpointingValue, openaiEndpointing, openaiEndpointingValue, niceEndpointing, niceEndpointingValue, mediaPath, anchorMedia) { var _a; const { transferType, transferTarget, transferReason, referredBy, useTransferSipHeaders, transferSipHeaders, dialMusic, dialTranscriptionWebhook, dialCallerId, amdEnabled, amdRedirectOnMachineDetected, amdRedirectText, dialTimeout, timeLimit, sttLabel } = transferParam; const payload = { _voiceGateway2: { json: {} } }; let headers = { "X-Reason": transferReason, }; if (useTransferSipHeaders && typeof transferSipHeaders === "object") { headers = Object.assign(Object.assign({}, headers), transferSipHeaders); } switch (transferType) { case "dial": const dialVerb = { actionHook: "dial", headers, target: [], timeout: dialTimeout !== null && dialTimeout !== void 0 ? dialTimeout : 60 }; if (timeLimit && timeLimit > 0) { dialVerb.timeLimit = timeLimit; } if (process.env.FEATURE_DISABLE_VG_MEDIA_PATH === "true") { if (typeof anchorMedia === "boolean") { dialVerb.anchorMedia = anchorMedia; } } else { if (mediaPath) { dialVerb.mediaPath = mediaPath; } else if (typeof anchorMedia === "boolean") { dialVerb.mediaPath = anchorMedia ? "fullMedia" : "partialMedia"; } } if (amdEnabled) { dialVerb.amd = { actionHook: "amd" }; dialVerb.amdConfig = { amdEnabled, amdRedirectOnMachineDetected, amdRedirectText, }; } const phoneTarget = { type: "phone", number: (0, helper_1.cleanTarget)(transferTarget, false), }; const sipTarget = { type: "sip", sipUri: (0, helper_1.cleanTarget)(transferTarget, false), }; /* By default we set the target to phone */ dialVerb.target = [phoneTarget]; if (process.env.FEATURE_DISABLE_VG_MEDIA_PATH === "true") { delete dialVerb.mediaPath; } /* If targets includes an @ we set the target to sip */ if (transferTarget === null || transferTarget === void 0 ? void 0 : transferTarget.includes("@")) { dialVerb.target = [sipTarget]; } const transcribeVerb = {}; const recognizer = {}; if (dialTranscriptionWebhook === null || dialTranscriptionWebhook === void 0 ? void 0 : dialTranscriptionWebhook.length) { if (!(0, helper_2.isValidUrl)(dialTranscriptionWebhook)) { throw new Error(`Transcription webhook URL is invalid ${dialTranscriptionWebhook}`); } transcribeVerb.transcriptionHook = dialTranscriptionWebhook; switch (recognitionChannel) { case 0: recognizer.separateRecognitionPerChannel = true; break; case 1: recognizer.separateRecognitionPerChannel = false; break; case 2: recognizer.separateRecognitionPerChannel = true; transcribeVerb.channel = 2; break; } if (sttVendor !== 'none') { recognizer.vendor = sttVendor; recognizer.language = sttLanguage; recognizer.punctuation = !sttDisablePunctuation; if (googleModel && recognizer.vendor === 'google') { recognizer.model = googleModel; } if (recognizer.vendor === 'deepgram') { recognizer.model = sttModel; recognizer.deepgramOptions = { model: sttModel, punctuate: !sttDisablePunctuation, endpointing: deepgramEndpointing ? deepgramEndpointingValue : false, smartFormatting: deepgramSmartFormatting !== null && deepgramSmartFormatting !== void 0 ? deepgramSmartFormatting : false }; } if (recognizer.vendor === 'deepgramflux') { recognizer.deepgramfluxOptions = { endpointing: deepgramfluxEndpointing || true, endOfTurnThreshold: deepgramfluxEndOfTurnThreshold !== null && deepgramfluxEndOfTurnThreshold !== void 0 ? deepgramfluxEndOfTurnThreshold : 0.7, endOfTurnTimeoutMs: deepgramfluxEndOfTurnTimeoutMs !== null && deepgramfluxEndOfTurnTimeoutMs !== void 0 ? deepgramfluxEndOfTurnTimeoutMs : 5000 }; } if (recognizer.vendor === 'speechmatics') { recognizer.speechmaticsOptions = { transcription_config: {}, }; if (speechmaticsEndpointing) { recognizer.speechmaticsOptions.endpointing = speechmaticsEndpointingValue !== null && speechmaticsEndpointingValue !== void 0 ? speechmaticsEndpointingValue : 500; } } if (recognizer.vendor === 'openai') { recognizer.openaiOptions = Object.assign({}, ((_a = recognizer.openaiOptions) !== null && _a !== void 0 ? _a : {})); if (openaiEndpointing) { recognizer.openaiOptions.endpointing = openaiEndpointingValue !== null && openaiEndpointingValue !== void 0 ? openaiEndpointingValue : 500; } } if (recognizer.vendor === 'nice') { recognizer.niceOptions = {}; if (niceEndpointing) { recognizer.niceOptions.endpointing = niceEndpointingValue !== null && niceEndpointingValue !== void 0 ? niceEndpointingValue : 250; } } if (sttLabel) { recognizer.label = sttLabel; } } } if (Object.keys(transcribeVerb).length > 0) { dialVerb.transcribe = transcribeVerb; if (Object.keys(recognizer).length > 0) { transcribeVerb.recognizer = recognizer; } } if (dialMusic === null || dialMusic === void 0 ? void 0 : dialMusic.length) { if (!(0, helper_2.isValidUrl)(dialMusic)) { throw new Error(`Audio file URL is invalid ${dialMusic}`); } dialVerb.dialMusic = dialMusic; } if (dialCallerId === null || dialCallerId === void 0 ? void 0 : dialCallerId.length) { if (!(0, helper_2.isValidPhoneNumber)(dialCallerId)) { throw new Error(`Caller ID must be a valid phone number ${dialCallerId}`); } dialVerb.callerId = dialCallerId; } payload._voiceGateway2.json["dial"] = dialVerb; break; case "refer": mediaPath = undefined; default: const referVerb = { "referTo": (0, helper_1.cleanTarget)(transferTarget, false), "actionHook": 'refer', headers }; if (referredBy) { referVerb["referredBy"] = referredBy; } payload._voiceGateway2.json["sip:refer"] = referVerb; break; } return payload; }, handleAudioCodesInput(transferParam, endpointType = "audioCodes") { const { transferReason, transferTarget, useTransferSipHeaders, transferSipHeaders, transferNotifications, transferNotificationsHangupMS, transferReferredByURL, referredBy } = transferParam; const activities = { "type": "event", "name": "transfer", "activityParams": { "transferTarget": (0, helper_1.cleanTarget)(transferTarget, true), "handoverReason": transferReason, } }; if (transferReferredByURL) { activities.activityParams["transferReferredByURL"] = transferReferredByURL; } ; if (referredBy) { activities.activityParams["transferReferredByURL"] = referredBy; } ; if (useTransferSipHeaders) { activities.activityParams["transferSipHeaders"] = transferSipHeaders; } ; if (transferNotifications) { activities.activityParams["transferNotifications"] = transferNotifications; activities.activityParams["transferNotificationsHangupMS"] = transferNotificationsHangupMS; } ; const contentKey = endpointType === "bandwidth" ? "_bandwidth" : "_voiceGateway"; const payload = { [contentKey]: { json: { activities: [activities] }, }, }; return payload; } }; const prepareTransferParams = (transferParam) => { const { transferReason, dialMusic, dialTranscriptionWebhook, referredBy } = transferParam; return Object.assign(Object.assign({}, transferParam), { transferReason: transferReason === null || transferReason === void 0 ? void 0 : transferReason.trim(), dialMusic: dialMusic === null || dialMusic === void 0 ? void 0 : dialMusic.trim(), dialTranscriptionWebhook: dialTranscriptionWebhook === null || dialTranscriptionWebhook === void 0 ? void 0 : dialTranscriptionWebhook.trim(), referredBy: referredBy === null || referredBy === void 0 ? void 0 : referredBy.trim() }); }; exports.prepareTransferParams = prepareTransferParams; //# sourceMappingURL=transfer.mapper.js.map