среда, 17 февраля 2016 г.

Обновление таймзоны в Elastix 2.5

При очередной установке Elastix запамятовал как я обновлял таймзоны для современных российских реалий, что бы не было часового убегания вперед и все правила маршрутизации звонков отрабатывали штатно в свое время. Пришлось даже погуглить )
Но в результате вспомнил что просто надо обновить сами таймзоны, что и проделал с помощью
yum -y install tzdata
Сделать резервную копию текущей таймзоны
mv /etc/localtime /etc/localtime.bak
Найти в каталоге /usr/share/zoneinfo требуемую временную зону (для меня это Asia/Yekaterinburg) и создать на нее символическую ссылку
ln -s /usr/share/zoneinfo/Asia/Yekaterinburg /etc/localtime
И все стало хорошо )

пятница, 5 февраля 2016 г.

Работа с ODBC в диалплане Elastix

Понадобилось быстрое решение - не ломая существующей логики работы АТС на базе Elastix, внедрить проверку звонящего по номеру и сопоставить его с его личным менеджером. Руководство компании было против каких-либо IVR и тому подобного, требовался просто перевод на номер менеджера. Поэтому, поразмыслив, я принял решение организовать подобный проброс звонка с проверкой привязки CID к конретному extension в базе данных MySQL. Проверку решил сделать с помощью ODBC.

Что требуется сделать:

1. Доставить библиотеки yum install libtool-ltdl mysql-connector-odbc

2. Создать базу данных с двумя полями cid и extension (в принципе можно реализовать и подстановку имени или названия компании в CALLERID(name), создав дополнительные поля в БД и чуть усложнив логику, но в данный момент мне этого было ненужно)

3. Прописать в файлике /etc/odbcinst.ini коннектор к библиотекам

[MySQL]
Description     = ODBC for MySQL
Driver          = /usr/lib/libmyodbc3.so
Setup           = /usr/lib/libodbcmyS.so
FileUsage       = 1

4. Прописать в файлике /etc/odbc.ini коннектор к базе mysql

[cidroute]
Driver = MySQL
Server = localhost
Port = 3306
User = mysql_user
Password = mysql_password
Database = cidroute
Socket =

5. Протестировать соединение isql -v cidroute (может потребоваться перезагрузка)

6. Прописать в файлике астериска res_odbc.conf коннект к odbc

[cidroute]
enabled => yes
dsn => cidroute
username => mysql_user
password => mysql_password
pooling => no
limit => 1
pre-connect => yes

7. Прописать в файлике астериска func_odbc.conf функцию для вызова

[CIDROUTE]
dsn=cidroute
readsql=SELECT extension FROM numbers WHERE cid='${CALLER}'

8. Прописать в файлике астериска extensions_additional.conf в логике входящих звонков (к примеру в настройках входящих в транк) проверку на присутствие в базе внешнего номера

[from-trunk-sip-70123456789]
include => from-trunk-sip-70123456789-custom
exten => _.,1,Set(CALLER=${CALLERID(num)})
exten => _.,n,Set(resultid=${ODBC_CIDROUTE()})
exten => _.,n,Set(GROUP()=OUT_15)
exten => _.,n,ExecIf($["${resultid}" > ""]?Goto(from-trunk,${resultid},1)
exten => _.,n,Goto(from-trunk,${EXTEN},1)

9. Если что-либо не идет - первым делом протестировать коннект с odbc из астериска

odbc show all