artem
16.11.2016
4984

Asterisk+SalesMan custom маршрутизация

В данной статье рассмотрим как выполнить правки для маршрутизации входящих вызовов в соответствии с получаемыми ответами при обращении к CRM Salesman.

P.S. все команды описанные в данной статье необходимо выполнять от имени сперпользователя root. Все действия выполняются в CentOS 6.8 x64.

Установка:
Выполним подключение по SSH к серверу на котором установлена CRM SalesMan и выполним ряд команд вида:

# nano /var/www/html/salesman/api/asterisk/callerid.php ;Где /var/www/html/salesman/ это путь к файлам CRM

И приведем содержимое данного файла к виду:

<?php
/* ============================ */
/* SalesMan CRM */
/* ============================ */
/* (C) 2014 Vladislav Andreev */
/* Salesman Project */
/* www.isaler.ru */
/* ver. 7.70 */
/* ============================ */
?>
<?php
error_reporting(0);
$prefix = $_SERVER[«DOCUMENT_ROOT»];
include $prefix.»/inc/config.php»;
include $prefix.»/inc/settings.php»;
require_once $prefix.»/inc/func.php»;
$apkey = $_REQUEST[‘apkey’];
$phone = $_REQUEST[‘phone’];
$t = $_REQUEST[‘t’];
if($t == ‘no’) $tr = false;
else $tr = true;
if(!$apkey){
print ‘Не указан API key’;
exit();
}
//проверим ключ
$result_set = mysql_query(«SELECT * FROM «.$sqlname.»settings WHERE api_key = ‘$apkey'»);
$identity = mysql_result($result_set, 0, «id»);
if(!$identity){
print «Incorrect API key»;
exit();
}
else{
if($identity){
$callerID = getCallerID($phone,false,$tr);
print $callerID;
}
else {
print «Incorrect API key»;
exit();
}
/*
print «<br>»;
print «clientID=».$clientID.»<br>»;
print «clientTitle=».$clientTitle.»<br>»;
print «personID=».$personID.»<br>»;
print «personTitle=».$personTitle.»<br>»;
print «userID=».$userID.»<br>»;
print «userTitle=».$userTitle.»<br>»;
print «phoneIN=».$phoneIN.»<br>»;
*/
}
?>

Обращаясь к переменной $callerID мы можем получить ответ есть ли номер звонившего в базе или нет. Завершив правки в файле выполняем сохранение изменений и дальнейшее закрытие данного файла.
Приступим редактированию следующего файла, в консоли выполним команду вида:

# nano /var/www/html/salesman/api/asterisk/relation.php

И приведем содержимое данного файла к виду:

<?php
/* ============================ */
/* SalesMan CRM */
/* ============================ */
/* (C) 2014 Vladislav Andreev */
/* Salesman Project */
/* www.isaler.ru */
/* ver. 7.70 */
/* ============================ */
?>
<?php
error_reporting(0);
$prefix = $_SERVER[«DOCUMENT_ROOT»];
include $prefix.»/inc/config.php»;
include $prefix.»/inc/settings.php»;
require_once $prefix.»/inc/func.php»;
$apkey = $_REQUEST[‘apkey’];
$phone = $_REQUEST[‘phone’];
$t = $_REQUEST[‘t’];
$params = array(
«Клиент» => «1»,
«Потенциальный клиент» => «2»,
«Партнер» => «3»,
«Не работаем» => «4»
);
if($t == ‘no’) $tr = false;
else $tr = true;
if(!$apkey){
print ‘Не указан API key’;
exit();
}
//проверим ключ
$result_set = mysql_query(«SELECT * FROM «.$sqlname.»settings WHERE api_key = ‘$apkey'»);
$identity = mysql_result($result_set, 0, «id»);
if(!$identity){
print «Incorrect API key»;
exit();
}
else{
if($identity){
$callerID = getCallerID($phone,false,$tr);
$relation = getClientData($clientID, ‘tip_cmr’);
$result = strtr($relation, $params);
print $result ;
}
else {
print «Incorrect API key»;
exit();
}
}
?>

Обращаясь к переменной $result мы можем выяснить к какому типу отношений(данные поля необходимо настроить дополнительно в CRM) относится номер звонившего. Стоит отметить что строки:
«Клиент» => «1»,
«Потенциальный клиент» => «2»,
«Партнер» => «3»,
«Не работаем» => «4»
необходимо привести к такому же виду как будут заведены дополнительные поля в CRM. Завершив правки в файле выполняем сохранение изменений и дальнейшее закрытие данного файла.
Перейдем к настройке диалплана Asterisk, для этого выполним редактирование файла extensions_custom.conf:

# nano /etc/asterisk/ extensions_custom.conf

И добавим в него следующие строки:

[main-inbound]
exten => s,1,Noop()
same => n,Gosub(app-fix-cid,s,1) ;приведение номера звонящего к виду 8XXXXXXX.
same => n,Set(MANAGER_NUM=${CURL(http://127.0.0.1/api/asterisk/callerid.php?phone=${CALLERID(num):-10:10}&apkey=APIKEY)})
same => n,Set(RELATION=${CURL(http://127.0.0.1/api/asterisk/relation.php?phone=${CALLERID(num):-10:10}&apkey=APIKEY)})
same => n,Noop(${MANAGER_NUM})
same => n,Noop(${RELATION})
same => n,GotoIf($[«${MANAGER_NUM}» = «Not found»]?ivr-3,s,1)
same => n,GotoIf($[«${RELATION}» = «1»]?ivr-6,s,1)
same => n,GotoIf($[«${RELATION}» = «2»]?ivr-8,s,1)
same => n,GotoIf($[«${RELATION}» = «3»]?ivr-10,s,1)
same => n,GotoIf($[«${RELATION}» = «4»]?Hangup)
same => n,Macro(hangupcall)
[app-fix-cid]
exten => s,1,GotoIf($[${REGEX(«^[0-9]{7}$» ${CALLERID(num)})} = 0]?cont1)
same => n,Set(CALLERID(num)=8495${CALLERID(num)})
same => n,Set(CALLERID(ANI-num)=${CALLERID(num)})
same => n,Goto(end)
same => n(cont1),GotoIf(${REGEX(«^[78]?[2-9][0-9]{9}$» ${CALLERID(num)})}?fix_cid)
same => n,GotoIf(${REGEX(«^\+?7[2-9][0-9]{9}$» ${CALLERID(num)})}?fix_cid)
same => n,Goto(end)
same => n(fix_cid),Set(CALLERID(num)=8${CALLERID(num):-10})
same => n,Set(CALLERID(ANI-num)=${CALLERID(num)})
same => n(end),Return

Где,

http://127.0.0.1/ — адрес сервера CRM
same => n,GotoIf($[«${MANAGER_NUM}» = «Not found»]?ivr-3,s,1) — маршрутизация после получения ответа об отсутствии номера в базе CRM
same => n,GotoIf($[«${RELATION}» = «1»]?ivr-6,s,1) — маршрутизация по получаемому ответу о типе отношений «1»

Книга 101 функция Asterisk
Познакомьтесь с возможностями Asterisk. Найдите инструменты, которые помогут вашей компании развиваться.
Скачать книгу
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.