Форум

Настройка Asterisk ...
 
Уведомления
Очистить все

Гайд Настройка Asterisk 18 с нуля

 
Элидор Таргалин
Уважаемый участник Админ

Учитывая тот факт что библиотека 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. Я всегда использую четырехзначные внутренние номера для дальнейшего возможного роста количества абонентов.

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
allow_reload=true
 
;===НОМЕР 100 ====

[100]
type=endpoint
context=from-internal
disallow=all
allow=alaw
transport=transport-udp
auth=auth100
aors=100
  
[auth100]
type=auth
auth_type=userpass
password=1234567890
username=100
  
[100]
type=aor
max_contacts=2

;===НОМЕР 101 ====

[101]
type=endpoint
context=from-internal
disallow=all
allow=alaw
transport=transport-udp
auth=auth101
aors=101
  
[auth101]
type=auth
auth_type=userpass
password=1234567890
username=101
  
[101]
type=aor
max_contacts=2

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

asterisk -rvvvvvv

И введем команду повторной загрузки настроек из файла pjsip.conf

pjsip reload

Теперь запустим SIP телефон и настроем учетную запись 100 на нём. Пароль указываем такой какой прописали в "password=1234567890"

Структура файла extensions.conf

Открываем 

nano /etc/asterisk/extensions.conf

и в само конце дописываем (это чтобы можно было звонить между внутренними аппаратами)

[from-internal]
exten = 100,1,Dial(PJSIP/100)
exten = 101,1,Dial(PJSIP/101)

ГОТОВО. Самая база для обычных звонков создана. Далее уже пойдут более сложные действия

Процесс вызова

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

Формат записи такой: 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. Можно написать и так:

[from-internal]
exten = 100,1,Answer()
exten = 100,n,Playback(demo-congrats)
exten = 100,n,Dial(PJSIP/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 цифр будет выглядеть так:

[from-internal]
exten = _XXX,1,Dial(PJSIP/${EXTEN})

Где _XXX – любые 3 цифры, ${EXTEN} – переменная передающая набранный добавочный номер

Вложение контекстов

Есть одна особенность, Asterisk сначала сортирует добавочные (exten) и затем ищет первое совпадение. Чтобы при совпадении шаблонов заставить Asterisk звонить по нужному будем использовать вложенные контексты.

[from-internal]
include=long
exten = _XXX,1,Dial(PJSIP/${EXTEN})
 
[long]
exten => _X.,1,Dial(PJSIP/${EXTEN}@sipnet)

В контексте 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

Добавляем в конец файла регистрацию транка провайдера

[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/100&PJSIP/101)

Я создал контекст from-sipnet указанный ранее при создании ENDPOINT sipnet. При поступлении входящего вызова (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-файлов.
Принять
Политика конфиденциальности