Asterisk

Неоднократно приходись делать объединение офисной АТС на базе Asterisk с call-центром Oktell или просто интегрировать два номерных плана удаленных офисов на Oktell IP PBX и Asterisk. В общем, нет ничего сложного, посмотрим как это все работает на простом примере.

У нас есть 2 офиса: в одном прекрасно работает Oktell IP PBX (номерной план 1хх и 2хх), а в другом со своей задачей отлично справляется Asterisk (номерной план 3хх и 4хх). У каждой из АТС имеются свои городские номера, только еще на Asterisk установлен GSM-шлюз. Каждая из АТС имеет белый внешний адрес (или VPN между офисами). Задача сделать прозрачное объединение двух номерных планов, что бы сотрудник не задумываясь набирал номер, а так же дать возможность сотрудникам за Oktell звонить через GSM-шлюз. Рассмотрим как это решается.

Oktell logoКак я описывал раньше, есть у меня SIP-GSM шлюз на базе Asterisk, который подключен к офисному серверу с Oktell. На модемы приходят разные SMS и пока они ложатся в файл на Linux сервере. В них бывает информация о балансе на карточках :). Идея — перенести все эти SMS в Oktell.

Для начала решил все SMS записывать в базу MySQL на сервере, а потом служебным сценарием забирать в Oktell. Создаю в MySQL пользователя, базу, и таблицу:

CREATE TABLE  `asterisk`.`gsm` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`date` DATETIME NOT NULL ,
`modem` VARCHAR( 10 ) NOT NULL ,
`callerid` VARCHAR( 16 ) NOT NULL ,
`msg` VARCHAR( 160 ) NOT NULL ,
`oktell` ENUM(  '0',  '1' ) NOT NULL DEFAULT  '0'
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci COMMENT =  'Входящие SMS'

Asterisk LogoМы уже имеем настроенный сервер Asterisk через который Oktell осуществляет звонки на мобильные. Вся статистика храниться в /var/log/asterisk/cdr-csv/Master.csv Не очень удобно в плане работы… Вот и хочу перенести все в MySQL, а потом смогу эту информацию использовать в сценариях Oktell. Как и в предыдущей статье все будим собирать с исходников на Ubuntu Linux.
Приступим!

Asterisk LogoСегодня разбирался как в Asterisk происходит запись разговоров. Для этого в dialplan используются две функции: Monitor или MixMonitor. Monitor — записывает разговор в два файла, каждый говорящий отдельным каналом. MixMonitor — единым файлом. В extensions.conf, где у нас настроен SIP-GSM шлюз, прописал:

exten => _X.,1,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN})
exten => _X.,2,MixMonitor(/mnt/share/${STRFTIME(,,%G/%m/%d)}/${fname}.wav)
exten => _X.,3,Dial(Datacard/datacard1/${EXTEN})

В первой строчкой описано имя файла в котором будет хранится запись разговора, он состоит из даты и времени звонка, номера звонящего абонента и куда он звонил. Во второй строчке мы складываем записи в папки ГОД/МЕСЯЦ/ДЕНЬ

Проверил — работает!

Asterisk LogoКак вы могли уже заметить в базовую поставку * не входят русские или украинские звуковые файлы. Когда-то я нарыл качественные русскоязычные голосовые файлы для *, которые использовал в сценарии для Oktell «IVR – Проверка голосовой почты». Воспользуемся этими же файлами. Скачаем и закинем в *:

cd /tmp
wget http://ivrvoice.ru/downloader/download/file/11
tar xzvf 11
mv ru /var/lib/asterisk/sounds/

Для других Linux путь к файлам может быть здесь: /usr/share/asterisk/sounds/
Для FreeBSD: /usr/local/share/asterisk/sounds/

Теперь в начале каждого диалплана нужно добавить один рядок:

exten => s,1,Set(CHANNEL(language)=ru)

Asterisk LogoРасскажу о своем опыте создания SIP-GSM шлюза на базе Asterisk и подключение его к Oktell. У нас в офисе кроме сервера с установленным Oktell есть еще сервер для раздачи Интернета, на котором установлен Debian «Squeeze» Linux (Ubuntu тоже подойдет). Вот на нем и будем экспериментировать! 😉

1. Установка Asterisk
Мне нужна последняя стабильная версия Asterisk, та что имеется в репах не подходит.

mkdir ~/tmp && cd ~/tmp
aptitude install g++ libncurses-dev libxml2-dev subversion usb-modeswitch-data
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.6.2-current.tar.gz
tar xzvf asterisk-1.6.2-current.tar.gz
cd asterisk-1.6.2-current
./configure
make install
make config
make samples

Если до этого момента Вам еще не стало страшно, тогда продолжаем!

Asterisk LogoСегодня расскажу как подружить Oktell SIP-GSM Gateway и Asterisk. У меня уже есть рабочий Asterisk IP-PBX сервер установлен на FreeBSD и Oktell SIP-GSM Gateway на Windows Server 2008 с установленной картой оператора Kyivstar. Я хочу, что бы все звонки которые поступают со стороны GSM автоматически попадали на групповой номер 100 на Asterisk, а если пользователь подключен к Asterisk набирает код оператора Kyivstar (067, 097, 096, 098) — переводился на мой Oktell SIP-GSM Gateway.

Приступим к настройке Oktell SIP-GSM Gateway, здесь все просто и в картинках:

Параметры подключения к Asterisk
Параметры подключения к Asterisk

Asterisk LogoПродолжаем наши эксперименты с Asterisk — сегодня расскажу немного о настройке маршрутизации исходящих звонком. После чего, попробуем объединить наш Asterisk с Oktell 🙂
Для чего нужна маршрутизация? Если мы захотим ограничить пользователей — кому можно выходить в город, а кому нет… И не только! В предыдущей статье мы разрешили пользователям осуществлять звонки друг-дружке…

Теперь о выходе через провайдера:

[dialout]
exten => _.,1,NoOp("Out Dial")
exten => _.,2,Dial(SIP/provider)
exten => _.,3,Hangup()

При поступлении звонка попавшего под наш маршрут первым делом выполнится команда NoOp под цифрой 1, затем маршрутизация звонка с помощью Dial и 3-м вызовет Hangup. Если мы хотим через код 81 на одного провайдера, а через 82 на другого, тогда это будет так:

Asterisk LogoКак мы уже обсуждали раньше, Asterisk — это замечательная свободная IP-АТС. Продолжая свой эксперимент, я перехожу к созданию пользователей. Пока у нас нету внешних каналов, но попробуй настроить возможность осуществлять звонки внутри офиса. На клиенте я буду использовать X-Lite или можете попробовать ZoIPer.

Для создания SIP пользователей, открываем файл sip.conf. Первое, что нужно сделать — это запретить по SIP принимать анонимные звонки! Нужно откомментировать одну строку, она будет выглядеть так:

allowguest=no

Это единственный глобальный параметр, который необходимо поменять. Дальше, создаю пользователя:

Asterisk IP-PBX — свободное решение компьютерной телефонии от компании Asterisk LogoDigium. В основном, я занимаюсь Oktell — это очень мощный коммерческий продукт. Но, если Вам нужно просто позвонить, если Вы не боитесь рыться в документации, если Вы на «ты» с Unix системами,- тогда будем создавать офисный IP-PBX своими руками! Я уже не раз устанавливал trixbox — быстрое решение… Но, в этот раз я решил пойти длинным путем — настройка всего с исходников 🙂 Для опытов был выбран FreeBSD 8-STABLE сервер. Всю историю событий буду описывать в этом блоге. И так, приступим!