Создание и подготовка таблицы для кастомной маршрутизации из IVR в зависимости от региона звонящего
Возникают ситуации, когда в компанию поступают звонки с других регионов, в которых другие часовые пояса. Соответственно, подстроиться под каждый регион не получится, и клиенты будут потеряны. Уведомления на почту о пропущенных звонках или же SMS-уведомления не помогут, так как присутствует шанс перезвонить клиенту в то время, когда в компании будет рабочий день, а у клиента […]
Возникают ситуации, когда в компанию поступают звонки с других регионов, в которых другие часовые пояса. Соответственно, подстроиться под каждый регион не получится, и клиенты будут потеряны. Уведомления на почту о пропущенных звонках или же SMS-уведомления не помогут, так как присутствует шанс перезвонить клиенту в то время, когда в компании будет рабочий день, а у клиента уже будет ночь. Тем более, что на каждый регион Российской Федерации делать отдельную IVR, чтобы клиент мог воспользоваться выбором отдела, в который хочет позвонить, нет смысла. Отсюда возникает вопрос, возможно ли произвести настройку таким образом, чтобы потерять минимальное количество клиентов или же не потерять их вовсе.
В данной статье рассмотрим возможность маршрутизации вызовов из IVR в зависимости от региона звонящего.
Задача
С помощью одной IVR и трёх клавиш донабора произвести маршрутизацию вызовов из IVR с учётом региона звонящего. Также необходимо учесть, что некоторые звонки распределяются по различным операторам в зависимости от чётности или нечётности дня.
Реализация
Для настройки региона звонящего можно воспользоваться статьёй «Определение региона звонящего»
В нашем примере определение региона звонящего на сервере уже настроено, поэтому рассмотрим следующие действия.
Таблица, по которой определяется регион звонящего, выглядит следующим образом:
Такая база для нас неудобна. Это обусловлено тем, что маршрутизация вызовов делается по федеральным округам России, которые будут составляться на основе областей, городов, республик и краёв. Также все необходимые при маршрутизации значений тоже удобнее будет хранить в оной базе с регионами. На основе этого перейдём в MySQL (в примере — MariaDB) и создадим новую таблицу. Например, reg_routes.
Предположим, что при нажатии кнопки 1 и 3 вызовы будут распределяться при условии, чётный день или нет, а при нажатии 2 будут вести на один и тот же номер. В таком случае, новая таблица будет содержать следующие значения: region, key1, key1_1, key2, key3, key3_1, district. Соответствовать этим полям будут регион звонящего, назначение (внутренний номер или очередь, на который поступит вызов) и федеральный округ.
Определившись с полями в таблице, выполним команду в консоли MySQL:
CREATE TABLE reg_routes (region varchar(255) NOT NULL PRIMARY KEY, key1 varchar(30), key1_1 varchar(30), key2 varchar(30), key3 varchar(30), key3_1 varchar(30), disctrict varchar(30));
Проверить созданную таблицу можно командой
DESCRIBE reg_routes;
Теперь, для заполнения поля region этой таблицы, нужно получить значение поля region из предыдущей таблицы, преобразовать его так, чтобы в значении остался только нужный нам вывод (например, вместо «г. Ижевск|Республика Удмуртская» — «Республика Удмуртская».), и перенести это значение в таблицу reg_routes.
Регионов много, поэтому для заполнения этого поля воспользуемся PHP.
Для начала создадим файл db.php, в котором будет класс для управления базой данных.
<?php
class DB
{
private $bd;
function __construct(){
try{
$this->bd = new PDO("mysql:host=".HOST.";dbname=".DB_NAME, DB_USER, DB_PASSWORD);
$this->bd->exec('SET NAMES utf8');
} catch(PDOException $e)
{
print "Error! Some troubles with connect to database!<br/>";
die();
}
}
function query($sql,$arr=null)
{
if(!isset($arr))
$res = $this->bd->query($sql);
else
{
$res = $this->bd->prepare($sql);
$res->execute($arr);
}
return $res;
}
}
?>
Этот класс нужен для того, чтобы была возможность посылать в базу запросы и получать из неё ответы.
С помощью функции __construct генерируем подключение к базе данных. Здесь же устанавливаем кодировку UTF8 для работы с базой. Далее, с помощью catch, выдаём сообщение «Error! Some troubles with connect to database!» при наличии ошибок подключения к базе данных.
Также используется функция query. Она служит для передачи запроса в БД и обработки результата.
Далее создаём файл updater.php, который будет заполнять поле region в таблице reg_routes.
<?php
require_once 'db.php';
define('HOST','localhost');
define('DB_NAME','asteriskcdrdb');
define('DB_USER','логин');
define('DB_PASSWORD','пароль');
$db = new DB();
$result = array();
$reg = $db->query("SELECT region FROM tel_codes GROUP BY region");
$reg_arr = $reg->fetchAll(PDO::FETCH_ASSOC);
echo "<pre>";
foreach ($reg_arr as $key => $value) {
$reg = rtrim($value['region']);
$len = strlen($reg);
$pos = strrpos($reg, "|");
if ($pos === false) $pos = 0;
else $pos++;
$region = substr($reg, $pos);
$result[$region] = 1;
}
$i=0;
foreach ($result as $key => $value) {
echo "$i => $key\n";
$i++;
$db->query("INSERT INTO reg_routes(`region`) VALUES (:key)",array('key' => $key));
}
echo "</pre>";
?>
Прописываем данные для подключения к БД. Далее создаём массив и передаём запрос к БД в массив. С помощью функций работы со строками производим обрезание строки с конца до разделителя (в примере разделитель “|”). Возвращаем полученное значение в поле region.
Сохраняем эти файлы в отдельной папке в директории /var/www/html. Переходим в браузер и запускаем updater, введя в поисковой строке:
http://IP-адрес сервера/dbtest/updater.php
где dbtest – имя папки, где сохранены файлы.
Получим вывод:
Убедиться в том, что таблица создана можно, введя в консоли MySQL запрос, который покажет текущую таблицу полностью:
SELECT * FROM reg_routes;
Теперь сопоставим регион звонящего с федеральным округом РФ и на основе этого заполним поле district. Сделаем это также с помощью updater.php.
Для начала создадим новый файл reg.php и заполним в нём массив, исходя из ‘ключ’ => ‘значение’, где ключ – регион звонящего, а значение – федеральный округ. В нашем примере вышло 166 элементов массива. Далее переходим в updater.php и после объявления переменной $db пропишем следующий код:
$action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : '';
if ($action == 'up_district')
{
require_once 'reg.php';
foreach ($arr as $key => $value) {
$upd = $db->query("UPDATE reg_routes SET `district`=:district WHERE `region`=:region",array('district' => $value, 'region' => $key));
}
echo "district updated\n";
exit;
}
Он отвечает за заполнение поля district в таблице reg_routes.
Переходим в браузер и в поисковой строке прописываем:
http://IP-адрес сервера/dbtest/updater.php?action=up_district
При успешном выполнении скрипта получим в браузере сообщение: «district updated». После этого также можно посмотреть содержимое всей таблицы – заполнены будут поля region и district.
Для того, чтобы полностью заполнить таблицу, осталось заполнить поля key1, key1_1, … , key3_1. Их заполнять будем вручную, с помощью запросов в консоли MySQL. Заполнение будет производиться по полю district.
В качестве примера заполним эти поля по Северо-Западному Федеральному Округу (district=’СЗФО’):
UPDATE reg_routes SET key1=’ 1541’, key1_1=’1541’, key2=’3925’, key3=’ 1339’, key3_1=’1337’ WHERE district=’СЗФО’;
Соответственно все регионы, принадлежащие к СЗФО получат в качестве значений key1, key1_1, … , key3_1 то, что мы прописали в запросе к БД.
После того, как с помощью запросов заполним всю таблицу, проверим, всё ли заполнилось. После выполнения запроса, описанного выше (для просмотра всей таблицы), получим таблицу подобного вида:
На этом подготовка таблицы для маршрутизации вызовов завершена. Последующие действия будут описаны в статье: «Кастомная маршрутизация из IVR в зависимости от региона звонящего».
Остались вопросы?
Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.