Существует большое количество причин, по которым вам может понадобиться облачная АТС, а не традиционная АТС в офисе. Облачная АТС более дешевая, гибкая и ее легче масштабировать. При этом не будет уступать по качеству традиционной АТС. В этой статье мы расскажем вам про создание облачной АТС на платформе Voximplant.
Как это работает на Voximplant
Работа облачной АТС Voximplant включает в себя несколько обязательных пунктов.
Сначала платформа получает входящий звонок из Телефонной Сети Общего Пользования(ТФОП) или от софтфона. Далее согласно правилу маршрутизации звонок идет в определенный сценарий в зависимости от набранного номера.
Сценарий определяет, куда звонок пойдет дальше: , исходящий звонок в ТФОП, внутреннему пользователю с помощью добавочного номера или локальный звонок внутри облачной АТС.
Вам понадобится
- Верифицированный аккаунт Voximplant, который можно создать здесь;
- Приложение Voximplant со сценарием и правилом;
- Телефонный номер.
Как это сделать
Создаем приложение
После регистрации аккаунта Voximplant создайте приложение для сценария. Для этого в меню перейдите в раздел «Приложения» и нажмите кнопку «Создать приложение».
Заполняем данные приложения
Покупаем номер телефона
Voximplant предлагает три категории номеров: городской, мобильный или номер из категории «8 800».
Для покупки номера перейдите в раздел «Номера» и нажмите кнопку «Купить номер». Интерфейс предложит выбрать категорию номера и регион. После чего вы сможете выбрать подходящий номер из списка.
После покупки номера его необходимо привязать к приложению. Переходим во вкладку «Приложения» и заходим в наше приложение. Открываем раздел «Номера», нажимаем на «Доступные» и Прикрепить» напротив купленного номера.
Переходим в созданное приложение и создаем сценарий обработки вызовов. Сценарий – это код на JavaScript, который описывает логику прохождения звонка. Базовый сценарий для работы вашей облачной АТС можно посмотреть на вкладке «Пример кода».
require(Modules.IVR); // Подключаем модуль IVR//Задаем глобальные переменые
let inboundCall;
let outboundCall;
let myNumber = ""; //В кавычках необходимо указать ваш арендованный номер
let userNumber;//IVR ожидает ввода добавочного
const extState = new IVRState('extension', {
type: 'inputfixed',
inputLength: 3,
prompt: {
say: 'Здравствуйте! Вы позвонили в Вокс Имплант. Введите, пожалуйста, добавочный номер сотрудника или оставайтесь на линии для соединения с секретарем',
lang: VoiceList.Yandex.ru_RU_oksana
}
}, (data) => {
// Добавочный был введен
userNumber = data
Logger.write (`Соединяю с пользователем ${userNumber}`)
inboundCall.say(`Перевожу ваш звонок на добавочный номер ${userNumber}` , { "language":VoiceList.Yandex.ru_RU_oksana });
inboundCall.addEventListener(CallEvents.PlaybackFinished, handleFwdPlaybackFinished);
}, (data) => {
// Добавочный не был введен
inboundCall.say(`Перевожу ваш звонок на секретаря` , { "language":VoiceList.Yandex.ru_RU_oksana });
inboundCall.addEventListener(CallEvents.PlaybackFinished, handleFwdToReceptionPlaybackFinished);
}); // Звонок пользователю по введеному добавочному
function handleFwdPlaybackFinished(e) {
inboundCall.removeEventListener(CallEvents.PlaybackFinished, handleFwdPlaybackFinished);
outboundCall = VoxEngine.callUser(userNumber, inboundCall.callerid());
outboundCall.addEventListener(CallEvents.Connected, (e) => {
VoxEngine.sendMediaBetween(e.call, inboundCall);
});
outboundCall.addEventListener(CallEvents.Failed, VoxEngine.terminate);
outboundCall.addEventListener(CallEvents.Disconnected, VoxEngine.terminate);
};//Звонок секретарю
function handleFwdToReceptionPlaybackFinished(e) {
inboundCall.removeEventListener(CallEvents.PlaybackFinished, handleFwdToReceptionPlaybackFinished);
outboundCall = VoxEngine.callUser("101", inboundCall.callerid());
outboundCall.addEventListener(CallEvents.Connected, (e) => {
VoxEngine.sendMediaBetween(e.call, inboundCall);
});
outboundCall.addEventListener(CallEvents.Failed, VoxEngine.terminate);
outboundCall.addEventListener(CallEvents.Disconnected, VoxEngine.terminate);
}; // Обработчик события CallAlerting
VoxEngine.addEventListener(AppEvents.CallAlerting, (e) => {
// Если входящий звонок поступил из pstn
if (e.headers["VI-Client-Type"] == "pstn"){
inboundCall = e.call;
inboundCall.addEventListener(CallEvents.Connected, handleCallConnected);
inboundCall.addEventListener(CallEvents.Disconnected, handleCallDisconnected);
inboundCall.answer(); // answer the call
//Исходящие от пользователей
} else {
if (e.destination.length > 3){ // Звонок в пстн если пользователь набрал номер длинее 3х символов
let call2 = VoxEngine.callPSTN(e.destination,myNumber);
VoxEngine.easyProcess(e.call, call2);
} else {
let call3 = VoxEngine.callUser(e.destination,e.callerid); //Локальный звонок если пользователь набрал номер короче 3 символов
VoxEngine.easyProcess(e.call, call3)
};
};
});function handleCallConnected(e) {
extState.enter(inboundCall);
}function handleCallDisconnected(e) {
VoxEngine.terminate();
}
Нажмите кнопку «Создать сценарий», в левой части дайте ему имя например, «for call» и вставьте код в рабочую область.
В сценарии нужно указать ваш арендованный номер, чтобы он использовался для исходящих звонков. Для этого в строке «let myNumber» в кавычках введите номер, который вы арендовали ранее.
Создаем правило маршрутизации
Правила маршрутизации направляют звонки в нужный сценарий. Переходим в раздел «Роутинг» и создаем правило, по которому звонки будут направляться в ранее созданный сценарий. В нашем случае можно использовать маску .* и выбираем наш сценарий.
Добавляем внутренних пользователей
Следующим шагом создаем внутренних пользователей, которых затем зарегистрируем в софтфоне. Наш сценарий предполагает, что имя пользователя – это трехзначный номер и номер 101 закреплен за секретарем.
В приложении переходим в раздел «Пользователи» и создаем их.
Регистрация пользователей в софтфоне
Вы можете выбрать любой софтфон, мобильное приложение или IP-телефон. Главное, чтобы устройство или приложение поддерживало протокол SIP. Например, Linphone, softphone.pro или PhonerLite.
Во время регистрации в софтфоне вам нужно будет заполнить поля:
- В качестве Proxy нужно указать адрес вида: имя_вашего_приложения.имя_вашего_аккаунта.voximplant.com
Например : cloudpbxpublic.gserditykh.n4.voximplant.com - Имя пользователя – трехзначный номер, который указывали при создании пользователя – например, 101.
- Пароль – тот же, что указывали на этапе создания пользователя.
Пример настройки софтфона Linphone:
Пример настройки мобильного приложения Zoiper:
На этом настройка облачной АТС завершена. Вы можете сделать тестовый вызов на арендованный номер, ввести внутренний номер сотрудника, и ваш звонок будет переадресован пользователю. Для локальных вызовов достаточно набрать внутренний номер сотрудника.