Учитывая тот факт что библиотекаchan_sipне актуальна, будем рассматривать настройку черезPJSIP. Старую библиотеку необходимо отключить (если включена) для исключения конфликтов.
Отключение chan_sip
В файле/etc/asterisk/modules.confнеобходимо найти и убрать;перед строкойnoload => chan_sip.so
nano /etc/asterisk/modules.conf
Подключение пользователей
Добавление новых пользователей происходит в файлеpjsip.conf.
nano /etc/asterisk/pjsip.conf
В конец файла добавим информацию о новом пользователе с добавочным номером 100. Я всегда использую четырехзначные внутренние номера для дальнейшего возможного роста количества абонентов.
ГОТОВО. Самая база для обычных звонков создана. Далее уже пойдут более сложные действия
Процесс вызова
Совершая вызов абонент будет искать в своем контексте правила набора указанного номера. В каждом контексте может быть большое количество добавочных номеров. К набираемому добавочному номеру правила применяются последовательно.
Формат записи такой:exten = имя,приоритет,приложение(параметры)
Расширим наш диалплан, добавив дополнительные пункты. И не забудьте, что при изменений файла extensions.conf необходимо чтобы Asterisk перечитал его. Для этого заходим в консоль и вводим командуdialplan reload
[from-internal]
exten = 100,1,Answer() ; Поднимаем трубку
exten = 100,2,Playback(demo-congrats) ; Проигрываем приветственное сообщение
exten = 100,3,Dial(PJSIP/100) ; Звоним на номер 100
Как вы уже заметили, комментарии можно писать сразу после;
При звонке на100мы поднимаем трубку, проигрываем приветствие и последним действием будет звонок на добавочный100. Можно написать и так:
Приоритет можно заменить буквой n но первый приоритет указывать необходимо обязательно. Можно еще немного оптимизировать наш диалплан.
[from-internal]
exten = 100,1,Answer()
same = n,Playback(demo-congrats)
same = n,Dial(PJSIP/100)
Используяsameвместоextenможно не писать в каждой строке добавочный100. Но как и в случае сnв первой строке указыватьextenобязательно.
Системные добавочные номера
s– при поступлении вызова в контекст, без указанного добавочного номера используют номерs(от словаstart)
i– в случае когда абонент набирает не существующий добавочный номер вызов переходит на добавочный номерi
t– когда абонент долго не нажимает кнопку после запуска приложенияWaitExten()вызов переходит на добавочный номерt. Время ожидания по умолчанию – 10 секунд
h– добавочный используемый при завершении вызова, когда уже закрылся медиаканал
Писать диалплан для каждого добавочного номера дело не благодарное, для таких целей будем использовать шаблон.
Шаблоны номеров
Для удобства добавочные номера можно сопоставлять по шаблонам. Все шаблоны в диалплане начинаются со знака нижнего подчеркивания _
X– цифра от 0 до 9
Z– любая цифра от 1 до 9
N– любая цифра от 2 до 9
.– любой символ
[184-7]– цифры 1,8,4,5,6,7
Шаблон для звонков внутри организации по всем добавочным из 3 цифр будет выглядеть так:
Где _XXX – любые 3 цифры, ${EXTEN} – переменная передающая набранный добавочный номер
Вложение контекстов
Есть одна особенность, Asterisk сначала сортирует добавочные (exten) и затем ищет первое совпадение. Чтобы при совпадении шаблонов заставить Asterisk звонить по нужному будем использовать вложенные контексты.
В контекстеfrom-internalсначала будет обрабатываться шаблон_XXXзатем вложенный контекстinclude=long
Увидеть в какой последовательности Asterisk обрабатывает диалплан можно введя в консоли командуdialplan show
Благодаря созданному диалплану все 4-х значные номера будут идти на локальных пользователей. Остальные номера пойдут через внешнего провайдераSIPNET. И чтобы все внешние звонки действительно пошли через SIPNET давайте его настроим вpjsip.conf
Настройка внешнего провайдера
Для проверки входящей и исходящей связи я буду использовать тестовый транк с регистрацией от SIPNET. Я настрою сам транк в файле pjsip.conf и правила маршрутизации звонков вextensions.conf
Открываем файлpjsip.conf
nano /etc/asterisk/pjsip.conf
Добавляем в конец файла регистрацию транка провайдера
Тонкости настройки транка провайдера у каждого свои но приведенный пример как правило подойдет для большинства других.
После добавления новых данных в файл не забываем зайти в консоль asterisk и перечитать конфиги
pjsip reload
Настроим входящую маршрутизацию
Добавляем настройки маршрутизации входящей связи при звонке снаружи на наш номер SIPNET
nano /etc/asterisk/extensions.conf
Вставим следующий текс в конец файла
[from-sipnet]
exten = s,1,Answer()
same = n,Wait(5)
same = n,Playback(demo-congrats)
same = n,Dial(PJSIP/100&PJSIP/101)
Я создал контекст from-sipnet указанный ранее при создании ENDPOINTsipnet. При поступлении входящего вызова (s -без доб номера) поднимать трубку, ожидать 5 секунд (Wait) затем проиграть приветственное сообщение. После окончания приветствия звонить одновременно на 2 добавочных 100 и 101.
Приветственное сообщение записать самим в формате wav с параметрами 8кГц, 16 Бит, Моно запись скинуть в папку и указать к ней путь, например
Playback(/opt/sound/my_sound)
Можно добавить обработку входящего вызова по времени.
[from-sipnet]
exten = s,1,Answer()
same = n,Wait(5)
same = n,GotoIfTime(08:00-18:00|mon-fri|*|*?work:outwork)
same = n(work),Playback(/opt/work_music)
same = n(work),Dial(PJSIP/100&PJSIP/101)
same = n(outwork),Playback(/opt/outwork_music)
same = n,Hangup()
В зависимости от текущего времени и дня недели если вызов совершен во временной промежуток указанный вGotoifTimeбудет переход на меткуwork. Все вызовы не попадающие под временной интервал будут отправляться на меткуoutwork.
На данном этапе мы создали обработку внутренних вызовов, входящих и исходящих внешних (городских) вызовов. В тестовом аккаунте проверить исходящие вызовы можно позвонив по телефону техподдержки2009991
Считаю настройку для небольшой организации достаточной. Мы разобрали как происходит настройка Asterisk с нуля.
P. S. (Микросоветы)
1. Ошибки “Файл demo-congrats не существует ни в каком формате”
Проверьте что аудио файлы существуют. Обычно они лежат по пути /var/lib/asterisk/sounds/ и дальше язык en, ru или еще какой. При желании в строке можно указать полный путь к проигрываемому файлу, например exten = 1000,2,Playback(/var/lib/asterisk/sounds/ru/demo-congrats). Ели любой другой каталог где есть аудио
2. А куда нужно указывать это: language ‘ru’??
В sip.conf раздел [general] указать language=ru
Размещено : 27.03.2025 12:10
Оставьте ответ
Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.