Редактирование полей CDR при помощи скриптов
Довольно часто мы сталкиваемся с моментами, когда необходимо интегрировать телефонию с CRM системами или системами статистики. Эти сервисы зачастую берут данные из CDR. Но бывают случаи, когда CDR может заполняться некорректно. Это может быть связано с неверным настройками диалплана или даже вынужденная мера. Сегодня мы поговорим как раз о вынужденной мере. Представим себе ситуацию, когда […]
Довольно часто мы сталкиваемся с моментами, когда необходимо интегрировать телефонию с CRM системами или системами статистики. Эти сервисы зачастую берут данные из CDR. Но бывают случаи, когда CDR может заполняться некорректно. Это может быть связано с неверным настройками диалплана или даже вынужденная мера. Сегодня мы поговорим как раз о вынужденной мере.
Представим себе ситуацию, когда у нас недобросовестный оператор предоставляет транк с регистрацией, но не умеет самостоятельно подставлять А номер и это приходится делать на стороне FreePBX. Это повлечет за собой нежелательные последствия, а именно, в поле src в Mysql будет записываться не внутренний номер, а наш городской номер.
В MySql мы увидим следующее
На скриншоте мы видим,
что некорректно заполняется поле src, а интегрированная система salesman считает этот вызов
входящим, хотя сам вызов был исходящий.
Данная проблема возникнет тогда, когда на FreePBX выполнены
следующие настройки:
Когда вы создаете транк с регистрацией и в строке Outbound CallerID указан ваш городской номер
Чтобы в дальнейшем нам спокойно работать, нам как-то необходимо редактировать нашу CDR. Из диалплана в явном виде это сделать невозможно, т.к. данные поля предназначены только для чтения.
Существуют 2 способа решения данной задачи.
1 способ. Использовать ODBC коннектор и alias в нём, но нам понадобиться создавать много переменных в диалплане для корректной записи необходимых полей.
2 способ. Использовать скрипт, который будет с определенной периодичностью подключать к базе и менять необходимые поля.
Мы будем использовать второй способ.
Напишем скрипт следующего вида:
<?php
$ip = "127.0.0.1";
$db_user = "имя пользователя";
$db_pass = "пароль";
$db_name = "asteriskcdrdb";
$db_con = mysqli_connect($ip,$db_user,$db_pass,$db_name);
mysqli_query($db_con,"set names 'utf8'");
$i=0;
//вытаскиваем исходящие
$cdr_sql = "select * from asteriskcdrdb.cdr where LENGTH(cnum)=3 and src in(select outcid from asterisk.trunks where disabled = 'off')";
//$cdr_sql="select * from cdr where recordingfile like 'out-%'";
$cdr_rs= mysqli_query($db_con,$cdr_sql);
while($cdr_row= mysqli_fetch_array($cdr_rs)) {
$uniqueid = $cdr_row["uniqueid"];
$cnum = $cdr_row["cnum"];
//проверяем есть ли запись в БД SALESMAN
$is_sm_exists = false;
$is_sm_exists_sql = "select id from salesman.salesman_callhistory where uid=".$uniqueid;
$is_sm_exists_rs= mysqli_query($db_con,$is_sm_exists_sql);
while($is_sm_exists_row= mysqli_fetch_array($is_sm_exists_rs)) {
$is_sm_exists = true;
}
//если есть тогда апдейтим CDR и SALESMAN
if($is_sm_exists){
$i++;
//CDR UPDATE
mysqli_query($db_con, "update cdr set src = '" . $cnum . "' where uniqueid=" . $uniqueid);
//SALESMAN UPDATE
$iduser="0";
$salesman_sql = "select iduser from salesman.salesman_user where phone_in = '".$cnum."'";
$salesman_rs = mysqli_query($db_con, $salesman_sql);
$salesman_row = mysqli_fetch_array($salesman_rs);
$iduser=$salesman_row['iduser'];
mysqli_query($db_con, "update salesman.salesman_callhistory set src = '".$cnum."' , direct='outcome',iduser = '".$iduser."' where uid=". $uniqueid);
echo $i.")".$uniqueid." UPDATED \n";
}
}
echo "total ".$i." rows updated\n";
Делаем скрипт исполняемым
Chmod +x /usr/local/bin/updatesrc.php
Теперь делаем вспомогательный скрипт на bash, чтобы запустить из cron.
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
php /usr/local/bin/updatesrc.php
Вспомогательный скрипт updatesrc.sh, тоже сделаем исполняемым
Chmod +x /usr/local/bin/updatesrc.sh
Выполняем crontab –e и вносим туда наш вспомогательный скрипт:
*/1 * * * * /usr/local/bin/updatesrc.sh
Теперь данные в MySQL будут отображаться корректно
Остались вопросы?
Я - Першин Артём, менеджер компании 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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.