Asterisk от простого — к сложному

Вступление


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

Я ничего не имею против надстроек к Астериску, которые облегчают жизнь, но я боюсь, что скоро появился поколение администраторов Астериска, которые консоли в живую не видели ниразу.

Целью моих статей является желание показать, что астериск красив сам по себе, без дополнительных надстроек, что можно, используя минимальные, ускоряющие работу скриптовые языки — творить чудеса. Хочется показать, ищущим и желающим познать новое, людям нюансы и тонкости работы системы.

Что такое Астериск


Про астериск есть множество статей с описанием функционала и возможностей. Новичку надо знать самое главное — на начальном этапе ( в качестве обучения ) Астериск в состоянии выполнять любые задачи связанные с телефонией, ну или практически любые.
Есть ряд неудобств, либо ограничений, которые присущи работе с Астериском, постараемся их устранять в процессе ознакомления с системой.
Также стоит понимать, что высоконагруженную систему на астериске построить крайне тяжело — для этого есть другие решения.
Для простоты можно считать, что астериск целесообразно использовать в системах, где количество одновременных звонков не превышает 100.

С цего начать


Честно просмотрев 10 страниц результатов поискового запроса Asterisk на хабре, понял, что начинать надо сначала, но без фанатизма. Рассказывать о установке не буду, но о структуре Астериска и тому, что нам понадобится при работе — будем говорить. Говорить мы будем о Asterisk 1.8, но принципы работают на всех версиях астериска.

Структура системы


Астериск, как любое приложение, работает на основании конфигурационных файлов, коих достаточно большое множество. Честно говоря, я до сих пор не знаю роли половины конфигов. Для нашей работы на начальном этапе нам понадобится знать и понимать настройки, хранящиеся в файлах sip.conf и extensions.conf. Отмечу, что при стандартной установке все файлы конфигов хранятся в /etc/asterisk/.

Файл sip.conf

Данный файл содержит описание базовых параметров работы протокола SIP, настройки NAT, кодеков и самое главное — учетных записей. Позже я буду рассказывать о том, каким образом хранить учетные записи в базе данных.

Дефолтный конфиг sip.conf позволяет запускать Астериск, при условии прописывания учетных записей, и он будет работать, слушая при этом входящие соединения на всех интерфейсах.

Учетные записи в sip.conf могут быть трех типов:
— user ( пользователь )
— peer ( пир )
— friend ( пользователь+пир )

Я почти всегда настраиваю учетные записи как friend, по причине того, что она сочетает в себе все функции как пира так и пользователя.

Простой пример учетной записи выглядет так:

[1001]; название пира, его будем использовать в дальнейшем, для работы с правилами звонков, ;cовпадение с логином необязательно
type=friend; тип учетной записи
host=dynamic; разрешаем логин с разных IP адресов
username=1001; имя пользователя
secret=1234; пароль
context=default; контекст, о нем чуть позже
disallow=all; запрещаем все кодеки
allow=alaw; разрешаем кодек G.711a ( alaw )

Такой записи достаточно, чтобы зарегистрироваться на свежем сервере с параметрами пользователя 1001 и паролем 1234.

Создаем две записи с названиями 1001 и 1002 в самом низу файла sip.conf.

Файл extensions.conf

Данный файл — ключевой файл в системе Asterisk, так как в нем описываются правила работы с любым голосовым трафиком, появившимся в системе. Это как статическая таблица маршрутизации. О хранении данных в базе данных будем говорить позже.

Структура файла вполне проста:
-внутри файла прописываются глобальные параметры, в том числе и переменные
-далее файл разбит на контексты, каждый из которых живет своей жизнью и правила работы звонков внутри каждого контекста могут быть своими.

Контексты нужны, для разграничения поведения телефонного звонка и отделения одних групп пользователей и их звонков от других. Контексты позволяют в пределах одной системы создавать множество подсистем со своими правилами и пользователями (аналог виртуальных машин).

Контексты обозначаются как [НАЗВАНИЕ КОНТЕКСТА].
Структура контекста следующая:

exten => МАСКА, ПОРЯДОК, ДЕЙСТВИЕ
, где
МАСКА — маска номера, либо статически заданный номер
ПОРЯДОК — порядок действия для конкретной МАСКИ (возможна последовательность действий)
ДЕЙСТВИЕ — команда, выполняемая системой в случае попадания звонка на данное правило.

Наши тестовые пользователи созданы в контексте default, поэтому, если просто запустить астериск и позвонить на любой номер, можно услышать тестовое демо-меню Астериска.

Открываем на редактирование extensiond.conf, делаем поиск по [default] и в следующей после строки [default] смело вносим правило локального звонка:

Статическое правило:
exten => 1001,1,Dial(SIP/1001)
exten => 1002,1,Dial(SIP/1002)

Динамическое правило:
exten => _XXXX,1,Dial(SIP/${EXTEN}); тут X говорит о том что будет набрана любая цифра, о способах; составления масок ( экстеншинов ) — позже.

Данные правила позволят совершить локальный звонок между тестовыми пользователями.

Напоследок: Работа с консолью сервера


Сервер запускается командой asterisk из под рута, либо /usr/sbin/asterisk.
Для захода в консоль надо из под рута ввести asterisk -r, либо /usr/sbin/asterisk -r (далее, для удобства, будем использовать asterisk, подразумевая, что мы говорим о работе с испольняемым файлом сервера).

Для того, чтобы Астериск перечитал конфиги из консоли достаточно выполнить reload.

Домашняя работа

1.Совершить локальный звонок.
2.Ознакомиться с примерами конфигурации, которые находятся в sip.conf и extensions.conf
3.Добавить в закладки www.voip-info.org/wiki/view/Asterisk

Спасибо за внимание.

Огромное спасибо за отзывы и замечания.
Хочу отметить, что статья расчитана на людей, которые начинают изучать Asterisk и направлена на облегчение им жизни. В перспективе хочу учесть все замечания, и делать и писать новые статьи согласно пожеланий, при этом выдерживая общую линию развития от простых вещей к сложным.
Приятно получать критику, буду стараться, и в случае неточностей исправляться.
Спасибо.
Share post

Comments 41

    +1
    Хорошее начало, а по подробней про диал планы Вы можете рассказать?
      0
      Тоже жду.
        0
        Спасибо, я старался.
        Пишу следующий пост, постараюсь аккуратно осветить тему диалпланов, чтобы не сломать мозг читателю.
        Пока думаю писать по одному посту в день. а там посмотрим, к ак будет получаться.
          0
          Открыв статью, я с начало очень обрадовался, ибо действительно сейчас 90% администраторов Asterisk в глаза не видели… но в дальнейшем Вы меня разочаровали… уж «пардонте».
          Зачем писать прямолинейные dialplan-ы если есть AEL ???
            0
            Есть момент связанный с AEL о нем тоже хочется сказать, но обычно в первую очередь говорится о стандартном конфигурационном файле, так как на его базе построены почти все надстройки астериска.
            Синтаксис AEL легче воспринимается после полного понимания логики стандартного конфига.

            Сам AEL интересен, но еще более интересны внешние штуки типа PHPAGI, к ним и хочу привести читателя, а он уже пусть решает что ему нужно.
              0
              AEL, который транслируется в обычный диалплан? А вы пробовали отлаживать сложные диалпланы на AEL? Это просто мука. Нет, AEL — в топку!!!
              А Astrisk есть четыре родных способа обрабатывать звонки (писать диалпан):
              — pbx_config
              — pbx_ael
              — AGI / FastAGI
              — pbx_lua
              AEL среди них самый убогий :-)
            0
            Я бы тоже рассказал, но карма не позволяет. Если что, можем пообщаться в jabber или, на крайний случай, icq. Кое-что у себя в склерознике выкладываю.
              0
              А Вы сюда копию выкладывайте тоже — asteriskpbx.ru.
                0
                Пока мелочёвку к себе на сайт выкладываю. Над предложением подумаю.
                0
                Хабралюди, я рискну и попрошу вас накидать плюсов в карму FSA — совершенно незнакомому мне человеку, который похоже рубит в * а тут, думаю, такие нужны. Я специально полез посмотреть, человека слили ни за что — за пару неудобных комментов в топике про Windows. И сейчас он похоже безуспешно крутится в QA, а мог бы топик по asterisk наваять.
                Давайте хоть дадим человеку аванс что-ли а?
                *прижал уши и смотрит на крмографы*
                  0
                  Первый раз было за что. Потом за комментарии с +2 ушёл.
              0
              Эх, вот такую бы статья да год назад. Очень не хватало дельного описание в своё время, когда ставил его.
                0
                Еще не все потеряно, можно накрутить кучу плюшек уже на существующую систему.
                +1
                Можно еще сделать уточнение:
                user — используется для исходящих соединения
                peer — принимает только входящие звонки

                Можно так же применять:
                dialplan reload — для того, чтобы астериск перечитал конфиг extensions.conf
                sip reload — для sip.conf

                Сам накатал гайд по составлению простого IVR (голосового дерева), но за неимением кармы не могу ее опубликовать, так что если есть желающие могу передать ее желающему, для дальнейшей публикации.
                  0
                  насчет user и peer — и та и та опция используются как для входа так и для исхода. разница в способе авторизации, и возможностях создавать транковые стыки.

                  По поводу способов релоада и работы с консолью — буду писать еще отдельно. Так как вариантов полно, возможности огромные. Консоль астериска, как по мне, очень продуманная вещь, как для диагностики проблем, так и для работы с системой.

                    0
                    насчёт peer соглашусь, а вот насчет user:

                    user: SIP запись, через которую вызовы могут поступать из вне в Asterisk (телефон, который может только совершать вызовы). Пользователи, для которых назначены, доступные им, сервисы в определенных для них контекстах. Отсюда, да и на опыте проверено :)

                    Жду от вас дальнейших статей и с удовольствием их покомментирую. Очень хочется увидеть статьи про модули и работу с ними(chan_ss7, кодеки и т.п.), конфигурирование работы с платами Digium, call-файлы :)
                      0
                      Пардон, ссылочку забыл asterisk.ru/knowledgebase/Asterisk+config+sip.conf
                        0
                        Пожелания приняты. Спасибо. Буду планировать порядок, чтобы изложение было логичным и последовательным.
                          0
                          и не забудьте про конференции и очереди звонков ;)
                • UFO just landed and posted this here
                    0
                    Я думаю вам будет полезна эта ссылочка — asterisk.ru/knowledgebase/Asterisk+dimensioning
                    Тут многое зависит от того какие протоколы будете использовать, чего с ними делать и какие сервисы на их основе делать.

                    В статье про программные АТС(http://habrahabr.ru/blogs/voip/122215/), говорилось что Астериск плохо масштабируется.
                    +1
                    Думаю можно добавить, что не обязательно перезагружать весь Астериск, можно воспользоваться командами в его консоли «sip reload» и «dialplan reload».
                    P.S. Если статья нацелена на новичков, то думаю лучше бы пояснить что за user/peer/friend, вот картинка из книжки, думаю с ней, даже пояснения не нужны будут:

                    и пару слов о кодеке — почему G711 и что за a-law.
                    P.P.S. Пишите дальше, полно новичков, которых количество ресурсов и информации об Астериск шокировало, будут вам благодарны.
                      0
                      Да простит меня автор, но можно я отвечу:

                      g711 — кодек доступный в астериске сразу в после установки(в отличии от того же g729, который необходимо где нибудь «тырить» именно под железно станции астериска)

                      alaw — алгоритм аналогового сжатия используемый в кодеке g711, так же существует и алгоритм Mu-law(в конфигах астериска указывается как ulaw)
                        0
                        Ну раз уж такая пьянка, думаю новичку может быть интересно, что G711 один из самых распространенных стандартов в области телефонии. Можно дать ссылку на Википедию — ru.wikipedia.org/wiki/G.711
                        Откуда можно выяснить второй нюанс, почему именно a-law, и узнать, что a-law используется в Европе, а µ-law, в Америке с Японией.
                        P.S. Недавно защищал диплом на Астериск, и пытаюсь обращать внимание на подобные мелочи.
                          0
                          Внесу свои пять копеек. Достоинство G711 в том, что он меньше остальных кодеков «коверкает» передаваемые данные (не жмет, не оптимизирует). Если через ваш asterisk время от времени будет проходить что-нибудь отличное от голоса, G711 — ваша единственная надежда. А 80 kbit/s, которые он занимает, по нынешним меркам не так много.
                            0
                            А я думал 64Кб/с…
                              0
                              64 — payload
                              80 — вместе с заголовками ip/udp/rtp
                              95 — вместе с езернетом

                              www.bandcalc.com/
                            0
                            Ну и новичок наверняка столкнется с тем что иногда alaw/ulaw называют PCMA/PCMU. А сам G711 принято называть PCM.

                        +1
                        Новичкам обязательна к прочтению книга O'REILLY «Asterisk: будущее телефонии».
                        Очень просто и доступно описано. Легко читается. Есть как бумажный вариант, так и официальный пдф.
                          +1
                          Еще рекомендую посмотреть на запрошенный, но очень полезный в смысле обучения дистрибутив AstPbx — asteriskpbx.ru/display/AstPBX, а именно скачать конфиг файлы.
                          В них много интересного есть для новичка.
                            0
                            заброшенный :-)
                          0
                          А скажите пожалуйста, когда могут пригодиться все эти сложные конфиги и диалпланы? В моем понимании, достаточно просто настроить систему так, чтобы звонок изнутри на внутренний телефон роутился напрямую, а все остальные — обычным способом и все, разве нет?
                            0
                            В реальной жизни, люди хотят использовать все фишки астериска. Например IVR, DISA, голосовую почту, подключаемые базы «звонящих», например дергать имена из 1С и показывать менеджерам.

                            Ну или самое частое что я вижу, это сложная маршрутизация звонка. Звонок из города на такой то внутренний, если не взяли, другому менеджеру, если он не взял то начальнику, если начальник не взял то в IVR/секретаря или на войсмейл.
                              0
                              «обычный способ» предполагает как минимум выставление callerid и дополнение номера (дописывание префикса, +7 или 8), что в случае нескольких провайдеров не совсем линейно.
                              0
                              Когда понадобится ивр, голосовое меню, переадресация и различным критериям, факсы, конференции и другие сервисы :)
                                0
                                Самая больная тема на мой взгляд это хождение факсов, а именно t.38.
                                С хождением факсов по 711 проблема только одна, на стыках у провайдеров он пережимается и факсу конец.

                                Вот бы кто-нибудь четко емко и с конфигами рассказал :))
                                  0
                                  (мой любимый вопрос)
                                  Попадалась ли вам конфигурялка астериска по принципу «от простого к сложному»?
                                  Тоесть где бы все навороты строились на основе базовых блоков по усложнению, а не сразу генерацией диалплана из кривого пхп.
                                    0
                                    Целью моего коммента является желание показать, что код астериска монструозен, уродлив и неэффективен, поэтому железа надо использовать несколько больше чем вы могли бы ожидать. А использовать его стоит в случае, когда надо PSTN затерминировать.
                                    Если нужно обслуживать сип клиентов, то подключить его потом к опенсипсу.
                                    Во всех остальных случаях нужно использовать yate.
                                      0
                                      Спасибо за статью, как раз задумывался о знакомстве с Asterisk.
                                        0
                                        Жаль, автор давно не заходил на хабр.
                                        Надеюсь, вернётся с новым материалом.
                                          0
                                          А вот теперь похоже что не вернется. ))
                                          Инвайт получил и всё.

                                        Only users with full accounts can post comments. Log in, please.