@cognigy/rest-api-client
Version:
Cognigy REST-Client
245 lines • 13.6 kB
JavaScript
;
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