@cognigy/rest-api-client
Version:
Cognigy REST-Client
605 lines • 22.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.transferNode = void 0;
/** Custom Modules */
const createNodeDescriptor_1 = require("../../../createNodeDescriptor");
/** Helper Modules */
const transfer_mapper_1 = require("../../voice/mappers/transfer.mapper");
const design_1 = require("../utils/design");
const helper_1 = require("../utils/helper");
const customHeaderDefaultValue = "X-Custom-Header";
exports.transferNode = (0, createNodeDescriptor_1.createNodeDescriptor)({
type: "transfer",
defaultLabel: "Transfer",
preview: {
key: "transferTarget",
type: "text",
},
appearance: {
color: design_1.nodeColor,
},
tags: ["voice"],
fields: [
{
key: "transferType",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__TRANSFER_TYPE__LABEL",
type: "select",
params: {
options: [
{
label: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__TRANSFER_TYPE__OPTIONS__REFER__LABEL",
value: "refer",
},
{
label: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__TRANSFER_TYPE__OPTIONS__DIAL__LABEL",
value: "dial",
},
],
},
defaultValue: "refer",
description: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__TRANSFER_TYPE__DESCRIPTION",
},
{
key: "transferTarget",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__TRANSFER_TARGET__LABEL",
type: "cognigyText",
params: {
required: true,
},
description: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__TRANSFER_TARGET__DESCRIPTION",
defaultValue: "+49123456789",
},
{
key: "referredBy",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__REFERRED_BY__LABEL",
type: "cognigyText",
description: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__REFERRED_BY__DESCRIPTION",
defaultValue: "",
condition: {
key: "transferType",
value: "refer"
}
},
{
key: "transferReason",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__TRANSFER_REASON__LABEL",
type: "cognigyText",
params: {
required: true,
},
description: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__TRANSFER_REASON__DESCRIPTION",
defaultValue: "Bot initiated a transfer.",
},
{
key: "anchorMedia",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__ANCHOR_MEDIA__LABEL",
type: "toggle",
description: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__ANCHOR_MEDIA__DESCRIPTION",
defaultValue: false,
condition: {
key: "transferType",
value: "dial"
}
},
{
key: "useTransferSipHeaders",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__USE_TRANSFER_SIP_HEADERS__LABEL",
type: "toggle",
description: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__USE_TRANSFER_SIP_HEADERS__DESCRIPTION",
defaultValue: false,
},
{
key: "transferSipHeaders",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__TRANSFER_SIP_HEADERS__LABEL",
type: "json",
description: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__TRANSFER_SIP_HEADERS__DESCRIPTION",
defaultValue: {
[customHeaderDefaultValue]: "YourValue",
},
condition: {
key: "useTransferSipHeaders",
value: true,
},
},
/* Dial specific */
{
key: "dialCallerId",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__DIAL_CALLER_ID__LABEL",
type: "text",
description: "UI__NODE_EDITOR__TRANSFER__DIAL_CALLER_ID__DESCRIPTION",
condition: {
key: "transferType",
value: "dial"
}
},
{
key: "dialMusic",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__DIAL_MUSIC__LABEL",
type: "text",
description: "UI__NODE_EDITOR__TRANSFER__FIELDS__DIAL_MUSIC__DESCRIPTION",
condition: {
key: "transferType",
value: "dial"
}
},
{
key: "dialTranscriptionWebhook",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__DIAL_TRANSCRIPTION_WEBHOOK__LABEL",
type: "cognigyText",
description: "UI__NODE_EDITOR__TRANSFER__FIELDS__DIAL_TRANSCRIPTION_WEBHOOK__DESCRIPTION",
condition: {
key: "transferType",
value: "dial"
}
},
{
key: "sttLabel",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__DIAL_TRANSCRIPTION_STT_LABEL__LABEL",
type: "text",
description: "UI__NODE_EDITOR__TRANSFER__FIELDS__DIAL_TRANSCRIPTION_STT_LABEL__DESCRIPTION",
condition: {
key: "transferType",
value: "dial"
}
},
{
key: "dialTimeout",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__TIMEOUT__LABEL",
type: "number",
description: "UI__NODE_EDITOR__TRANSFER__FIELDS__TIMEOUT__DESCRIPTION",
condition: {
key: "transferType",
value: "dial"
},
defaultValue: 60,
params: {
min: 0,
max: 300
}
},
{
key: "enableTimeLimit",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__ENABLE_DURATION_LIMIT__LABEL",
type: "toggle",
description: "UI__NODE_EDITOR__TRANSFER__FIELDS__ENABLE_DURATION_LIMIT__DESCRIPTION",
condition: {
key: "transferType",
value: "dial"
},
defaultValue: false,
},
{
key: "timeLimit",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__DURATION_LIMIT__LABEL",
type: "number",
description: "UI__NODE_EDITOR__TRANSFER__FIELDS__DURATION_LIMIT__DESCRIPTION",
condition: {
and: [
{
key: "transferType",
value: "dial"
},
{
key: "enableTimeLimit",
value: true
},
]
},
defaultValue: 600,
params: {
max: 12000
}
},
{
key: "agentAssistEnabled",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__AGENT_ASSIST_ENABLED__LABEL",
type: "toggle",
description: "UI__NODE_EDITOR__TRANSFER__FIELDS__AGENT_ASSIST_ENABLED__DESCRIPTION",
defaultValue: false,
condition: {
key: "transferType",
value: "dial"
}
},
{
key: "agentAssistHeadersKey",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__AGENT_ASSIST_HEADERS_KEY__LABEL",
type: "cognigyText",
description: "UI__NODE_EDITOR__TRANSFER__FIELDS__AGENT_ASSIST_HEADERS_KEY__DESCRIPTION",
defaultValue: customHeaderDefaultValue,
condition: {
key: "agentAssistEnabled",
value: true
}
},
{
key: "amdEnabled",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__AMD_ENABLED__LABEL",
type: "toggle",
description: "UI__NODE_EDITOR__TRANSFER__FIELDS__AMD_ENABLED__DESCRIPTION",
defaultValue: false,
condition: {
key: "transferType",
value: "dial"
}
},
{
key: "amdRedirectOnMachineDetected",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__AMD_REDIRECT_ON_MACHINE_DETECTED__LABEL",
type: "toggle",
description: "UI__NODE_EDITOR__TRANSFER__FIELDS__AMD_REDIRECT_ON_MACHINE_DETECTED__DESCRIPTION",
defaultValue: false,
condition: {
key: "amdEnabled",
value: true
}
},
{
key: "amdRedirectText",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__AMD_REDIRECT_TEXT__LABEL",
type: "cognigyText",
description: "UI__NODE_EDITOR__TRANSFER__FIELDS__AMD_REDIRECT_TEXT__DESCRIPTION",
defaultValue: "",
condition: {
and: [
{
key: "amdEnabled",
value: true
},
{
key: "amdRedirectOnMachineDetected",
value: true
}
]
}
},
{
key: "recognitionChannel",
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__RECOGNITION_CHANNEL__LABEL",
type: "select",
params: {
options: [
{
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__RECOGNITION_CHANNEL__OPTIONS__CALLER__LABEL",
value: 1
},
{
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__RECOGNITION_CHANNEL__OPTIONS__CALLED__LABEL",
value: 2
},
{
label: "UI__NODE_EDITOR__TRANSFER__FIELDS__RECOGNITION_CHANNEL__OPTIONS__BOTH__LABEL",
value: 0
}
]
},
defaultValue: 0,
description: "UI__NODE_EDITOR__TRANSFER__FIELDS__RECOGNITION_CHANNEL__DESCRIPTION",
condition: {
key: "transferType",
value: "dial"
}
},
{
key: "sttVendor",
type: "sttSelect",
label: "_unused_",
description: "_unused_",
defaultValue: "",
params: {
languageKey: "config.sttLanguage",
modelKey: "config.sttDeepgramModel"
},
condition: {
key: "transferType",
value: "dial"
}
},
{
key: "sttDeepgramModel",
type: "sttSelect",
label: "_unused_",
description: "_unused_",
defaultValue: "nova-2",
condition: {
key: "sttVendor",
value: "deepgram"
}
},
{
key: "sttLanguage",
type: "sttSelect",
label: "_unused_",
description: "_unused_",
defaultValue: "",
},
{
key: "sttDisablePunctuation",
type: "toggle",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__SET_SESSION_CONFIG__STT_DISABLE_PUNCTUATION__LABEL",
description: "UI__NODE_EDITOR__VOICEGATEWAY2__SET_SESSION_CONFIG__STT_DISABLE_PUNCTUATION__DESCRIPTION",
defaultValue: false,
condition: {
or: [
{
key: "sttVendor",
value: "google"
},
{
key: "sttVendor",
value: "deepgram"
}
]
}
},
{
key: "deepgramEndpointing",
type: "toggle",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__SET_SESSION_CONFIG__DEEPGRAM_ENDPOINTING__LABEL",
description: "UI__NODE_EDITOR__VOICEGATEWAY2__SET_SESSION_CONFIG__DEEPGRAM_ENDPOINTING__DESCRIPTION",
defaultValue: false,
condition: {
key: "sttVendor",
value: "deepgram"
}
},
{
key: "deepgramEndpointingValue",
type: "number",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__SET_SESSION_CONFIG__DEEPGRAM_ENDPOINTING_TIME__LABEL",
description: "UI__NODE_EDITOR__VOICEGATEWAY2__SET_SESSION_CONFIG__DEEPGRAM_ENDPOINTING_TIME__DESCRIPTION",
defaultValue: 1000,
params: {
min: 10,
max: 1000
},
condition: {
and: [
{
key: "sttVendor",
value: "deepgram"
},
{
key: "deepgramEndpointing",
value: true
},
]
}
},
{
key: "deepgramSmartFormatting",
type: "toggle",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__SET_SESSION_CONFIG__DEEPGRAM_SMART_FORMATTING__LABEL",
description: "UI__NODE_EDITOR__VOICEGATEWAY2__SET_SESSION_CONFIG__DEEPGRAM_SMART_FORMATTING__DESCRIPTION",
defaultValue: false,
condition: {
key: "sttVendor",
value: "deepgram"
}
},
{
key: "googleModel",
type: "select",
label: "UI__NODE_EDITOR__GOOGLE_MODEL__LABEL",
description: "UI__NODE_EDITOR__GOOGLE_MODEL__DESCRIPTION",
defaultValue: "latest_short",
condition: {
key: "sttVendor",
value: "google"
},
params: {
options: [
{
label: "UI__NODE_EDITOR__GOOGLE_MODEL__OPTIONS__LATEST_SHORT__LABEL",
value: "latest_short"
},
{
label: "UI__NODE_EDITOR__GOOGLE_MODEL__OPTIONS__LATEST_LONG__LABEL",
value: "latest_long"
},
{
label: "UI__NODE_EDITOR__GOOGLE_MODEL__OPTIONS__COMMAND_AND_SEARCH__LABEL",
value: "command_and_search"
},
{
label: "UI__NODE_EDITOR__GOOGLE_MODEL__OPTIONS__PHONE_CALL__LABEL",
value: "phone_call"
},
{
label: "UI__NODE_EDITOR__GOOGLE_MODEL__OPTIONS__VIDEO__LABEL",
value: "video"
},
{
label: "UI__NODE_EDITOR__GOOGLE_MODEL__OPTIONS__MEDICAL_DICTATION__LABEL",
value: "medical_dictation"
},
{
label: "UI__NODE_EDITOR__GOOGLE_MODEL__OPTIONS__MEDICAL_CONVERSATION__LABEL",
value: "medical_conversation"
},
{
label: "UI__NODE_EDITOR__GOOGLE_MODEL__OPTIONS__DEFAULT__LABEL",
value: "default"
}
]
}
}
],
sections: [
{
key: "transcribe",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__TRANSCRIBE__LABEL",
defaultCollapsed: true,
fields: [
"sttVendor",
"sttLabel",
"sttDisablePunctuation",
"deepgramEndpointing",
"deepgramEndpointingValue",
"deepgramSmartFormatting",
"googleModel",
"dialTranscriptionWebhook",
"recognitionChannel"
],
condition: {
key: "transferType",
value: "dial"
}
},
{
key: "amd",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__AMD__LABEL",
defaultCollapsed: true,
fields: ["amdEnabled", "amdRedirectOnMachineDetected", "amdRedirectText"],
condition: {
key: "transferType",
value: "dial"
}
},
{
key: "advanced",
label: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__FIELDS__ADVANCED__LABEL",
defaultCollapsed: true,
fields: [
"referredBy",
"anchorMedia",
"useTransferSipHeaders",
"transferSipHeaders",
"enableAnsweringMachineDetection"
]
}
],
form: [
{
type: "field",
key: "transferType"
},
{
type: "field",
key: "transferReason"
},
{
type: "field",
key: "transferTarget"
},
{
type: "field",
key: "dialCallerId"
},
{
type: "field",
key: "dialMusic"
},
{
type: "field",
key: "dialTimeout"
},
{
type: "field",
key: "enableTimeLimit"
},
{
type: "field",
key: "timeLimit"
},
{
type: "field",
key: "agentAssistEnabled"
},
{
type: "field",
key: "agentAssistHeadersKey"
},
{
type: "section",
key: "transcribe"
},
{
type: "section",
key: "amd"
},
{
type: "section",
key: "advanced"
}
],
summary: "UI__NODE_EDITOR__VOICEGATEWAY2__TRANSFER__SUMMARY",
function: async ({ cognigy, config, }) => {
const { api, input } = cognigy;
const { transferType, transferTarget, referredBy, anchorMedia, useTransferSipHeaders, transferSipHeaders = {}, transferReason, dialMusic, dialTranscriptionWebhook, dialCallerId, recognitionChannel, sttVendor, sttLanguage, sttDisablePunctuation, dialTimeout, enableTimeLimit, timeLimit, amdEnabled, amdRedirectOnMachineDetected, amdRedirectText, sttLabel, googleModel, sttDeepgramModel, deepgramEndpointing, deepgramEndpointingValue, deepgramSmartFormatting, agentAssistEnabled, agentAssistHeadersKey = customHeaderDefaultValue } = config;
const transferParams = {
transferType,
transferReason,
transferTarget,
referredBy,
useTransferSipHeaders,
transferSipHeaders,
dialMusic,
dialCallerId,
dialTranscriptionWebhook,
amdEnabled,
amdRedirectOnMachineDetected,
amdRedirectText,
dialTimeout,
timeLimit,
sttLabel,
};
try {
if (input.channel === "adminconsole") {
let textWarningAdminChannel = "Transferring a call is not supported in the Interaction Panel, please use the VoiceGateway endpoint.";
if (agentAssistEnabled && !dialTranscriptionWebhook) {
textWarningAdminChannel = `${textWarningAdminChannel + "\n"} Copilot is enabled but no transcription webhook is configured. Please configure a transcription webhook in the Transfer node.`;
}
await api.say(textWarningAdminChannel, null);
return;
}
if (!enableTimeLimit) {
delete transferParams.timeLimit;
}
if (agentAssistEnabled && dialTranscriptionWebhook) {
try {
const agentAssistConfigId = api.getAgentAssistConfigId();
const params = {
sessionId: input.sessionId,
userId: input.userId,
webhookUrl: dialTranscriptionWebhook,
agentAssistConfigId: agentAssistConfigId,
};
if ((!params.agentAssistConfigId || params.agentAssistConfigId === 'none')) {
delete params.agentAssistConfigId;
}
const uui = (0, helper_1.buildUUIValue)(params);
if (!(~dialTranscriptionWebhook.indexOf("userId") && ~dialTranscriptionWebhook.indexOf("sessionId"))) {
transferParams.dialTranscriptionWebhook = `${dialTranscriptionWebhook}?userId=${input.userId}&sessionId=${input.sessionId}`;
}
api.addToInput("UUIValue", uui);
/* As soon as Copilot enabled, we enable SIP Headers and remove the X-Custom-Header */
if (!useTransferSipHeaders) {
transferParams.useTransferSipHeaders = true;
delete transferSipHeaders["X-Custom-Header"];
}
transferSipHeaders[agentAssistHeadersKey] = uui;
}
catch (error) {
api.log("error", "Error on Copilot configuration: " + error.message);
}
}
if (useTransferSipHeaders &&
transferSipHeaders &&
!(0, helper_1.isValidJSON)(transferSipHeaders)) {
delete transferParams.transferSipHeaders;
transferParams.useTransferSipHeaders = false;
api.log("error", "Invalid JSON in Transfer SIP Headers");
}
const payload = transfer_mapper_1.transfer.handleInput("voiceGateway2", transferParams, false, recognitionChannel, sttVendor, sttLanguage, googleModel, sttDeepgramModel, sttDisablePunctuation, deepgramEndpointing, deepgramEndpointingValue, deepgramSmartFormatting, anchorMedia);
await api.say(null, {
_cognigy: payload,
});
api.logDebugMessage(`${transferType} UI__DEBUG_MODE__TRANSFER__MESSAGE ${transferTarget}`);
}
catch (error) {
throw new Error(`Error on Transfer node type: ${transferType}. Error message: ${error.message}`);
}
},
});
//# sourceMappingURL=transfer.js.map