Меню Рубрики

Установка кодека для астериска

Как добавить кодеки в Asterisk

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

А потому можно и разобрать уже опубликованные заметки присутствующие во всемирной паутине но с акцентом на свое видение.

Asterisk развернут по заметке опубликованной на моем блоге:

$ uname -a && lsb_release -a && asterisk -V

Linux srv-host 3.19.0-25-generic #26

14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

No LSB modules are available.

Description: Ubuntu 14.04.4 LTS

На сколько я вычитал, к одек G.729 позволяет вести много большее количество разговоров при ограниченном канале, что сразу же поднимает его эффективность. В обычном использовании VOIP телефонии используется 64Кбит/с (кодек G711), а тут один звонок уже 8Кбит/с — выгода очевидна.

Вывести информацию по типу процессора и используемым инструкциям процессора:

$ cat /proc/cpuinfo | grep -E ‘model name|flags’

model name : AMD A8-3850 APU with Radeon(tm) HD Graphics

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl extd_apicid pni cx16 popcnt hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch arat vmmcall

model name : AMD A8-3850 APU with Radeon(tm) HD Graphics

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl extd_apicid pni cx16 popcnt hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch arat vmmcall

из этого вывода для текущей заметки является то какие инструкции поддерживает процессор, в моем случае это лишь: sse4a, именно для этой инструкции в дальнейшем и нужно будет скачать уже откомпилированный бинарник.

После идет на сайт: http://asterisk.hosting.lv — нажимаю на Asterisk 13 (буду скачивать бинарники, файла с расширением *.so ) и скачиваем к себе необходимый кодек тот который Вам нужен, а узнать действительно ли мне его нужно устанавливать, может все же проверить какие присутствуют:

Информация по текущим установленным модулям:

$ sudo asterisk -rx «core show codecs» | grep g726

5 audio g726 (G.726 RFC3551)

6 audio g726aal2 (G.726 AAL2)

/usr/lib/asterisk/modules/codec_g726.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, Build >

Файлы представленные на сайте кодеков имеет следующий формат:

  • g729 → тип кодека
  • ast130 → версия Asterisk 13
  • gcc4 → тип компилятора
  • glibc → библиотеки
  • x86_64 → разрядность процессора и ОС
  • core2 — тип процессора (поколение)
  • sse4 → набор инструкций

Из представленного скриншота ниже видно что к примеру у меня нет кодека g729 — вот установку его и разберу.

srv-host*CLI> quit

Asterisk cleanly ending (0).

Executing last minute cleanups

Скачиваю бинарник файла кодека под свои инструкции которыми может оперировать мой процессор.

Копирую скачанный кодек в папку modules:

$ sudo mv codec_g729-ast130-gcc4-glibc-x86_64-core2-sse4.so /usr/lib/asterisk/modules/

Устанавливаю скачанный кодек:

srv-host*CLI> core reload

srv-host*CLI> module load codec_g729-ast130-gcc4-glibc-x86_64-core2-sse4.so

Проверяю видит ли Asterisk добавленный кодек:

srv-host*CLI> core show translation

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

srv-host*CLI> module unload -f codec_g729-ast130-gcc4-glibc-x86_64-core2-sse4.so

srv-host*CLI> quit

Asterisk cleanly ending (0).

Executing last minute cleanups

$ sudo rm /usr/lib/asterisk/modules/codec_g729-ast130-gcc4-glibc-x86_64-core2-sse4.so

$ sudo /etc/init.d/asterisk restart

srv-host*CLI> core show translation

$ sudo cp codec_g729-ast130-gcc4-glibc-athlon-sse.so /usr/lib/asterisk/modules/codec_g729.so

$ sudo asterisk -rx «module load codec_g729.so»

Unable to load module codec_g729.so

Command ‘module load codec_g729.so’ failed.

Это по тому что, что я не внимателен и библиотека для 32‘битной архитектуры

$ sudo file /usr/lib/asterisk/modules/codec_g729.so

/usr/lib/asterisk/modules/codec_g729.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, Build >

codec_g729-ast130-gcc4-glibc-x86_64-opteron.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, Build >

$ sudo mv codec_g729-ast130-gcc4-glibc-x86_64-opteron.so /usr/lib/asterisk/modules/codec_g729.so

$ sudo asterisk -rx «module load codec_g729.so»

$ sudo /etc/init.d/asterisk restart

Stopping Asterisk PBX: asterisk.

Starting Asterisk PBX: asterisk.

$ sudo /etc/init.d/asterisk status

если не запущен то запускаем:

$ sudo /etc/init.d/asterisk start

Starting Asterisk PBX: asterisk.

$ sudo asterisk -rx «core show translation» | grep g729

ulaw alaw gsm g726 g726aal2 adpcm slin slin slin slin slin slin slin slin slin lpc10 g729 speex speex speex g722 testlaw opus amr amrwb

g729 15000 15000 15000 15000 15000 15000 9000 17000 17000 17000 17000 17000 17000 17000 17000 15000 — 15000 23000 23000 17250 15000 17250 15000 23000

у меня в колонке символ дефиса ( «-» ) — это значит что в системе нет данного кодека, не совсем точно подходит архитектура скачанного модуля и тип используемых инструкций.

У меня было, что я не правильную версию модуля скачал, т. е. От другой версии Asterisk — и Asterisk вообще упал — так что сперва в тестовых условиях обкатайте, а уже потом если действительно нужно на боевой системе:

Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)

$ sudo /etc/init.d/asterisk status

* Asterisk PBX is not running

Jul 10 17:08:11 srv-host kernel: [18294.737419] asterisk[3756]: segfault at 40 ip 00007f1f7040c911 sp 00007ffc5e582f48 error 4 in asterisk[7f1f70349000+246000]

По мне так это из-за модуля он конфликтует с используемым типом процессора (у меня же Asterisk установлен внутри Virtualbox — я тестирую). Ладно так и быть удаляю и попробую позже на домашней системе:

$ sudo rm /usr/lib/asterisk/modules/codec_g729.so

$ sudo /etc/init.d/asterisk restart

Stopping Asterisk PBX: asterisk.

Starting Asterisk PBX: asterisk.

$ sudo asterisk -rx «core show translation» | grep g729

вывода нет значит и модуля тоже нет, Asterisk сейчас работает и в логах нет ошибок. Во общем хорошо.

Хоть я и не достиг поставленной цели данной заметкой, но в то же время узнал много нового, а именно ни в коем случае не нужно все делать на продуктиве, лучше потратить некоторое время на тест, обкатать а уже только потом трижды подумать и применять на боевой предварительно сделав бекап. И я считаю, что за сервис должен отвечать только один человек, т. к. если их много то исправив как Вам кажется что-то неправильное на Ваш взгляд Вы все порушите, потому что это был чей-то костыль. А когда весь функционал ведет один человек (к примеру Я сам), то я знаю что и для чего когда либо делалось. На этом я прощаюсь, действия данной заметки я разберу на боевой системе чуть позже и обязательно поделюсь результатами, а пока все, до новых встреч, с уважением автор блога — ekzorchik.

Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:

Поблагодари автора и новые статьи

Карта МКБ: 4432-7300-2472-8059
Yandex-деньги: 41001520055047

Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.

источник

Установка кодеков Asterisk G729 и G723

Кодеки G.729 и G.723 используются в Asterisk для того, чтобы экономить полосу пропускания между сервером Asterisk и IP-телефоном.
По сравнению с стандартным кодеком G.711, кодек G.729 потребляет в 3 раза меньше полосы пропускания: 24 кбит/сек по сравнению с 80 кбит/сек в кодеке G.711(alaw/ulaw).
В данной статье мы разберем, как происходит установка кодеков на сервер Asterisk.

Первым делом необходимо определить следующие параметры системы:

  • Версию Asterisk (1.8,11,13 и т.д.)
  • Разрядность ядра Linux (32 или 64 бит)
  • Тип процессора (Opteron, Pentium, Core2 и т.д.)
  • Набор инструкций процессора
Читайте также:  Установка водяного пожаротушения сокращенно

В консоли Linux выполняем команду:

Выхлоп этой команды даст нам понимание о том, что за процессор используется на нашем сервере Asterisk.

Вывод этой команды показывает нам разрядность процессора.

Зайдя в консоль Asterisk (asterisk -rvvv) и выполнив команду
core show version
узнаем версию Asterisk.

Далее, обладая всей этой информацией, отпрвляемся на сайт http://asterisk.hosting.lv
и выбираем необходимый кодек.

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

Далее кодек необходимо скачать на сервер. Рекомендуется сделать это командой wget.

Скаченные кодеки устанавливаются в систему простым копированием их в папку modules:
/var/lib/asterisk/modules или
/var/lib64/asterisk/modules

Далее, либо делаете команду перезапуска сервиса Astersk, либо подгружаете кодеки командой
module load codec_g729..(тут точное название кодека)..so

Провека результата — командой
core show translation.

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

Остались вопросы?

Я — Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

категории

VoIP оборудование






ближайшие курсы

Курсы по Asterisk
последняя неделя
каждого месяца

Новые статьи

Отправка уведомлений о пропущенных вызовах в Trello

Создание fax сервера с помощью IAXmodem и Hylafax

ближайшие Вебинары

Подключение VPN-клиентов SSTP по Mikrotik

Asterisk для компании на карантине. Настройка для удаленщиков.

Передача маршрутов удаленным VPN-клиентам

Оборудование для Asterisk

Мониторинг и анализ VoIP: от базовых инструментов до комплексных систем

10 доводов в пользу Asterisk

Распространяется бесплатно.

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

Безопасен в использовании.

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

Надежен в эксплуатации.

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

Гибкий в настройке.

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

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

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

Снижает расходы на связь.

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

Подпишийтесь и получайте
только свежие новости и материалы

источник

ИТ База знаний

Полезно

— Узнать IP — адрес компьютера в интернете

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Калькулятор инсталляции IP — АТС Asterisk

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Навигация

Серверные решения

Телефония

Настройка программных телефонов

Корпоративные сети

Популярное и похожее

FreePBX 13 настройка c нуля

Что такое CEL Channel Event Logging на Asterisk?

Интеграция Asterisk и Instagram

Автоматическое удаление старых записей Asterisk

Asterisk — настройка с нуля

На просторах Интернет можно найти много инструкций по настройке Asterisk с использованием графического интерфейса FreePBX. И они помогают настраивать и управлять АТС в большинстве случаев. Но гораздо больше возможностей дает настройка «чистого» Asterisk.

В статье мы сделаем базовую настройку Asterisk через конфигурационные файлы. Предполагается, что у нас уже установлена и первоначально настроена ОС, скачены и установлены модули dahdi, libpri, iax2, необходимые голосовые файлы и кодеки и проинсталлирован Asterisk.

Если вы еще не ничего не установили, то посмотрите в нашей статье как установить Asterisk на CentOS 7

А еще вам понадобится установить sngrep для трассировки и отладки SIP-сообщений. Погнали?

Теория

Итак, приступаем к внедрению Asterisk. Структура используемых Астериском директорий следующая:

  • /usr/lib64/asterisk/modules – тут находятся загружаемые модули;
  • /var/log/asterisk – тут находятся лог-файлы, в том числе и лог звонков (если не настроено другое);
  • /var/spool/asterisk – тут находятся подпапки, в которых находятся бэкапы, записи разговоров, голосовая почта, факсы и так далее;
  • /var/lib/asterisk – тут находятся подпапки, в которых находятся звуковые файлы для музыки на удержании, звуковые файлы для выбранных языков (например для проигрывания голосовых сообщений в IVR), записанные голосовые сообщения для приветствия и так далее.

Конфигурационные файлы находятся в папке /etc/asterisk. Для работы каждого модуля Asterisk необходим конфигурационный файл. Эти файлы (с расширением .conf), содержат определения каналов, описывают различные внутренние сервисы, определяют местоположения других модулей, устанавливают связь с диалпланом. Необязательно настраивать все файлы. Требуют настройки только те, которые необходимы для вашей конфигурации.

Основные конфигурационные файлы:

  • asterisk.conf – определяет глобальные параметры, директории и опции для запуска Asterisk;
  • cdr.conf – определяет настройки для записи параметров вызовов в файл или базу данных;
  • sip.conf – определяет настройки для использования SIP-протокола (как общие, так и параметры для регистрации провайдеров, внутренних пользователей и так далее);
  • rtp.conf – определяет порты для голоса (RTP);
  • iax.conf – определяет настройки для использования IAX-протокола (как общие, так и параметры для регистрации провайдеров, внутренних пользователей и так далее);
  • extensions.conf – основной файл, в котором описывается весь диалплан, то есть правила обработки всех вызовов;
  • features.conf – описывает дополнительные функции (переадресации, парковка вызова, включение записи по запросу и так далее);
  • logger.conf – определяет тип и детальность сообщений, записываемых в файлы журналов;
  • modules.conf – определяет какие модули будут или наоборот не будут загружаться при запуске Asterisk;
  • musiconhold.conf – используется для конфигурации разных классов музыки, используемых в приложениях музыки во время ожидания, и их местоположений;
Читайте также:  Установка баннера на тент

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

Сразу после установки asterisk, если не была выбрана установка базовой конфигурации, в ней нет ни одного файла.

Для подключения к asterisk в режиме командной строки необходимо ввести

  • r – подключение к уже запущенному процессу;
  • vvvvv – уровень логирования, то есть вывода информации (от слова verbose — v). Чем больше v выставляем, тем более детальная информация будет выдаваться в командную строку;

Создаем и редактируем необходимые файлы

Начнем с файла asterisk.conf:

  • [directories](!) – указываем расположение необходимых директорий. Знаком (!) указывается признак шаблона. В шаблоне указываются общие настройки, на которые можно ссылаться дальше.
  • [options] – указываем необходимые опции, одна из необходимых maxcalls указывает на количество одновременных вызовов, разрешенных на Asterisk;
    • transmit_silence_during_record = yes — передавать тишину SLINEAR во время записи канала;
    • languageprefix = yes | no — Должен ли код языка быть последним или первым компонентом имени звукового файла? Если выключен, поиск звуковых файлов ведется в формате / / Если включен, поиск ведется в формате / / ;
    • execincludes = yes | no — Разрешить записи #exec в конфигурационных файлах;
    • h >Приступаем к файлу cdr.conf. Комментарии к опциям в конфиге:

    Закончили. Теперь файл features.conf:

    Теперь конфигурируем RTP в файле rtp.conf

    Музыка на ожидании в здании. Открываем файл musiconhold.conf

    Следом открываем файл logger.conf:

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

    И напоследок — файл modules.conf. Есть 2 варианта: либо читаем все модули и указываем те, которые не надо читать:

    Либо указываем конкретные модули, которые необходимо прочитать и запрещаем чтение всех. В этом случае для удобства лучше поделить модули на секции. Ниже приведена часть такого варианта:

    В данной статье мы используем первый вариант. На этом с настройкой основных файлов закончим. В дальнейшем по мере необходимости в них можно вносить изменения. Все последующие настройки мы будем вносить в файлы sip.conf и extensions.conf. Погнали к созданию и регистрации внутренних абонентов.

    Создание и регистрация внутренних абонентов

    В sip.conf указываем сначала общие параметры SIP для Asterisk:

    Так же в этой секции можно указать поддерживается ли видео, время регистрации, перечислить локальные сети, указываем внешний IP-адрес в случае использования NAT и так далее.

    В случае, когда у нас есть разные группы абонентов (например, есть несколько отделов, подразделений либо другие какие-то признаки группировки абонентов или абонентов большое количество), рекомендуется использовать шаблоны, в которые можно выносить обобщенные настройки.

    Имя шаблона берется в скобки [ ] и следом указывается (!). В шаблоне можно указать контекст для этих абонентов, используемые кодеки, разрешенные/запрещенные сети для регистрации этих абонентов, использование NAT и так далее. Пример шаблона приведен ниже:

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

    В результате, по команде sip show peers мы видим зарегистрированных пользователей

    Абоненты зарегистрировались, но позвонить даже между собой они пока не могут. Для того, чтобы они могли совершать и принимать звонки необходимо настроить маршрутизацию (или диалплан). Делать это мы будем в файле extensions.conf, там тоже есть своя структура. И тут мы снова немного погружаемся в теорию:

    Диалплан состоит из следующих основных элементов:

    Контекст – часть (раздел) диалплана, описывающая алгоритм обработки вызова и изолированная от остального диалплана. Содержит дополнительные номера (extension). Дополнительные номера, определенные в одном контексте, полностью изолированы от добавочных номеров в другом контексте, если это не разрешено специально. Так же с помощью контекстов можно ограничивать доступ к различным функциям (например к междугородним или международным звонкам). Имя контекста заключается в квадратные скобки []. Рекомендуется создавать разные контексты для внутренних абонентов и для транков.

    В начале диалплана находятся два специальных контекста, [general] и [globals]

    • [general] – содержит список общих настроек диалплана;
    • [globals] – содержит глобальные переменные;

    Эти два контекста являются специальными. Контекст является одним из обязательных параметров как для абонента, так и для транка.

    Asterisk определяет контекст для обработки по тому принципу откуда пришел вызов, а не куда он пришел, то есть если пришел вызов на мобильный номер от абонента, то применяться будет тот контекст, который прописан у конкретного абонента, а не указанный в транке.

    Добавочные номера – это широкое понятие, которое определяет уникальные последовательности шагов (каждый шаг включает приложение), которые Asterisk будет применять к вызову по этой линии. В каждом контексте может быть задано столько добавочных номеров, сколько требуется. При вызове конкретного добавочного номера (входящим или внутренним звонком) Asterisk будет выполнять шаги, определенные для этого добавочного номера. Поэтому именно добавочные номера определяют, что происходит со звонками при их обработке соответственно диалплану.

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

    • Имени (или номера). В качестве имени может быть использованы любые комбинации цифр и букв;
    • Приоритета (каждый добавочный номер может включать множество шагов; порядковый номер шага называется его приоритетом);
    • Приложения (или команды), которое выполняет некоторое действие над вызовом;

    Эти три компонента разделяются запятыми:

    Есть ещё зарезервированные добавочные номера:

    • s — когда в контекст поступают вызовы, для которых не указан конкретный добавочный номер, они передаются на добавочный номер s. (s — сокращение от start (начало), поскольку именно здесь начнется обработка вызова, если не передана информация о добавочном номере.;
    • i — когда абонент нажимает не ту кнопку (не существующий добавочный номер), вызов направляется на добавочный номер i;
    • t — если абонент слишком долго не нажимает кнопку после запуска приложения WaitExten(), вызовы направляются на добавочный номер t (время ожидания по умолчанию — 10 с);
    • h — экстеншен обрабатываемый при завершении вызова. После того как медиаканал закрылся;

    Иногда можно встретить использование same вместо exten. Это применяют в основном с автоматическим выставлением приоритета, то есть same => n и означает «тоже самое, продолжение предыдущего»

    Приоритеты – последовательность выполнения приложений. Каждый приоритет пронумерован последовательно, начиная с 1, и выполняет одно определенное приложение. В Asterisk есть еще приоритет n, что означает «следующий». Каждый раз, когда Asterisk встречает приоритет n, она берет номер предыдущего приоритета и добавляет 1. Это упрощает внесение изменений в диалплан, поскольку теперь не надо изменять номера всех шагов.

    Приложения – выполняет определенное действие в конкретном дополнительном номере (например воспроизведение звука, прием тонального ввода, вызов канала, разрыв соединения и так далее).

    Для выполнения некоторых приложений, таких как Answer() и Hangup(), не требуется никаких дополнительных инструкций. Некоторым приложениям необходима дополнительная информация. Эти данные, называемые аргументами, могут передаваться в приложения, чтобы оказывать влияние на то, как они выполняют свои действия. Чтобы передать аргументы в приложение их указывают через запятую в круглых скобках, следующих за именем приложения.

    Для внесения комментариев в файл extensions.conf используют ; — вы уже могли об этом догадаться, судя по нашим комментариям прямо в конфигах 🙂

    Таким образом можно как делать пометки для себя, так и делать невыполнимыми строки конфигурации (например, во время отладки)

    Теперь давайте вернемся к нашим созданным абонентам. Создадим контекст, который указан у абонентов (context=from-internal)

    В нем мы прописали что при наборе номера (ИМЯ), с приоритетом 1 выполнить приложение Dial c параметрами ПРОТОКОЛ/НОМЕР. Когда номеров немного, то можно конечно и так описывать. Но более правильно и красиво сделать тоже самое, но с использованием «маски»:

    То есть при наборе любого номера из диапазона 10хх (шаблон показан нижним подчеркиванием) выполнить вызов с приоритетом 1 через приложение Dial с параметрами ПРОТОКОЛ/НАБРАННЫЙ_НОМЕР, время вызова 60 секунд и можно использовать перевод звонка (transfer).

    Шаблон номера — это уникальный набор цифр, который определяет использование этого номера. Если набранный номер соответствует этому шаблону, то последующие номера не рассматриваются. Формат заполнения шаблона:

    • X — совпадение любой цифры от 0 — 9;
    • Z — любая цифра от 1 до 9;
    • N — совпадение любой цифры от 2 — 9;
    • 1237 — соответствует любым цифрам или буквам и скобках (в этом примере,1,2,3,7,8,9);

    Перечитываем диалплан в консоли Asterisk командой dialplan reload и видим выполнение вызова.

    Таким образом мы можем придумать и реализовать практически любой диалплан. Например для запрета вызовов на международную связь достаточно прописать 3 строчки:

    То есть при наборе 810 будет проиграно сообщение destination-closed (если оно было загружено в Asterisk) и будет отправлен сигнал отбоя.

    Создание и регистрация транков

    Ну, начнем с того, что IP-транки, используемые в Asterisk, бывают 2-х видов – SIP и IAX.

    SIP-транки в основном используются для подключения провайдеров, а IAX-транки для подключения других Asterisk. Транки могут быть с регистрацией (то есть когда провайдер выдает логин, пароль и адрес или домен для регистрации у него) и без регистрации (то есть когда подключение идет по IP-адресу без логина и пароля). В случае с регистрацией в файле sip.conf необходимо сразу после секции [general] указать строку регистрации в формате:

    • SIP-ПРОВАЙДЕР — указывается или IP-адрес провайдера или его домен;
    • ЛОГИН:ПАРОЛЬ — выдаются провайдером для подключения;
    • НОМЕР — указывается городской номер, выданный провайдером для совершения звонков;

    Рассмотрим создание SIP-транка с регистрацией. Опять же если у нас несколько (до 3-5) таких транков, то можно их описать каждый отдельно. А если из больше или в дальнейшем планируется увеличить их количество, то можно использовать шаблон для подключения к оператору.

    Дальше указываем строки для регистрации у данных операторов:

    Перечитываем файл sip.conf и проверяем регистрации:

    В случае подключения транка без регистрации можно использовать тот же шаблон, а в настройках транка указать изменяемые параметры

    Перечитываем файл sip.conf и проверяем регистрации:

    Теперь рассмотрим создание IAX-транка. Для настройки IAX-транков используется файл iax.conf, который содержит всю информацию, необходимую Asterisk для создания и управления каналами, работающими по протоколу IAX. Структура его примерно такая же, как и у sip.conf:

    Сохраняем файл iax.conf, перечитываем и проверяем регистрацию командой iax2 show peers:

    Если есть абоненты, работающие по протоколу IAX, то их регистрацию описываем тоже в этом же файле аналогично SIP-регистрации.

    Итак, сейчас мы имеем зарегистрированных абонентов, которые могут звонить друг другу, и зарегистрированные транки. Внутренних абонентов мы можем группировать по отделам:

    Можем настраивать различные функции, запускать различные команды (в том числе и для выполнения через ОС), настраивать запись и прослушивание разговоров и так далее:

    Для совершения звонков через созданные и зарегистрированные транки SIP и IAX: Допустим через транк IAX у нас подключен другой Asterisk с внутренней нумерацией, начинающейся с 1, 2, 3. И для вызова этих абонентов мы будем использовать префикс (код выхода на маршрут) 2. Тогда строки настройки будут следующие:

    То есть при наборе, начинающемся с 21-23, будет осуществлен вызов через транк msk-spb по протоколу IAX набранного номера, предварительно «отрезав» 1 (первую) набранную цифру. Если в течение 30 секунд не будет получен ответ, то вызов будет прекращен.

    Для выхода в город мы используем транк с оператором-1 и префикс выхода будем использовать 9

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

    Теперь перейдем к транкам и входящим звонкам. Соответственно для того, чтобы принимать входящие вызовы, необходимо прописать маршрутизацию уже в контексте транка (context=from-trunk или context = from-iax)

    Для возможности через транк осуществлять вызов нашего внутреннего абонента (например через транк со встречной АТС) необходимо в контекст транка вставить exten => _10XX,1,Dial(SIP/$,60,tTm)

    Давайте рассмотрим реализацию обработки входящего вызова от оператора (вызов на городской номер) через создание меню IVR и реализуем ещё определение рабочего и нерабочего времени. Схема обработки входящего вызова следующая:

    Рабочее время у нас определено с 9:00 до 19:00 и с понедельника по пятницу. При поступлении звонка в нерабочее время после сообщения с приветствием (01-hello) проигрывается сообщение с указанием рабочего времени (07-working-hours). При поступлении звонка в рабочее время (проверка осуществляется в строке GoToIfTime(09:00-19:00,mon-fri)) после приветствия осуществляется переход в другой контекст ([working-time]), где предлагается выбрать необходимый пункт меню (0 – вызов секретаря, 1 – вызов на группу тех. поддержки, 2 – переход в другое меню выбора (GoTo(ivr-2,s,1)), в котором по такому же принципу осуществляется выбор. В каждом меню реализован донабор внутренних номеров (exten => _1xхx,1,NoOp), обработка неправильного набора номера (exten => i,1,NoOp), обработка в случае, что если ничего не выбрали (exten => t,1,NoOp), вызов переводится на секретаря.

    Естественно необходимо загрузить все используемые голосовые файлы в /var/lib/asterisk/sound/ru в случае использования русского языка. Тут давайте немного по-подробнее.

    Как мы уже указывали выше в системе мы определили какой основной язык у нас будет использоваться для голосовых файлов (в файле sip.conf параметр language = ru). Это значит, что Asterisk будет искать имена файлов, которые мы указываем, например, в меню ivr в папке /var/lib/asterisk/sound/ru (смотрим обозначения директорий при запуске asterisk в начале статьи). Если бы мы использовали в качестве основного языка английский, то папка была бы /var/lib/asterisk/sound/en. В каждой из этих папок находятся голосовые файлы выбранных языков и в выбранных форматах, указанных при компилировании asterisk. Если мы хотим записать свои сообщения (персональные приветствия, необходимые объявления, произносимые в создаваемых меню ivr и так далее), нам необходимо положить эти файлы в папку с соответствующим языком. Сами файлы при этом можно записать любой звукозаписывающей программой (хоть программой Звукозапись, входящей в стандартный дистрибутив любой версии Windows) и сохранить в формате wav (несжатый голос, 8кГц, 16 Бит, Моно)

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

    После сохранения файла extensions.conf перечитываем диалплан в консоли (dialplan reload) и проверяем. На этом закончим с примерами.

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

    Полезна ли Вам эта статья?

    Пожалуйста, расскажите почему?

    Нам жаль, что статья не была полезна для вас 🙁 Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

    Подпишитесь на нашу еженедельную рассылку, и мы будем присылать самые интересные публикации 🙂 Просто оставьте свои данные в форме ниже.

    источник