CentOS → Настройка сервера VoIP Asterisk на PBX Elastix (CentOS) - Часть 1


    Когда-то давно я разворачивал сервер VoIP в офисе, выбор был между Trixbox и Elastix, правда у Elastix был странный глюк со стабильностью работы транка к провайдеру, проблема была в том что транк падал по необъяснимой причине, в логах по данному поводу ничего вразумительного не было, в результате, после тестирования, предпочтения были отданы Trixbox, который, в тестовой среде, показал себя просто отлично, и результатом стало успешное использование более 2х лет. Тут мне на поддержку перешла новая компания, в планах которой было использовать VoIP в этот раз я решил еще раз протестировать Elastix. Визуально Elastix более функционален т.к. содержит больше функций из коробки, остальное можно добавлять с помощью модулей. 
    В функционале Elastix есть, собственно PBX-сервер, mail-сервер, jabber (openfire), статистика. Все остальное можно добавить самому.
    Я хочу настроить сервер Asterisk с тремя подключенными телефонами, мы будем использовать 2 провайдера VoIP — PCtel.ruи sipnet.ru
    Первый обеспечивает дешевую телефонную связь по РФ 1 руб. за мин. второй позволяет звонить на прямые московские номера до 40 мин в день бесплатно, при условии что у вас на счету более 5 у.е., в общем для тестирования данные провайдеры легко настраиваются, а в дальнейшем, с небольшими изменениями, можно подключать к любому провайдеру с сохранением функционала.
    Мы настроим диалплан, чтобы звонки на мобильные телефоны и городские телефоны в других городах автоматически шли через pctel.ru, а на городские Москвы через sipnet.ru, при этом входящие звонки будут попадать на номер 100, если он недоступен или не отвечает, через 10 сек, перенаправлен на номер 200, если и он не отвечает то «пиликать» должны все телефоны — 100, 200, 300.
    Я не буду рассматривать процесс установки системы, он весьма прост и нагляден.
    Для работы нам понадобится дистрибутив Elastix, актуальную версию которого, можно скачать с сайта разработчика

    Подготовительная часть

    Для начала обновим систему, зайдя под пользователем root и паролем который вы указали при установке системы:

    yum -y update

    Перезагрузимся, чтобы применить обновления:

    reboot


    ну и идем в web консоль, если случайно вы не задали статистический IP адрес вашему серверу, то IP можно узнать зайдя в консоль, под пользователем root( на скриншоте подчеркнуто красным):
    elastix console

    Если требуется настроить сеть то идем во вкладку System, а там в Network и жмем на кнопку Edit Network Parameters (на скриншоте обведено красным)


    Редактируем настройки сети- если требуется, далее идем настраивать экстеншены- вкладка PBX.

    1 Настраиваем экстеншены, для подключения телефонов пользователей


    Выбираем устройство SIP:


    Первый пользователь с внутренним номером 100 у нас будет оператор (operator) в поле DisplayName, укажем его имя латиницей, тогда у того кому он звонит, будет высвечиваться его имя(при условии что телефон, у того кто принимает звонок, поддерживает данную функцию есть такие что не поддерживают, тогда высвечивается номер), также мы активируем функцию, Call Waiting, весьма полезная вещь, нужна она для того, если поступил новый звонок, во время того как пользователь уже разговаривает, а телефон имеет 2 канала, то пользователь может переключиться на вторую линию, а первый звонок будет находиться в режиме удержания и к нему можно будет вернуться, если телефон пользователя имеет только одну линию, то положив трубку, он будет переключен на новый входящий звонок. Для подключения экстеншена к VoIP серверу нам нужно придумать пароль, !!! для тестовых целей!!! я использовал 123456qw.

    Все поля которые менялись, выделены красным:


    Далее, включим голосовую почту, для указанного пользователя, для того чтобы пользовтель мог ее проверить, требуется указать пароль, который мы зададим в виде цифр, его ведь будут набирать кнопками на телефоне:


    Экстеншены 200 и 300 создаем аналогичным образом, в результате, у нас должно появится 3 эктеншена — Operator с номером 100, Megatronov с номером 200 и Kukueva с номером 300, остается только применить изменения


    На данном этапе, если настроены и подключены внутренние телефоны, уже можно звонить внутренним абонентам, связь будет работать, но вешний мир нам, пока, не доступен. Для того чтобы звонить наружу и получать звонки, нам требуется создать транк.

    2 Создание транка в Asterisk
    Транк это ничего иное как подключение к провайдеру или внешней линии, через него к нам будут приходить входящие вызовы и уходить исходящие.

    Для упрощения понимания, мы будем использовать какие-то данные для подключения к SIP провайдерам, после регистрации у нас будет логин и пароль для подключения, в примерах, я буду использовать данные пользователей:
    логин: USER_LOGIN
    пароль: PASSWORD
    Остальные данные будут представлены по ходу дела.

    Настраиваем транк для подключения к PCtel.ru

    Сначала мы настроим подключение к провайдеру PCtel.ru, для того чтобы начать полноценно пользоваться их сервисом, требуется зарегистрироваться и закинуть на счет 200 руб (меньше не принимают!). После регистрации у вас будет аккаунт с логином и паролем и внутренний номер абонента (например 000000000)
    Переходим в раздел Tranks и создаем SIP транк т.к. подключение к провайдеру у нас идет по протоколу SIP


    Придумаем имя транка, я назвал pctel.ru. Чувствуете задумку, а?! :)



    ну и вторая часть настройки транка


    ну и теперь в виде текста, поля с настройками:
    PEER Details:

    type=friend
    secret=PASSWORD
    defaultuser=USER_LOGIN@sip.pctel.ru
    fromuser=USER_LOGIN
    fromdomain=sip.pctel.ru
    host=sip.pctel.ru
    port=5060
    insecure=invite
    qualify=no
    disallow=all
    allow=alaw&ulaw&g729&h261
    dtmfmode=rfc2833
    canreinvite=no
    nat=yes


    ну и Regirter Strings

    USER_LOGIN:PASSWORD@sip.pctel.ru/000000000


    Где:
    USER_LOGIN — указываем логин
    PASSWORD — указываем пароль для подключения
    000000000 — указываем номер который нам достался при регистрации

    Настраиваем транк для sipnet.ru

    Тут все примерно тоже самое, также задаем название для транка sipnet.ru:


    ну и вторая часть


    настройки текстом:
    PEER Details:
    username=000000000
    type=friend
    secret=PASSWORD
    qualify=yes
    insecure=invite
    host=sipnet.ru
    fromuser=000000000
    fromdomain=sipnet.ru
    dtmfmode=rfc2833
    disallow=all
    allow = alaw&ulaw&g729
    nat = yes


    Regirter Strings
    000000000:PASSWORD@sipnet.ru

    Где:
    000000000 — SIP ID выдается при регистрации
    PASSWORD — пароль

    Нам требуется сохранить и применить изменения, а также, настроить правила маршрутизации звонков -входящих и исходящих.
    На этом, с транками, мы закончили, если все данные для подключения указаны правильно, мы подключены к SIP провайдерам.

    3 Настраиваем исходящую маршрутизацию звонков — Outbound Routers
    Чтобы звонить на внешние номера, нам необходимо настроить исходящую маршрутизацию. На данном этапе, мы настроим простую систему, из соображений-чтобы все просто работало, остальные навороты в конце статьи.

    Начнем с pctel.ru

    Идем в пункт Outbound Routers (у меня уже был создан исходящий маршрут, то я привел его содержимое) и создаем новый маршрут, назвав его pctel-out, как указано на скриншоте, то что менялось выделено красным:


    Лирическое отступление: Набор номера у PCtel.ru идет следующий 0+7+XXX+XXX+XX+XX т.е. 0 потом код страны 7, потом 10ти-значный номер телефона.
    По этому в пункте: Dial Patterns that will use this Route указан номер 07XXXXXXXXXX, таким образом, все звонки начинающиеся на 07 и содержащие 10 цифр, автоматически будут идти через транк pctel.ru
    В пункте Trunk Sequence for Matched Routes указываем транк через который будет идти звонок, а это у нас pctel.ru.

    Настраиваем маршрутизацию для sipnet.ru

    Тут все действия аналогичны предыдущим, задаем название исходившего маршрута sipnet-out

    У sipnet.ru набор номера идет через 7-ХХХ-ХХХ-ХХ-ХХ таким образом все номера, набор которых идет начиная с 7, будет идти через транк sipnet.ru

    Тестируем работу исходящих вызовов.
    Для этого нам достаточно иметь только 1 мобильный телефон, ну и немного денег на счете sip-провайдеров, чтобы можно было совершать исходящие звонки.
    Звоним, сами себе, сначала через pctel.ru набрав 07-XXX-XXX-XX-XX, где вместо Х вбиваем свой номер мобильного, на мобильном определился номер входящего звонка, затем просто набрав 7-XXX-XXX-XX-XX определился другой номер, видно что маршрутизация звонков работает и идет через разных провайдеров, трубку на мобильном можно не снимать-чтобы деньги не уходили.

    4 Настройка группы вызовов — Ring Group.

    Собственно из названия функции Ring Group понятно что она формирует группу телефонов при звонке на номер группы, телефоны будут звонить у всех членов данной группы, пока кто-то не снимет трубку.
    Телефонный номер группы будет 600, а назовем мы ее Allusers в нее будут входить номера 100,200,300.
    Подробнее на скриншоте, все что менялось, выделено красным

    Расскажу подробнее о том что там изображено:
    Group Description: — название группы
    Extension List: — список номеров входящих в эту группу это номера 100,200,300 -номера вписываются с новой строки
    Extension Quick Pick — в этом меню можно выбрать номера которые будут входить в эту группу они добавятся в Extension List.
    Destination if no answer: — куда будет отправлен звонок, если нет ответа.

    5 Настраиваем входящую маршрутизацию звонков — Inbound Routers

    Можно считать что мы вышли на финишную прямую, как было оговорено ранее, все входящие звонки будут попадать на номер 100, если он не отвечает, то переводиться на номер 200, ну а если и он не отвечает, то на номер группы 600 (чтобы звонили все телефоны 100,200,300).
    Идем в раздел Inbound Routers, ну и заполняем поля, все что менялось подчеркнуто красным.

    Рассмотрим подробнее то что мы тут наделали:
    1 — Названия правила для маршрутизации входящих звонков, я назвал его IncomingCall — чтобы было понятно за что оно отвечает.
    2 — Устанавливем галку signal ringing
    3 — В пункте Set Destination указываем куда будут идти входящие звонки, а это у нас внутренний номер 100

    Сохраняем изменения и применяем настройки, нам остается протестировать работу маршрутизации входящих звонков.
    Для этого нам нужно позвонить на шлюз SIP провайдера и набрать внутренний номер абонента, у sipnet.ru телефоны доступа из городов можно посмотреть на странице customer.sipnet.ru/cabinet/do_showphones у pctel.ru это единый номер +74995034004 (на который хрен дозвонится).
    Пример sipnet.ru для Москвы +7(499)346-42-00 + SIP ID звонок придет на внутренний номер 100.
    Как было оговорено в начале статьи, логика работы АТС будет следующая: звонок приходит на номер 100, если в течении 10 сек номер не отвечает, то звонок уходит на номер 200 если и он не отвечает, то звонок уходит на группу номеров 600 в результате чего должны звонить все телефоны 100, 200 и 300.
    Отлично звонок приходит на номер 100, теперь нам нужно чтобы звонок в случае если номер не отвечает отправлялся на номер 200 а если и он не ответит то на группу с номером 600.
    Для этих целей существует функция Follow Me

    7 Настройка функции следования — Follow Me
    Идем в пунскт с названием Follow Me и там вы выбираем экстеншен к которому мы хотим применить данные правила, выбираем номер 100
    Изменения выделены на скриншоте:

    Подробнее о том что там менялось:
    Ring Time (max 60 sec) указываем значение 10 т.е. если в течение 10 сек на номер 100 не отвечает, то звонок будет перенаправлен на внутренний номер 200, который указан в пункте Destination if no answer:
    Сохраняем изменения и переходим к настройке номера 200, тут все примерно тоже самое, но с небольшими отличиями, подробнее на скриншоте:

    Тут есть небольшие отличия, что если ответа от номера не будет в течении 5 сек, то звонок будут переведен на группу с номером 600.
    Вот так все просто.

    8 Настройка плана набора-DialPlan

    Ну и теперь самое главное, работа с набором номера и преобразование набранного номера клиентом в правила набора устанавливаемые SIP провайдером.

    Собственно идея, я хочу чтобы звонки идущие на городские номера москвы автоматически шли через sipnet.ru, а на все остальные через pctel.ru, суть в том что набор номера у этих провайдеров разный, а пользователям довольно трудно объяснить как и через кого звонить, они обязательно всё забудут или перепутают, по этому у пользователя должен быть один способ набора номера, а остальное на себя берет АТС, а как и что она делает с номером пользователю знать и не надо, да и зачем все эти системы нужны, если они не решают рутинные задачи и такие нюансы приходится держать в голове. По старой традиции звонок наружу идет через 9, этот способ принят почти повсеместно, где его нет, то там скорее всего, настраивал какой-то извращенец «эстет» со своим тонким видением мира.
    В общем набор номера будет иметь следующий вид 9-8-495-ХХХ-ХХ-ХХ это при звонке на городские номера или 9-8-ХХХ-ХХХ-ХХ-ХХ при звонках на мобильные и т.п.
    Почему именно 8?!
    Я ориентируюсь на свою маму, которая даже в мобильном набирает так как она привыкла и ей трудно объяснить что правильно +7, ничего не поделать человек старой закалки, ну мы используем клиенто-ориентированный подход, и это правильно…

    Для начала определимся с переменными и их значениями:

    X — любая цифра 0—9
    Z — любая цифра 1—9
    N — любая цифра 2—9
    [123] — может быть любая из цифр, указанная в квадратных скобках т.е. или 1 или 2 или 3
    . — одна или несколько произвольных цифр;
    | — позволяет удалить все что было указано до этого знака, пример 9|4951234567, тогда набранный номер будет иметь вид 94951234567, увидев данное правило Asterisk отрежет значения указанный перед | таким образом, в транк будет набран номер 4951234567 без 9.

    Для начала, заходим в раздел настройки исходящих маршрутов Outbound Routers и в списке находим маршрут 9_outside, нам он не нужен и мы его удаляем иначе система нам не даст создать правило, где уже есть 9 в наборе.
    После этого переходим к маршруту pctel-out, в пункте Dial Patterns that will use this Route у нас указано правило, которое начинает работать если пользователь набрал 07ХХХХХХХХХХ, т.е. набрал 07 и десятизначный номер мобильного телефона, тогда набор удовлетворяет правилу и звонок уходит через транк pctel.ru
    Запись преобразования номера имеет следующую структуру
    prepend + prefix | match pattern
    Давайте представим что мы хотим позвонить на мобильный тогда запись плана набора будет иметь вид 98|XXXXXXXXXX набор на телефоне будт выгладеть так 980001234567.

    Делаем набранному номеру «обрезание»
    98-префикс, а 0001234567-match pattern, префикс будут удален сервером и набор номера будет следующий 0001234567, а в транк попадет только 10 цифр, чего у PCtel не достаточно и у нас не хватает 07 чтобы правильно выполнить набор номера и совершить звонок, чтобы набор номера был выполнен как надо, нам требуется добавить 07 в начале набора, т.е. склеить номер из частей, одна часть есть у сервера, а пользователь предоставит завершающую часть.

    «Склеиваем» номер для выполнения звонка
    Нам нужно добавить 07 к набору, во тут нам понадобится пункт prepend в правиле обработки номера, добавим туда недостающие цифры.
    Тогда правило принимает вид:
    07+98|XXXXXXXXXX
    При выполнении звонка 98 будет вырезано, а 07 добавлено спереди и набор получает вид 070001234567 что pctel.ru примет на раз и совершит звонок, но это все применительно к звонкам на 10ти-значные федеральные номера мобильных телефонов и тут проблемы нет все будет работать как часы, а т.к. основной трафик у нас будет идти именно через pctel.ru, то у нас появляется проблема, если в вызываемом номере больше 10 знаков, то вызов не пройдет, это может произойти при звонке на городские номера других городов, где вместе с кодом города и городским номером будет больше 10 знаков.
    Что делать?!
    «Пилить» правила набора под 11, 12 значные номера и т.д.-не вариант, правило должно быть одно и применимо ко всем.
    тогда набор принимает вид
    07+98|. переменную (.) я указывал в примерах, вернитесь и взгляните за что она отвечает.
    Таким образом мы создали 1 правило которое удовлетворяет всем требованиям, для выполнения звонка через pctel.ru, само правило имеет вид:


    Сохраним изменения и переходим к редактированию правил sipnet-out
    Как я писал в начале, sipnet.ru у нас будет использоваться для того чтобы звонить на городские номера Москвы.
    Чтобы снова вспомнить правила обработки номера опять приведу исходник:
    prepend + prefix | match pattern
    Телефонные номера москвы бывают в кодах 495 и 499, а набор номера у sipnet.ru начинается на 7, таким образом правила обработки набранного номера принимает вид:
    7+98|495XXXXXXX и 7+98|499XXXXXXX т.е. после 495 может быть 7 знаков, можно забабахать 2 правила и все будет работать, но можно его немного оптимизировать, чтобы количество правил было меньше, тогда правило принимает вид:
    7+98|49[59]XXXXXXX
    где переменная [59] может быть или 5 или 9, тогда у нас получилось что при наборе 98 будет вырезано и набор примет вид 7495ХХХХХХХ
    таким образом, набранные номера в наборе которых присутствует 495 или 499 после которых идут 7 цифр, автоматически будут маршрутизироваться в транк sipnet.ru

    Итог:
    В результате всех наших действий, у нас получился простой сервер VoIP в котором звонки автоматически распределяются между провайдерами в зависимости от того куда звонит пользователь. У нас создан универсальный способ набора номера вида 98ХХХХХХХХХХ, о правилах набора которого пользователю можно не замарачиваться т.к. система сделают всю рутинную работу за него, пользователь просто набирает номер, а что там внутри происходит его не волнует, ему важен результат.
    Прошу обратить внимание что данная конфигурации была представлена исключительно в целях ознакомления, некоторые моменты там сделаны не оптимально и я об этом знаю, но зато она дает получить представление о ее принципах работы и сделать быстрый старт в освоении VoIP в целом и Asterisk в частности.
    Ну и как всегда, нашли ошибку пишите в личку или на email, есть вопросы, прошу в комментарии.

    В ходе написания статьи были использованы ссылки:
    Пример настройки подключения к PCtel.ru
    Пример настройки подключения к Sipnet.ru
    Сообщения пользователя ded, дай бог ему здоровья!

    SMS и SIP шлюз — Мультифон, Asterisk, Kannel 

    В данной статье дается описание того, каким образом можно объединить достоинства Asterisk как PBX или IVR, Kannel как SMS-шлюза используя один телефонный номер.

    Для этого я использовал Freebsd 8.2 на сервере, модем Huawei E171, но можно использовать любой модем МТС или Мегафон производства huawei (так же было проверено на модеме E1551), сим-карту Мегафона. В качестве софтфонов использовались Telephone и SJphone.

    Как уже говорилось Мультифон это услуга подключения SIP к вашему номеру мегафона, позволяющая держать несколько независимых линий и разруливать с помощью IP-АТС. Так как уже было сказано про подключение услуги и работу с Asterisk, приведу это вкратце.

    Вставляем симку в телефон, скачиваем клиент Мультифона, для бета-версии доступны дистрибутивы для linux и Mac OS X.

    Запускаем клиент, регистрируемся, получаем SMS с кодом, вводим код, устанавливаем пароль, убеждаемся, что с клиентом все работает.

    Выключаем клиент Мультифона (важно, т.к. нельзя подключить 2 клиента к мультифону одновременно).

    Отправляем USSD команду для подключения всех возможностей Мультифона *137#, подтверждаем включение услуги.

    Добавляем в /etc/rc.conf или в /etc/default/kannel:
    kannel_bearerbox_enable="YES"
    kannel_smsbox_enable="YES"
    asterisk_enable="YES"
    

    Установка и настройка Asterisk


    cd /usr/ports/net/asterisk
    make install clean
    service asterisk start
    

    В интернете есть много описаний, поэтому приведу только конфиг, основанный на официальном конфиге мегафона с некоторыми поправками и пояснениями.

    Конфигурация Asterisk:
    ;#/usr/local/etc/asterisk/sip.conf
    [general]
    tcpenable=yes
    allow=all
    
    register => 79271111111@multifon.ru:paSSwoRD:79271111111@193.201.229.35:5060/79271111111
    
    [multifon-out]
    dtmfmode=inband
    username=79271111111
    type=peer
    secret=paSSwoRD
    host=sbc.megafon.ru
    fromuser=79271111111
    fromdomain = multifon.ru
    port=5060
    context=multifon-in
    insecure=port,invite
    canreinvite=no ;# без этого параметра исходящий звонок на принимающем телефоне сразу прерывается
    
    [100];#софтофоны или другие sip-телефоны настраиваем в соответствии с этими разделами
    type=friend
    host=dynamic
    secret=pass100
    context=phones
    username=100
    nat=rfc3581 ;# без этого параметра не работает связь между софтфонами
    
    [101]
    type=friend
    host=dynamic
    secret=pass101
    context=phones
    username=101
    nat=rfc3581
    

    ;#/usr/local/etc/asterisk/extensions.conf
    
    ;# Входящие вызовы на этот номер
    [multifon-in]
    exten=> 79271111111,1,Dial(SIP/100,60,t)
    ;# Исходящие вызовы, определяется маской
    [out]
    exten=>_7XXXXXXXXXX,1,Dial(SIP/multifon-out/${EXTEN})
    exten=>_8XXXXXXXXXX,1,Dial(SIP/multifon-out/${EXTEN}) ;#позволяет звонить через 8
    exten=>_+7XXXXXXXXXX,1,Dial(SIP/multifon-out/${EXTEN}) ;#позволяет звонить через +7
    ;#exten=>_7XXXXXXXXXX,1,Dial(SIP/${EXTEN}@multifon-out,30,r) ;#мегафоновский вариант
    ;# Локальные звонки между SIP телефонами
    [local]
    exten=>_1XX,1,Dial(SIP/${EXTEN},60,rt)
    [phones]
    include => multifon-in ;#честно говоря, не знаю зачем эта строка здесь у мегафона
    include => local
    include => out
    

    ;#/usr/local/etc/asterisk/rtp.conf
    [general]
    rtpstart=6001 ;#мегафон утверждает, что их RTP работает от 6001 порта
    rtpend=20000
    

    Запускаем консоль:
    asterisk -vvvvr
    

    перезагружаем конфигурации с помощью консоли:
    reload
    

    Проверяем подключение к мультифону и софтфонам:
    sip show registry
    sip show peers
    


    Теперь следует включить работу телефона совместно с SIP запросив следующий URL:
    https://sm.megafon.ru/sm/client/routing/set?login=79XXXXXXXXX@multifon.ru&password=PASSWORD&routing=2

    Проверяем что изнутри и снаружи звонки проходят.

    Подготовка модема


    Вынимаем симку из телефона, вставляем ее в модем.
    Вставляем модем в сервер, проверяем что устройства найдены:
    ls /dev | grep cuaU
    ls /dev | grep ttyU
    

    Если наших устройств не видно, то пересобираем ядро, добавив
    device u3g
    

    Установка и настройка Kannel


    Рекомендуется устанавливаеть kannel из SVN, однако я не испытывал проблем и с данной версией, поэтому установим его из портов.
    cd /usr/ports/www/kannel
    make install clean
    service kannel start
    

    Стоит отметить, что Kannel не создает сам пользователя, поэтому сделаем это сами:
    adduser
    

    А так же он не заботится о создании директории для PID файлов, сделаем сами:
    mkdir /var/run/kannel
    chown kannel /var/run/kannel
    

    Конфигурация Kannel:
    #/usr/local/etc/kannel.conf
    
    group = core
    admin-port = 13000
    admin-password = " paSsWoRd "
    log-file = "/var/log/kannel/bearerbox.log"
    log-level = 1
    access-log = "/var/log/kannel/access_kannel.log"
    store-file = "/var/log/kannel/store_sms"
    smsbox-port = 13001
    dlr-storage = internal
    sms-resend-retry = 1
    
    group = smsc
    smsc = at
    smsc-id = huawei0
    modemtype = huawei0
    device=/dev/ttyU0.2 # либо /dev/ttyU0.3, если он существует
    sms-center="+79271111111"
    my-number="+79271111111"
    keepalive=5
    
    group=modems
    id=huawei0
    name="huawei0"
    
    group = smsbox
    bearerbox-host = localhost
    sendsms-port = 13003
    global-sender = "+79271111111"
    log-file = /var/log/kannel/smsbox.log
    log-level = 0
    access-log = /var/log/kannel/access_smsbox.log
    
    group = sendsms-user
    username = "user"
    password = "paSsWoRd"
    concatenation = true
    max-messages = 20
    
    
    #Перенаправляем sms на php скрипт
    group = sms-service
    keyword = default
    post-url = "http://localhost/service.php?tel=%p&time=%t&coding=%c&smsc=%i"
    concatenation = true
    max-messages = 0 #для того чтобы отправлять sms вручную с помощью smssend
    


    Еще раз перезапускаем kannel
    service kannel restart
    

    Убеждаемся что подключение к SMSC в статусе online по адресу
    localhost:13000/status

    Русскоязычные sms приходят и уходят в кодировке ucs-2be, поэтому преобразуем их. Например в PHP:
    $text=urlencode(iconv("utf-8","ucs-2be",$text));#
    

    Отправка SMS:
    file_get_contents("http://localhost:13003/cgi-bin/sendsms?smsc=$smsc&username=user&password=paSsWoRd&coding=2&to=$to&text=$text");#
    

    coding=2 соответствует опять же кодировке ucs-2be.

    Не забываем открыть порты (в том числе порты для RTP, т.к. иначе не будет звука/видео), если включен ipfw, добавляем в скрипт или конфиг:
    ipfw add allow tcp from any to ${IpOut} 5060 via ${LanOut} #SIP
    ipfw add allow udp from any to ${IpOut} 5060 via ${LanOut} #SIP
    ipfw add allow udp from any to ${IpOut} 6000-20000 via ${LanOut} #RTP
    


    Таким образом, мы имеем работающий SMS-шлюз и колл-центр на одном номере. Помимо этого, можно организовать IVR с помощью Asterisk, чтобы получать информацию в цифровом виде не только по SMS, но еще и с помощью интерактивного голосового взаимодействия с конечным пользователем.

    Прямое подключения симки к Asterisk описано здесь, но стоит заметить, похоже, при первом подключении модем переходит в режим «только модем» и при повторном подключении исчезают устройства, поэтому передергиваем модем и меняем параметры на
    audio=/dev/cuaU0.1      ;# Порт для аудио
    data=/dev/cuaU0.2       ;# Порт для команд
    

    Если слишком громко, то меняем параметры на
    rxgain=0
    txgain=0
    

    CentOS 7 + FreePBX 12

    Устанавливаем CentOS 7  х86_64 с минимальным комплектом программ.

    http://www.centos.org/


    rpm -Uvh http://mirror.yandex.ru/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 
    Ограничиваем количество установленных версий пакетов до 3-х (например количество версий установленного ядра):
    nano -w /etc/yum.conf
    installonly_limit=3
    yum install net-tools
    ifconfig

    Узнали свой ip. Далее подключаемся по SSH к этомe ip. Будет удобнее копипастить команды)))

    Устанавливаем FreePBX 12

    Отключаем систему принудительного контроля доступа

    sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config
    reboot
    Запускаем sestatus
    Если видим строку "SELinux status: disabled" значит все ок
    Обновляем систему:

    yum -y update
    yum groupinstall core
    yum groupinstall base


    Устанавливаем Дополнительные Необходимые Зависимости

    yum install gcc gcc-c++ lynx bison mysql-devel php php-mysql php-pear php-mbstring tftp-server httpd make ncurses-devel libtermcap-devel sendmail sendmail-cf caching-nameserver sox newt-devel libxml2-devel libtiff-devel audiofile-devel gtk2-devel subversion kernel-devel git subversion kernel-devel php-process crontabs cronie cronie-anacron wget vim php-xml uuid-devel libtool sqlite-devel

    Иногда при копипасте кода установки может вылезать ошибка, что какой-то пакет не найден. На самом деле все правильно, просто глюк копипаста. Решение вбить руками команду или попробовать стереть название проблемного пакета вместе с пробелами по краям и вбить руками только его.


    IPTables

    Если Вы ставите FreePBX не на чистую систему временно отключите IPTables. Внимание! Не забудьте включить снова после настройки АТС
    текущее состояние:   
    chkconfig iptables --list
    Отключите Iptables:
    chkconfig --level 0123456 iptables off
    Или остановите службу до перезагрузки:
    service iptables stop


    Установка MySQL

    yum install wget
    wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
    rpm -ivh mysql-community-release-el7-5.noarch.rpm
    yum install mysql-server
    chkconfig --level 345 mysqld on
    service mysqld start

    Стартуем Apache

    chkconfig --level 345 httpd on
    service httpd start

    Устанавливаем PearDB

    pear channel-update pear.php.net
    pear install db-1.7.14

    Перезапускаем машину

    reboot

    Установите зависимости для Google Voice

    cd /usr/src
    wget https://iksemel.googlecode.com/files/iksemel-1.4.tar.gz
    tar xf iksemel-*.tar.gz
    cd iksemel-*
    ./configure
    make
    make install

    Добавляем пользователя Asterisk

    adduser asterisk -M -c "Asterisk User"

    Устанавливаем и конфигурируем Asterisk

    cd /usr/src
    wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
    wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4-current.tar.gz
    wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
    git clone https://github.com/akheron/jansson.git
    wget http://www.pjsip.org/release/2.2.1/pjproject-2.2.1.tar.bz2

    Компилируем и устанавливаем DAHDI и LibPRI
    cd /usr/src
    tar xvfz dahdi-linux-complete-current.tar.gz
    tar xvfz libpri-1.4-current.tar.gz
    rm -f dahdi-linux-complete-current.tar.gz libpri-1.4-current.tar.gz
    cd dahdi-linux-complete-*
    make all
    make install
    make config
    cd /usr/src/libpri-1.4.*
    make
    make install

    Компилируем и устанавливаем pjproject
    cd /usr/src
    tar -xjvf pjproject-2.2.1.tar.bz2
    cd pjproject-2.2.1
    CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound\
      --disable-resample --disable-video --disable-opencore-amr --libdir=/usr/lib64
    make dep
    make
    make install

    Компилируем и устанавливаем jansson
    cd /usr/src/jansson
    autoreconf -i
    ./configure --libdir=/usr/lib64
    make
    make install

    Компилируем и устанавливаем Asterisk
    cd /usr/src
    tar xvfz asterisk-13-current.tar.gz
    rm -f asterisk-13-current.tar.gz
    cd asterisk-*
    contrib/scripts/install_prereq install
    ./configure --libdir=/usr/lib64
    contrib/scripts/get_mp3_source.sh
    make menuselect
    make
    make install
    make config
    ldconfig

    Установка Asterisk-Extra-Sounds
    mkdir -p /var/lib/asterisk/sounds
    cd /var/lib/asterisk/sounds
    wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-ru-wav-current.tar.gz
    tar xfz asterisk-extra-sounds-en-wav-current.tar.gz
    rm -f asterisk-extra-sounds-en-wav-current.tar.gz
    # Скачать широкополосный звук
    wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-g722-current.tar.gz
    tar xfz asterisk-extra-sounds-en-g722-current.tar.gz
    rm -f asterisk-extra-sounds-en-g722-current.tar.gz

    Устанавливаем и конфигурируем  FreePBX

    cd /usr/src/
    wget http://mirror.freepbx.org/freepbx-12.0.3.tgz
    tar vxfz freepbx-12.0.3.tgz

    Выставляе права
    chown asterisk. /var/run/asterisk
    chown -R asterisk. /etc/asterisk
    chown -R asterisk. /var/{lib,log,spool}/asterisk
    chown -R asterisk. /usr/lib64/asterisk
    mkdir /var/www/html
    chown -R asterisk. /var/www/

    Несколько небольших изменений Apache.
    sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini
    cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf_orig
    sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf
    service httpd restart

    Конфигурируем базуданных MYSQL. 
    cd /usr/src/freepbx
    export ASTERISK_DB_PW=amp109
    mysqladmin -u root create asterisk 
    mysqladmin -u root create asteriskcdrdb 

    Выставляе права MYSQL .
    mysql -u root -e "GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';"
    mysql -u root -e "GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';"
    mysql -u root -e "flush privileges;"

    Перезагрузка Asterisk и инсталляция FreePBX.
    cd /usr/src/freepbx
    ./start_asterisk start
    ./install_amp --installdb --username=asteriskuser --password=${ASTERISK_DB_PW}
    amportal chown
    amportal a ma installall
    amportal a reload
    amportal a ma refreshsignatures
    amportal chown


    ln -s /var/lib/asterisk/moh /var/lib/asterisk/mohmp3
    amportal restart

    http://localhost/admin
    http://yourlocalipaddress/html

    Поиск по этому блогу