Asterisk изменение CallerId через agi, может потребоваться для плавного перехода с аналога на sip. Допустим есть такая схема, как в нашей прошлой статье, Asterisk+Freepbx+Cisco2801. Где пересекаются номера 2 АТС, аналоговой Panasonic kx-tda200 и Asterisk. Напомним, что в данном примере настройки мы связали asterisk(freepbx). Через voip шлюз cisco 2801, с аналоговой АТС panasonic. Так же имеется еще одна АТС на базе Asterisk(freepbx). Требуется реализовать сквозные звонки со всех трех АТС. Как будто по факту мы имеем, всего дону АТС.
Дано:
- AТС на базе Asterisk(FreePBX) с пулом номеров 100-299.
- AТС на базе Asterisk(FreePBX) с пулом номеров 300-599
- Аналоговая АТС Panasonic KX-TDA2 с пулом номеров 100-299.
Сейчас мы расскажем как реализовать данную схему. Сспользуя при этом custom context, а так же php-agi, для связи с базой данных MySQl. В глубокой перспективе есть расчет на то что, будет отказ от аналоговой АТС. Все номера пользователям будут назначены с АТС2 из пула 300-599. Но так как пока это глубокая перспектива, и не известно когда это будет. Сделаем ряд действий, для того чтобы пользователи могли постепенно привыкать к новым номерам.
Начало
Первое что нам необходимо сделать, на начальном этапе, это завести будущие номера на АТС2. После добавления требуемого количества внутренних номеров, добавим им FM/FM(FindMe/FollowMe). Допустим АТС2 имеет внутренний номер 333, предназначенный для пользователя аналоговой АТС. На аналоговой АТС он имеет номер 155. Заходим в web интерфейс, нажимаем приложения, затем внутренние номера. Далее выбираем для редактирования, наш внутренний номер 333, на вкладке Find Me/ Follow Me. Включаем данную опцию. Ниже в поле под названием Follow-Me List вписываем наш аналоговый номер 155#. Решетку ставить обязательно, так мы указываем что номер за пределами asterisk. Звонок будет расценен как во вне. Отправится в нужный транк, по совпадению правил исходящей маршрутизации. В данной схеме абонент с АТС1 наберет номер 333, попадет на АТС2, далее АТС2 отправит звонок в транк, через который подключен наш voip шлюз. Все прекрасно будет работать. Но если абонент с аналоговой атс позвонит на какую либо из АТС то у него будет callerid, присвоенный аналоговой АТС. Но как мы помним, мы хотим облегчить отказ от аналоговой связи с сторону voip.
Создание скрипта php-agi
Создаем файл php, в директории /var/lib/asterisk/agi-bin, допустим с названием ex-callerid.php. Помещаем в него следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/usr/bin/php -q <?php require('phpagi.php'); $agi = new AGI(); $cid = $agi->request['agi_callerid']; $conn = mysql_connect("localhost", "пользователь_бд", "пароль_бд"); mysql_select_db("asterisk"); $sql = "SELECT `grpnum` FROM `findmefollow` WHERE `grplist` = '".$cid."#' ORDER BY `grpnum` LIMIT 1;"; $result = mysql_query($sql); $row = mysql_fetch_assoc($result); if (isset($row['grpnum'])){ $agi->set_variable ( "CALLERID(number)", $row['grpnum'] ); } mysql_free_result($result); ?> |
Ранее, на вкладке Find Me/Follow Me мы указывали номер. Данный скрипт получает callerid звонка. Сверяет его с таблицей в базе данных. Находит там значение равное callerid, заменяет callerid при нахождении соответствия.
Custom context
Следующий шаг, создание custom context, для включения нашего скрипта в dialplan. Откроем файл с настройкой custom context. Для FreePBX он будет под названием extensions_custom.conf. Расположен данный файл по следующему пути /etc/asterisk/.
1 |
nano /etc/asterisk/extensions_custom.conf |
Добавим в него контекст под название from-pstn-panasonic.
1 2 3 4 |
[from-pstn-panasonic] exten =>_X.,1,GotoIf($["${CALLERID(num)}" = "[1-2]\d\d"]?2) exten =>_X.,2,AGI(ex-callerid.php) exten =>_X.,3,Goto(from-internal,${EXTEN},1) |
Затем зайдем в настройки транка и поменяем входящий контекст на только что созданный. Далее применяем настройки, проверяем что все работает. Для совершения звонков с аналоговой АТС на АТС1 , в исходящей маршрутизации был добавлен префикс.
На этом мы заканчиваем данную статью.