Настройка Asterisk с нуля
Предположим что у нас есть небольшая организация, где работает около 50 сотрудников. Все они используют Asterisk для связи внутри компании и звонков наружу. Все настройки буду проводить на свежей Asterisk 18. В своей предыдущей статье я рассмотрел процесс установки Asterisk 18 на Centos 8. Давайте рассмотрим как происходит настройка Asterisk с нуля.
Учитывая тот факт что библиотека chan_sip не актуальна, будем рассматривать настройку через PJSIP. Старую библиотеку необходимо отключить (если включена) для исключения конфликтов.
Отключение chan_sip
В файле /etc/asterisk/modules.conf необходимо найти и убрать ; перед строкой noload => chan_sip.so
nano /etc/asterisk/modules.conf
Рассмотрим структуру Asterisk с кратким описанием конфигурационных файлов требуемых для настройки транка, пользователей, диалплана.
Структура Asterisk
Настройка Asterisk происходит путем редактирования конфигурационных файлов. Располагаются они в директории /etc/asterisk/ . Перечислю основные файлы которые нам потребуются для начальной настройки.
- pjsip.conf – файл настройки мультимедийной библиотеки PJSIP. В нем содержатся настройки регистрации, транков, пользователей
- extensions.conf – в данном файле происходит настройка диалплана. Все параметры обработки вызова, переадресация, мелодии на удержании, настройка автосекретаря и многое другое.
- asterisk.conf – основной конфигурационный файл, тут указаны пути к используемым папкам, параметры запуска Asterisk и т.д. Подробный разбор параметров данного файла есть тут
- sip.conf – файл настройки устарелой библиотеки chan_sip. В работе его использовать не будем
- cdr.conf – основные настройки ведения отчета о звонках Call Detail Record
- rtp.conf – в данном файле определены настройки касательно протокола RTP (порты, поддержка ICE и т.д.)
- features.conf – указываются параметры перехвата и парковки вызова, максимальное время набора и переадресации, DTMF коды абонентских функций
- modules.conf – в данном файле содержится информация о модулях которые необходимо загружать при старте Asterisk, либо отключить их загрузку.
- musiconhold.conf – настройка параметров конфигурации музыки на удержании
- iax.conf – используется для настройки соединений по протоколу IAX. Данный протокол как правило используется для объединения между собой двух и более АТС
- voicemail.conf – детальная настройка параметров голосовой почты
- logger.conf – указаны детальные параметры журналирования работы Asterisk
Я перечислил лишь основные конфигурационные файлы Asterisk. Но их значительно больше. В повседневной жизни используется только два файла exntensions.conf и pjsip.conf
Часть функций а также повторная загрузка данных из конфигурационных файлов происходит с помощью консоли Asterisk. Зайти в консоль можно так:
asterisk -r
Для более детального вывода данных в консоль можно использовать ключ -v (я обычно использую -vvvvvv). Чем больше букв v указано, тем детальнее будет вывод информации в консоль. Запуск в режиме повышенной детализации:
asterisk -rvvvvvv
Полный список консольных команд с описанием можно прочитать в моей статье
Подключение пользователей
Добавление новых пользователей происходит в файле pjsip.conf. Конфигурационный файл pjsip.conf состоит из секций. Имена секций указываются в квадратных скобках. Название секций может быть произвольным, кроме имен ENDPOINT и AOR которые должны быть одинаковые с заголовком SIP URI.
Перечислю возможные типы секций:
- ENDPOINT – описывает опции SIP протокола и взаимодействует с модулями AOR, AUTH и TRANSPORT. Раздел ENDPOINT обязательно должен быть связан с одной или несколькими секциями AOR. В секции ENDPOINT указываются основные параметры SIP подключения (телефон, софтфон, транк и т.п.)
- AOR – расшифровывается как Address of Record. Данная секция указывает как связаться с ENDPOINT. Без AOR секция ENDPOINT не работает. Тут указывается продолжительность регистрации, соответствие голосовой почте, MWI, настройки переодичности SIP сообщений для мониторинга состояния устройства. Получая запрос на регистрацию от устройства первичная обработка идет в AOR. Происходит поиск соответствия SIP заголовку To
- TRANSPORT – в данной секции описываются настройки транспортного уровня с использованием протоколов UDP, TCP, WebSockets, а также шифрование TLS/SSL. Одну транспортную секцию можно настроить для использования множеством точек ENDPOINT. Либо, если необходимо, создать уникальный транспортный уровень для конкретной точки
- System – определяются общие системные настройки PJSIP
- Global – настраиваются глобальные параметры. Возможность включение дебага, изменение строки User Agent, параметр поля max forwards и т.п.
- AUTH – данная секция используется для аутентификации и содержит настройки для входящих и исходящих регистраций. С этой секцией ассоциируются ENDPOINT и REGISTRATIONS. В случае необходимости разные ENDPOINT и REGISTRATIONS могут использовать общую секцию AUTH
- REGISTRATION – обычно используется для регистрации транка от провайдера
- DOMAIN_ALIAS – используется для указания псевдонимов используемых доменов
- ACL – секция ACL используется для контроля входящих SIP соединений
- IDENTIFY – указываются IP адреса конечных точек ENDPOINT
- CONTACT – можно указать короткий контакт вместо SIP URI
В каждой секции есть опция type содержащая назначение секции в общей конфигурации.
Создание первого пользователя
Создадим учетную запись нашего первого пользователя в Asterisk. Пользователь может подключаться с SIP телефона либо софтфона. Для удобства я заполняю конфигурационные файлы добавляя новые данные в конец файла. Также очень удобно удалить все и создать чистый файл для удобства чтения. Откроем файл pjsip.conf для редактирования
nano /etc/asterisk/pjsip.conf
В конец файла добавим информацию о новом пользователе с добавочным номером 1000. Я всегда использую четырехзначные внутренние номера для дальнейшего возможного роста количества абонентов.
[tr-udp]
type=transport
protocol=udp
bind=0.0.0.0
allow_reload=true
[1000]
type=endpoint
context=from-internal
disallow=all
allow=alaw
transport=tr-udp
auth=auth1000
aors=1000
[auth1000]
type=auth
auth_type=userpass
password=parol
username=1000
[1000]
type=aor
max_contacts=2
В данном пример я добавил минимально необходимую информацию о пользователе для его регистрации на сервере Asterisk. Давайте разберем подробнее что мы написали:
[tr-udp] – является транспортной секцией. На это указывает запись type=transport
- protocol – тип используемого протокола клиента
- bind – IP адрес клиента. Можно указать конкретный IP чтобы с других адресов никто не мог использовать данную запись. Если необходимо можно задать и порт.
- allow_reload – разрешить перенастройки транспортного уровня без перезагрузки Asterisk. По умолчанию без указания данного пункта с параметром true после изменения настроек необходимо рестартовать Asterisk
[1000] – это секция ENDPOINT. Как я писал выше название секции ENDPOINT соответствует названию секции AOR.
- type – тип секции. В данном случае ENDPOINT
- context – контекст диалплана. Данный параметр указывает куда будут направлены звонки приходящие на данный ENDPOINT
- disallow – указывает какие кодеки необходимо запретить. В данном случае all – все кодеки
- allow – кодеки разрешенные для использования. Строкой выше мы запретили все кодеки, текущей строкой разрешили только alaw
- transport – указывает какую конфигурация использовать для траспорта. В нашем случае tr-udp что мы создали выше.
- auth – объект аутентификации относящийся к данному ENDPOINT. В нашем случае это auth1000 дальше по файлу будет его описание
- aors – объек AOR для этого ENDPOINT
[auth1000] – секция аутентификации
- type – тип используемой секции
- auth_type – тип используемой аутентификации. У меня используется логин и пароль
- password – пароль от учетной записи
- username – логин учетной записи
[1000] – AOR секция
- type – тип секции
- max_contacts – максимальное количество контактов которые могут использоваться с данной AOR
После сохранения конфигурации в файл необходимо чтобы Asterisk применила конфигурацию. Для этого зайдем в консоль
asterisk -rvvvvvv
И введем команду повторной загрузки настроек из файла pjsip.conf
pjsip reload
Теперь запустим SIP телефон и настроем учетную запись 1000 на нём. В работе я использую софтфон MicroSIP. Он мне нравится за свою компактность и возможность работы в portable режиме.
Как видно на изображении выше мы удачно подключились к АТС. Но что делать если нам необходимо добавить не одного, а 50 пользователей? Если писать такой конфиг по каждому пользователю, потом очень сложно будет что-то найти. Для таких случаев есть шаблоны. Разберемся как они работают.
Создание шаблона
Использование шаблонов также полезно для разделения сотрудников из разных отделов с разным уровнем доступа. Название шаблона указывается в квадратных скобках [] затем идет (!)
;===============Шаблон отдела маркетинга
[marketing-endpoint](!)
type=endpoint
transport=tr-udp
context=from-internal
disallow=all
allow=alaw
[pass-auth](!)
type=auth
auth_type=userpass
[two-contact-aor](!)
type=aor
max_contacts=2
В шаблоне можно указывать все те же параметры что и при обычном создании пользователя. Я привел пример простого шаблона отдела маркетинга с указанием минимального набора настроек. Однако их может быть значительно больше, например: используемые кодеки, необходимость использования NAT, контекст, разрешенную лиюо запрещенную сеть для регистрации абонентов. В общем параметров может быль сколь угодно много, и писать все их для каждого пользователя дело не благодарное. Рассмотрим далее применение шаблона для создания пользователей.
Применение шаблона
Создадим трех пользователей отдела маркетинга с применением шаблона. Для использования шаблона необходимо справа от названия секции в круглых скобках добавить название шаблона.
;===============Добавочный номер 2000
[2000](marketing-endpoint)
auth=auth2000
aors=2000
[auth2000](pass-auth)
password=2000
username=2000
[2000](two-contact-aor)
;===============Добавочный номер 2001
[2001](marketing-endpoint)
auth=auth2001
aors=2001
[auth2001](pass-auth)
password=2001
username=2001
[2001](two-contact-aor)
;===============Добавочный номер 2002
[2002](marketing-endpoint)
auth=auth2002
aors=2002
[auth2002](pass-auth)
password=2002
username=2002
[2002](two-contact-aor)
Используя шаблон мы указываем только те параметры которые хотим поменять. Все параметры не указанные нами в каждой из секций будут браться из шаблона. Можно зайти под каждый из пользователей и проверить что все получилось.
Команда для вывода пользователей зарегистрированных на сервере
pjsip show aors
pjsip show auths
pjsip show endpoints
Маршрутизация вызовов
Однако, на данном этапе мы пока не можем совершать звонки. При попытке набрать любой номер будет ошибка. Для совершения звонков нам необходимо внести изменения в файл extensions.conf – основной рабочий файл. В нем настраивается маршрутизация вызовов Asterisk. В понимании телефонии и Asterisk не исключение это называется DIALPLAN.
Структура файла extensions.conf
Файл имеет две обязательные секции general и globals. Секции также указываются в квадратных кавычках. После двух обязательных секции идут секции вашего диалплана.
Рассмотрим параметры секции [general]
- static – когда установлено значение no или не указано pbx_config перезапишет данный файл когда extensions будет изменен. Все комментарии в этом файле будут потеряны
- writeprotect – если параметр static имеет значение yes, а параметр writeprotect=no то можно сохранить настройки диалплана через командную строку Asterisk “dialplan save”
- autofallthrough – в случае когда параметр имеет значение yes и параметры вашего диалплана исчерпали возможности к дальнейшему действию, звонок будет завершен. Это происходит по умолчанию. Если значение будет no или не указано Asterisk будет ожидать действия от пользователя.
- extenpatternmatchnew – установив параметр в значение true или yes будет использоваться новый алгоритм который будет искать лучшее совпадение паттерна. Увеличение скорости обработки по новому алгоритму повышается с увеличением количества обрабатываемых добавочных номеров. По умолчанию данный параметр отключено. Включайте на свой страх и риск.
- clearglobalvars – если задан параметр clearglobalvars, глобальные переменные будут очищены и повторно обработаны при перезагрузке диалплана или перезапуска Asterisk. Когда параметр не установлен или имеет значение no глобальные переменные будут сохраняться при перезагрузке и даже при удалении из extensions.conf или одного из включенных в него файлов, будет использоваться предыдущее значение.
Перейдем к параметрам секции [globals]
В Asterisk могут использоваться как глобальные переменные так и переменные канала. Есть еще переменные окружения, они обеспечивают доступ из Asterisk к переменным окружения unix.
Глобальные переменные могут быть определены в секции [globals] либо с помощью команды SetGlobalVar в плане набора номера. Глобальная переменная отличается тем, что работает для всего файла exntensions.conf. Переменные канала используются в том диалплане в котором они определены.
В глобальных переменных удобно хранить длинные добавочные номера, время работы (при использовании автосекретаря) и другие часто используемые переменные. Пример секции [globals]
[globals]
MSK_time=08:00-19:00
MSK_week=mon-sat
RECEPTION=PJSIP/3010
В приведенном примере я задал две переменные с указанием времени работы и дней недели для автосекретаря и в третьей переменной указал добавочный номер и канал через который можно позвонить на ресепшен.
Диалплан в Asterisk пишется на основе контекстов. В каждом контексте мы определяем набор приложений с указанными параметрами. Давайте сразу рассмотрим на примере, как нам написать диалплан чтобы пользователи могли звонить на добавочный 1000.
[from-internal]
exten = 1000,1,Dial(PJSIP/1000)
Я написал контекст с названием from-internal далее указал что при звонке на добавочный 1000 будет происходить дозвон номера 1000 через интерфейс PJSIP. При создании пользователя Asterisk в файле pjsip.conf в разделе настройки endpoint мы указываем поле context=from-internal. Это означает что совершая вызов данный пользователь будет руководствоваться правилами указанными в контексте [from-internal] файла extensions.conf
Процесс вызова
Совершая вызов абонент будет искать в своем контексте правила набора указанного номера. В каждом контексте может быть большое количество добавочных номеров. К набираемому добавочному номеру правила применяются последовательно.
Формат записи такой: exten = имя,приоритет,приложение(параметры)
Расширим наш диалплан, добавив дополнительные пункты. И не забудьте, что при изменений файла extensions.conf необходимо чтобы Asterisk перечитал его. Для этого заходим в консоль и вводим команду dialplan reload
[from-internal]
exten = 1000,1,Answer() ; Поднимаем трубку
exten = 1000,2,Playback(demo-congrats) ; Проигрываем приветственное сообщение
exten = 1000,3,Dial(PJSIP/1000) ; Звоним на номер 1000
Как вы уже заметили, комментарии можно писать сразу после ;
При звонке на 1000 мы поднимаем трубку, проигрываем приветствие и последним действием будет звонок на добавочный 1000. Можно написать и так:
[from-internal]
exten = 1000,1,Answer()
exten = 1000,n,Playback(demo-congrats)
exten = 1000,n,Dial(PJSIP/1000)
Приоритет можно заменить буквой n но первый приоритет указывать необходимо обязательно. Можно еще немного оптимизировать наш диалплан.
[from-internal]
exten = 1000,1,Answer()
same = n,Playback(demo-congrats)
same = n,Dial(PJSIP/1000)
Используя same вместо exten можно не писать в каждой строке добавочный 1000. Но как и в случае с 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
Шаблон для звонков внутри организации по всем добавочным из 4 цифр будет выглядеть так:
[from-internal]
exten = _XXXX,1,Dial(PJSIP/${EXTEN})
Где _XXXX – любые 4 цифры, ${EXTEN} – переменная передающая набранный добавочный номер
Вложение контекстов
Есть одна особенность, Asterisk сначала сортирует добавочные (exten) и затем ищет первое совпадение. Чтобы при совпадении шаблонов заставить Asterisk звонить по нужному будем использовать вложенные контексты.
[from-internal]
include=long
exten = _XXXX,1,Dial(PJSIP/${EXTEN})
[long]
exten => _X.,1,Dial(PJSIP/${EXTEN}@sipnet)
В контексте from-internal сначала будет обрабатываться шаблон _XXXX затем вложенный контекст include=long
Увидеть в какой последовательности Asterisk обрабатывает диалплан можно введя в консоли команду dialplan show
Благодаря созданному диалплану все 4-х значные номера будут идти на локальных пользователей. Остальные номера пойдут через внешнего провайдера SIPNET. И чтобы все внешние звонки действительно пошли через SIPNET давайте его настроим в pjsip.conf
Настройка внешнего провайдера
Для проверки входящей и исходящей связи я буду использовать тестовый транк с регистрацией от SIPNET. Я настрою сам транк в файле pjsip.conf и правила маршрутизации звонков в extensions.conf
Открываем файл pjsip.conf
nano /etc/asterisk/pjsip.conf
Добавляем в конец файла регистрацию транка провайдера
[sipnet]
type=registration
transport=tr-udp
outbound_auth=sipnet
server_uri=sip:sipnet.ru
client_uri=sip:0042095477@sipnet.ru
retry_interval=60
[sipnet]
type=auth
auth_type=userpass
password=пароль
username=0042095477
[sipnet]
type=aor
contact=sip:sipnet.ru:5060
[sipnet]
type=endpoint
transport=tr-udp
context=from-sipnet
disallow=all
allow=alaw,ulaw
outbound_auth=sipnet
aors=sipnet
from_user=0042095477
from_domain=sipnet.ru
[sipnet]
type=identify
endpoint=sipnet
match=sipnet.ru
Тонкости настройки транка провайдера у каждого свои но приведенный пример как правило подойдет для большинства других.
После добавления новых данных в файл не забываем зайти в консоль 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/1000&PJSIP/2000)
Я создал контекст from-sipnet указанный ранее при создании ENDPOINT sipnet. При поступлении входящего вызова (s -без доб номера) поднимать трубку, ожидать 5 секунд (Wait) затем проиграть приветственное сообщение. После окончания приветствия звонить одновременно на 2 добавочных 1000 и 2000.
Приветственное сообщение записать самим в формате 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/1000&PJSIP/2000)
same = n(outwork),Playback(/opt/outwork_music)
same = n,Hangup()
В зависимости от текущего времени и дня недели если вызов совершен во временной промежуток указанный в GotoifTime будет переход на метку work. Все вызовы не попадающие под временной интервал будут отправляться на метку outwork.
На данном этапе мы создали обработку внутренних вызовов, входящих и исходящих внешних (городских) вызовов. В тестовом аккаунте проверить исходящие вызовы можно позвонив по телефону техподдержки 2009991
Считаю настройку для небольшой организации достаточной. Мы разобрали как происходит настройка Asterisk с нуля.
Смотрите видео по настройке
Спасибо огромное, что проделали такую большую работу, очень полезно!
P.S. Как правильно защититься от “атак”, у меня сервер астериска на VDS.
Я арендовал для теста, чтоб диплом написать
Пока проделывал все попунктно в статье, ко мне начали ломиться, как быть?)))
Нашел пару уроков, но большинство года 14
Пожалуйста, времени и вправду много заняло. Лучшая защита от подбора паролей будет fail2ban. Про это тоже планировал написать статью
Будем ждать)
Очень интересная статья. Остались конечно не очень понятные моменты: например, почему надо кучу секций под один транк писать, почему нельзя все в одной сделать.
и очепятку нашел “Я написал контекст с названием from-nternal “
Спасибо за внимательность, опечатку поправил. Касательно секций, возможно создатели библиотеки pjsip хотели разделить транки по типам настроки. И в случае проблем можно примерно понять в какую секцию лезть. Хотя конечно вопрос спорный.
Статьи очень хорошие, хочу задать вопрос про freepbx. Есть ли версия поддерживающая 18-й астериск? Точно знаю что поддерживает 17-й, а про 18-й упоминаний не находил. И будет ли, этот freepbx, поддерживать pjsip?
В данный момент последняя версия freepbx поддерживает не выше asterisk 17. И в текущем состоянии он конечно поддерживает pjsip. Насколько я помню даже более старые версии freepbx поддерживают pjsip
Спасибо за ответ. С телефонией я не работал года 3 и про pjsip ничего не знал.
Спасибо большое за подробные статьи!
Пожалуйста, рад если статья помогла в настройке
И опять здравствуйте! Прочих дефолтных при настройках, уже на первых парах опять не “взлетает”, на сей раз ругается на tr-udp возможно забыли какой-то модуль включить?
если tr-udp=0.0.0.0 то
[Sep 9 15:33:16] ERROR[20370]: res_pjsip/config_transport.c:855 transport_apply: Transport ‘tr-udp’ could not be started: Address already in use
[Sep 9 15:33:16] ERROR[20370]: res_sorcery_config.c:422 sorcery_config_internal_load: Could not create an object of type ‘transport’ with id ‘tr-udp’ from configuration file ‘pjsip.conf’
[Sep 9 15:33:16] NOTICE[20370]: sorcery.c:1348 sorcery_object_load: Type ‘system’ is not reloadable, maintaining previous values
если tr-udp=адрес аппарата (который успешно пингуется) то
— Reloading module ‘res_pjsip.so’ (Basic SIP resource)
[Sep 9 15:52:36] ERROR[20655]: res_pjsip/config_transport.c:855 transport_apply: Transport ‘tr-udp’ could not be started: Cannot assign requested address
[Sep 9 15:52:36] ERROR[20655]: res_sorcery_config.c:422 sorcery_config_internal_load: Could not create an object of type ‘transport’ with id ‘tr-udp’ from configuration file ‘pjsip.conf’
[Sep 9 15:52:36] NOTICE[20655]: sorcery.c:1348 sorcery_object_load: Type ‘system’ is not reloadable, maintaining previous values
при этом оно видит что телефон ломится к серверу но пишет что пароль неверный:
chan_sip.c:29040 handle_request_register: Registration from ” failed for ‘192.168.106.111:5062’ – Wrong password
сломал себе весь череп, все проверил, везде всё указано верно, возможно где-то какой-то нюанс упущен? забыли добавить команду какую-то или поставить что-то? просто я в этом смысле с нуля пытаюсь начать..
в модулях есть строка
require = chan_pjsip.so
ее надо раскоментить?
разобрался, в Вашем случае надо указывать порт
0.0.0.0:5060
у Вас сказано что можно, но на этом примере “нужно”
сразу все прошло.
Хотел спросить, а как сделать, чтобы пользователь имел логин скажем “user1035” но при этом перекидывался на свой внутренний номер (пусть будет 1035)?
Можно где-то задать таблицу соответствий, пользователь-номер телефона?
Как тогда применить правильно шаблон?
или же надо делать какую-то книгу в pjsip?
Просто хочется чтобы логин/пароль не привязывались к номеру абонента, это понятное дело, означает, что где-то должна быть таблица соответствия “юзер – номер”, чтобы шаблон из номера, по этой таблице понимал какому юзеру звонить, либо, чтобы номер уходил в pjsip и там определял правильный эндпоинт?
может быть эндпоинт такой?
[1010] [user22]
type=endpoint
…
aors=user22
они должны быть одинаковые
Здравствуйте.
Спасибо за статью, всегда интересно читать такое. Настроил астериск с фрипбикс, внутренние номера, группы, очереди работают. Также настроил два транка, входящую и исходящую маршрутизацию. Исходящие работают. Вопросы возникли по входящим маршрутам. Допустим, провайдер дал два номера, 123 и 456. Соответственно, создаю два маршрута 123 и 456. В первом DID не указываю, назначение указываю ивр – работает. Во втором маршруте указываю DID, соответствующий второму номеру, т.е. 456 и другое назначение, например, группу или очередь. Однако при звонке на второй номер всё равно приходит на ивр. Отсюда вопрос – как различить маршруты, если DID не срабатывает? Второй вопрос – в ивр установил возможность прямого звонка, т.е. набрать внутренний номер можно, и это работает, но не работает, если набрать номер группы или очереди. Как это исправить?
а нет ли у Вас подробностей по настройке исходящей маршрутизации на транке? а то я убил весь мозг, не пойму как делать?
Добрый день, по поводу вх связи и различий двух номеров, я обычно делаю так, запускаю астериск в режиме отладки и звоню на каждый из номеров, после по отладочной информации смотрю чем они отличаются (т.е. что именно ваш провайдер отправляет) и далее по различающимся параметрам уже пишу диалплан. По второму вопросу также сначала нужно запустить отладку , и посмотреть что пишет система при попытке вызвать группу
По второму вопросу также сначала нужно запустить отладку , и посмотреть что пишет система при попытке вызвать группу – всё оказалось проще: т.к. в астериск нет прямого набора извне в группу, можно обойти это, указав в пункте интерактивного меню шаблон (например, _1ХХХ) и назначение саму группу.
ДД!!! подскажите пожалуйста в чем может быть проблема при подключении к провайдеру выдает вот такую ошибку
[Sep 25 12:39:36] WARNING[2846]: res_pjsip_outbound_registration.c:894 schedule_retry: No response received from ‘sip:sip.telecom.kz’ on registration attempt to ‘sip:123456789@sip.telecom.kz’, retrying in ’60’
Добрый, попробуйте открыть порты 5060 и 5061 в вашем фаерволле
не могли бы помочь составить правильный шаблон для внешнего транка с провайдером блин два дня сижу уже волосы седые
все спасибо разобрался провайдер гаденыш не верный домен для регестрации указал
по failtoban от вас почитал бы с удовольствием.
Статья про Fai2ban есть на сайте, в разделе Asterisk
Подскажите пожалуйста в чем может быть проблема все настроено написано регистрация есть
asterisk*CLI> pjsip show registrations
==========================================================================================
sipnet/sip:92.46.61.21 sipnet Registered
Objects found: 1
При звонке на любой номер вот такой вывод получается
asterisk*CLI>
— Auto fallthrough, channel ‘PJSIP/2000-00000006’ status is ‘CHANUNAVAIL’
— Executing [87002239332@outcoling:1] Dial(“PJSIP/2000-00000008”, “PJSIP/87772239332@sipnet”) in new stack
— Called PJSIP/87002239332@sipnet
== Everyone is busy/congested at this time (1:0/0/1)
— Auto fallthrough, channel ‘PJSIP/2000-00000008’ status is ‘CHANUNAVAIL’
вот так настроено
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0:5061
allow_reload=true
;===============Шаблон отдела маркетинга
[marketing-endpoint](!)
type=endpoint
transport=udp-transport
context=outcoling
disallow=all
allow=alaw
[pass-auth](!)
type=auth
auth_type=userpass
[two-contact-aor](!)
type=aor
max_contacts=2
;===============Добавочный номер 2000
[2000](marketing-endpoint)
auth=auth2000
aors=2000
[auth2000](pass-auth)
password=2000
username=2000
[2000](two-contact-aor)
[sipnet]
type=registration
transport=udp-transport
outbound_auth=sipnet
server_uri=sip:92.46.61.21
client_uri=sip:12325455562@sip.telecom.kz
retry_interval=60
[sipnet]
type=auth
auth_type=userpass
password=123456789
username=12325455562
[sipnet]
type=aor
contact=sip:92.46.61.21:5061
[sipnet]
type=endpoint
transport=udp-transport
context=incoming
disallow=all
allow=alaw,ulaw
outbound_auth=sipnet
aors=sipnet
[sipnet]
type=identify
endpoint=sipnet
match=92.46.61.21
Dioplan
[outcoling]
exten => _XXXXXXXXXXX,1,Dial(PJSIP/${EXTEN}@sipnet)
exten => _XXXX,1,Dial(PJSIP/${EXTEN},,m)
[incoming]
exten => _X.,1,Dial(PJSIP/2000,60,m,tT)
Что не так может быть? спасибо за внимание
Хорошая статейка ну не совсем понятно как dioplan устроен, не хватает исходящей, входящей маршрутизации на сотовые номера на межгород. Судя по комментариям не я одна не могу понять правильно ли зарегистрирован sip trank. По вашему примеру входящая вроде как связь есть а вот исходящей не как не удалось добиться. Можно сразу камнями не кидать так как я новичок, это мой первый опыт с Asterisk. можно на пальцах пару примеров для входящей и исходящей связи через sip truk. Ну и скорее статья будет дополненной. Заранее спасибо!!!
Скажите а маршрутизация по вашему диаплану в обе стороны работает и входящая и исходящая ???? просто у меня исходящей вообще нету ребят кто разобрался помогите.
Добрый день, извиняюсь за долгое отсутствие, находился в ковид госпитале. Касательно исходящей маршрутизации, там не должно быть сложностей. В статье есть раздел Вложение контекстов. Вот там пример как делать исходящую маршрутизацию например на сипнет:
[long]
exten => _X.,1,Dial(PJSIP/${EXTEN}@sipnet)
Укажите нужный вам шаблон номера вместо _X. и в зависимости от приоритета звонки будут поступать на данный контекст
не получается транк никак вообще ( может кто сталкивался
манго, пользователь на ИХ АТС
user@mydomain.mangosip.ru
пароль pass123 (условно)
вставляю везде эти данные и ничего…
ошибку пишет:
Request ‘OPTIONS’ from ” failed for ‘81.88.86.11:5060’ (callid: *********@192.168.46.43) – No matching endpoint found
Ошибка ” No matching endpoint found” как бы говорит что нет такого Endpointа
Добрый день не могу получить регестрацию sip провайдера:
[Jan 20 14:40:37] WARNING[11141]: res_pjsip_outbound_registration.c:894 schedule_retry: No response received from ‘sip:sip.zadarma.com’ on registration attempt to ‘sip:796156@sip.zadarma.com’, retrying in ’60’
Оператор говорит что не видит от меня запросов, куда капать ?
Добрый, я бы проверил настрой адреса регистрации и порт прописанные в pjsip.conf
Вот вы настраиваете pjsip, он типа новый. А чего же тогда ael не используете, а устаревший dialplan?
Ну как Вам сказать. Как я писал вначале статьи chan_sip в новых версиях Asterisk имеет статус depricated. Так решил производитель, не я. Поэтому считаю что настраивать новую версию астериска принудительно включая старую библиотеку не имеет смысла (если конечно у вас нет кучи старых диалпланов которые не хочется менять). А по поводу ael, мне да и как большинству хватает стандартного extensions.conf. Я пока не испытывал проблем и дикой необходимости в ael.
Для тех, у кого не работают звонки внаружу:
добавьте в endpoint провайдера 3 строчки:
И будет вам счастье.
Автора статьи тоже прошу поправить:
Касательно сипнета в момент моего теста указывать параметры from_user, from_domain не требовалось. В данный момент без него не работает, в статье поправил. В любом случае как я и писал в статье настройки разнятся от провайдера к провайдеру. Например у меня есть пару провайдеров работающих без указанных параметров. Но в любом случае спасибо за информацию.
[Jun 11 14:43:08] NOTICE[1668]: chan_sip.c:29058 handle_request_register: Registration from ‘<sip:1201@1201>’ failed for ‘10.1.5.86:56285’ – Wrong password
Пароль пишу правильно
Соберите логи на клиенте и на сервере
Привет дружище! Огромное спасибо за эту статью. Это единственно рабочая статья по астериску сейчас!!! Благодарен)
Подскажи пожалуйста, в extensions.conf добавил из этой статьи exten = 1000,2,Playback(demo-congrats) ; Проигрываем приветственное сообщение
Что только не менял в этой строчке на проигрывание из встроенных записей астериска – не работает. Ошибки “Файл demo-congrats не существует ни в каком формате” и тп.
При установке астериска в синем экране выбирал только рус файлы.
Почему такая ошибка? Почему не находит файлы?
Привет, проверь что аудио файлы существуют. Обычно они лежат по пути /var/lib/asterisk/sounds/ и дальше язык en, ru или еще какой. При желании в строке можно указать полный путь к проигрываемому файлу, например exten = 1000,2,Playback(/var/lib/asterisk/sounds/ru/demo-congrats). Ели любой другой каталог где есть аудио
Спасиб что ответил) Проверил файлы – аудио есть и ru и en и demo-congrats всех форматов тоже есть. Ввел полный путь – просто до слез аххха! Работает!
А куда конкретно вообще нужно указывать это: language ‘ru’??
В extensions.conf?
В sip.conf раздел [general]
указать language=ru
same = n,GotoIfTime(08:00-18:00|mon-fri|*|*?work:outwork)
same = n(work),Playback(/opt/work_music)
same = n(work),Dial(PJSIP/1000&PJSIP/2000)
А как ты так одну и туже метку в двух строчках написал ?
должно быть
[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,Dial(PJSIP/1000&PJSIP/2000)
same = n(outwork),Playback(/opt/outwork_music)
same = n,Hangup()
или
[from-sipnet]
exten = s,1,Answer()
same = n,Wait(5)
same = n,GotoIfTime(08:00-18:00|mon-fri|*|*?:outwork)
same = n,Playback(/opt/work_music)
same = n,Dial(PJSIP/1000&PJSIP/2000)
same = n(outwork),Playback(/opt/outwork_music)
same = n,Hangup()
И опиши для чего тебе это ожидать 5 секунд (Wait)
А еще лучше так
[from-sipnet]
exten = s,1,Answer()
same = n,Wait(5)
same = n,GotoIfTime(08:00-18:00|mon-fri|*|*?
work:outwork)
same = n,Hangup()
same = n
(work),Playback(/opt/work_music)
same = n,Dial(PJSIP/1000&PJSIP/2000)
same = n(outwork),Playback(/opt/outwork_music)
same = n,Hangup()
admin, подскажите, пожалуйста, есть ли добротное решение, как будить смартфоны? Например использую “Linphone”, звонок проходит только если запущено приложение, если его закрыть или свернуть, позвонить не удастся.
попробуйте zoiper или mizudroid . А так можно поковырять сам сартфон на предмет чтобы он не выгружал программу из памяти и та всегда была на связи
Здравствуйте. Помогите разобраться с проблемой пжл:
На убунту (статический ip,подключение через сетевой мост) пытаюсь подключить софтфоны(зойпер и микросип).
Но пришла ошибка :
NOTICE[1409]: res_pjsip/pjsip_distributor.c:676 log_failed_request: Request ‘REGISTER’ from ‘<sip:192.168.1.172@192.168.1.172>’ failed for ‘192.168.1.162:63422’ (callid: 2viIpOpig43OTBLdYpP5iw..) – No matching endpoint found
Увенчалась попытка зарегать ай пи который указан в ошибке 192.168.1.162 , и все софтфоны подключились и проходят звонки.
НО!В CLI совсем не отображается дебаг и вообще никакие действия. show endpoints пишет на них Unavailable.
При том внешнего провайдера он видит и новофон зарегался без проблем.Только вот при зврнке на один из софтфонов пишет :
ERROR[1409]: res_pjsip.c:849 ast_sip_create_dialog_uac: Endpoint ‘2001’: Could not create dialog to invalid URI ‘2001’. Is endpoint registered and reachable?
Откуда у софтфона свой ip? при том что подключение через сетовой мост.
Все действие происходит в убунту 18 установленной на виртуалке(астериск 18).
И соответственно в sngrep он тоже не отображается. Option показывает только новофон.
Привет! Сильно сильно благодарен за твою статью. Только пол года я переустанавливаю систему 😂 Каждый раз ломаю в хлам из-за того, что не слышно на другом конце.
ПОЖАЛУЙСТА ПОМОГИ 🙏
Все перерыл все что можно и бестолку.
Centos 7, aster 18, статич ip на роутере. Порты к ip aster открыты udp: 10000-20000, 5060
Какие добавить настройки, чтобы другой телефон, находящийся в другом городе, без статического ip, пропускал звук (обратно не слышно)?
Сейчас звонки идут, но слышно только с одной стороны. Обратно голос не передаёт.
Пожалуйста 🙏🙏🙏🙏
И круто было бы если написал бы статью про OpenVPN для астериск 👍
Второй день плакаю над этим астериксом, все по инструкции сделал, софтфоны подключились, но не звонят !
[Nov 8 23:20:45] ERROR[1768]: res_pjsip.c:903 ast_sip_set_tpselector_from_transport_name: Unable to retrieve PJSIP transport ‘transport-udp’
Весь гоголь уже пересмотрел что это может быть, ответов нет.
Как это лечится?
По всему видно что-то не так с настройкой транспорта. Нужно туда копать.