Untitled
unknown
javascript
2 years ago
5.6 kB
10
Indexable
// Steps to build callflow object
// PUT /endpoints/:id endpoint
exports.buildCallfowTasks = async () => {
// example of data which would come in as param
const data = {
"name": "new us",
"timezone": "Europe/Paris",
"welcome_message_enabled": true,
"welcome_message": "Welcome and thank you for calling!",
"welcome_message_file": null,
"voicemail_message_enabled": true,
"voicemail_message": "Please leave your message after the tone.",
"voicemail_message_file": null,
"timeout": 45,
"call_recording_enabled": true,
"call_recording_message": "Your call is being recorded for quality assurance purposes.",
"call_recording_message_file": null,
"voice_type": "Google.Ava",
call_forwarding_enabled: true,
call_forwarding_phone_number: "+43123456",
call_forwarding_timeout: 10,
call_sequential_ringing_enabled: true,
call_sequential_ringing_clients: [],
call_sequential_ringing_timeout: 10,
call_simultanous_ringing_enabled: true,
call_simultanous_ringing_clients: [],
};
const tasks = [];
// welcome message
if (data.welcome_message_enabled) {
let welcomeTask = {};
if (data.welcome_message) {
welcomeTask = {
id: 'welcome.text',
text: data.welcome_message,
type: 'say',
voice: data.voice,
};
tasks.push(welcomeTask);
} else if (data.welcome_message_file) {
// do magic with file to get link of the file + remove old file
const welcomeAudioFileUrl = '';
welcomeTask = {
id: 'welcome.audio',
url: welcomeAudioFileUrl,
type: 'play',
};
tasks.push(welcomeTask);
}
}
// call recording message
if (data.call_recording_enabled) {
if (data.call_recording_message) {
const callRecordingMessageTask = {
id: 'callRecording.text',
text: data.call_recording_message,
type: 'say',
voice: data.voice,
};
tasks.push(callRecordingMessageTask);
} else if (data.call_recording_message_file) {
// do magic with file to get link of the file + remove old file
const recordingAudioFileUrl = '';
const callRecordingMessageTask = {
id: 'callRecording.audio',
url: recordingAudioFileUrl,
type: 'play',
};
tasks.push(callRecordingMessageTask);
}
}
// call dial
// only not present when immediate call forwarding
if (!(data.call_forwarding_enabled && data.call_forwarding_timeout === 0)) {
if (!data.call_sequential_ringing_enabled) {
const dialTask = {
id: 'dial',
type: 'dial',
};
if (data.call_recording_enabled) {
dialTask.record = true;
}
if (data.call_simultanous_ringing_enabled) {
dialTask.clients = data.call_simultanous_ringing_clients;
}
// if forwarding enabled, set timeout
if (data.call_forwarding_enabled) {
dialTask.timeout = data.call_forwarding_timeout;
// if not forwarding but voicemail set
} else if (data.voicemail_message_enabled) {
dialTask.timeout = data.timeout;
}
tasks.push(dialTask);
// voicemail timeout is not used in sequential ringing
} else {
for (const client of data.call_sequential_ringing_clients) {
const clientDialTask = {
id: `dial-${client}`,
type: 'dial',
clients: [client],
timeoute: data.call_sequential_ringing_timeout,
};
if (data.call_recording_enabled) {
clientDialTask.record = true;
}
tasks.push(clientDialTask);
}
}
}
// call forward
if (data.call_forwarding_enabled) {
const forwardTask = {
id: 'forward',
type: 'dial',
numbers: [data.call_forwarding_phone_number],
};
if (data.call_recording_enabled) {
forwardTask.record = true;
}
if (data.voicemail_message_enabled) {
forwardTask.timeout = data.timeout;
}
}
// voicemail message:
if (data.voicemail_message_enabled) {
if (data.voicemail_message) {
const voicemailMessageTask = {
id: 'voicemail.text',
text: data.voicemail_message,
type: 'say',
voice: data.voice,
};
tasks.push(voicemailMessageTask);
} else if (data.voicemail_message_file) {
// do magic with file to get link of the file + remove old file
const voicemailMessageAudioFileUrl = '';
const voicemailMessageTask = {
id: 'voicemail.audio',
url: voicemailMessageAudioFileUrl,
type: 'play',
};
tasks.push(voicemailMessageTask);
}
}
// voicemail recording:
if (data.voicemail_message_enabled) {
const voicemailRecordingTask = {
id: 'voicemail.record',
type: 'record',
};
tasks.push(voicemailRecordingTask);
}
};Editor is loading...
Leave a Comment