Asterisk поддерживает несколько сигнальных протоколов передачи информации: H.323, SIP, IAX. Они используются для установления соединения, чаще всего применяется SIP. Голос передается обычно по RTP. Представление об этих протоколах нужно иметь потому, что имя протокола задаётся когда в Asterisk настраивается исходящий звонок.
Исходящий звонок в Asterisk — настройка
Данный материал является логическим продолжением цикла статей по настройке офисной телефонии:
Установка Asterisk из исходников. Настройка корпоративной телефонии — часть №1
Asterisk настройка сети. Корпоративная телефония часть №2
Asterisk добавление пользователей. Корпоративная телефония часть №3
Asterisk добавление пользователей. Корпоративная телефония часть №4
Настройку будем производить в /etc/asterisk/extensions.conf и /etc/asterisk/sip.conf
Сначала посмотрим информацию по приложению которое будем использовать
Переходим в консоль сервера телефонии
asterisk -rvvv
Выводим все приложения
core show applications
Теперь из списка выбираем dial и просматриваем информацию по нему
core show applications like dial
core show applications description dial
Информация при этом соотносится с используемой версией пакета
exit
Правим extensions.conf настроенный ранее
mcedit /etc/asterisk/extensions.conf
[phones]
exten => 100,1,NoOp(First Line)
exten => 100,2,NoOp(Second Line)
exten => 100,3,Dial(Sip/user1)
exten = > 100,4,Hangup
После указания номера 100 идет порядковый номер правила, а затем название протокола — Sip в данном случае — и через слэш имя пользователя, который задан в sip.conf
После того как сделан вызов обязательно нужно использовать Hangup
asterisk -rvvv
Перезапускаем диалплан
dialplan reload
Сейчас можно звонить на extention 100 (т.е. авторизовавшись в программном телефоне или используя аппаратный телефон звонить на 100), при звонке в консоли Asterisk видно, что вызов проходит, но после окончания звонка можно увидеть такую ошибку:
"unable to reopen master file /var/log/asterisk//cdr-csv//Master:csv" :Permistion denied
Она вызвана существованием некорректных прав и легко исправляется
touch /var/log/asterisk//cdr-csv//Master.csv
chown asterisk /var/log/asterisk//cdr-csv//Master.csv
asterisk -rvvv
Сейчас исходящий звонок должен проходить без ошибок.
Добавляем аналогичные строки в конфигурационный файл для второго пользователя
mcedit /etc/asterisk/extensions.conf
[phones]
exten => 100,1,NoOp(First Line)
same => n,NoOp(Second Line)
same => n,Dial(Sip/user1)
same = > n,Hangup
exten => 200,1,NoOp(First Line)
same => n,NoOp(Second Line)
same => n,Dial(Sip/user2)
same = > n,Hangup
Здесь использован более совершенный синтаксис — для каждого последующего правила прописывается same, а порядковый номер заменяется на n, что действительно для всех номеров кроме первого (который всегда указывается) — это является хорошей практикой и исключает возможность неправильного выполнения программы, например, при перестановке строк.
После перезапуска диалплана пользователи могут беспрепятственно звонить друг другу.
Проигрывание звукового файла при звонке
Добавим проигрывание определенного звукового файла при звонке на одно из расширений
mcedit /etc/asterisk/extensions.conf
[phones]
exten => 100,1,NoOp(First Line)
same => n,NoOp(Second Line)
same => n,Dial(Sip/user1)
same = > n,Hangup
exten => 200,1,NoOp(First Line)
same => n,NoOp(Second Line)
same =>n,Playback(tt-monkeys)
same => n,Dial(Sip/user2)
same = > n,Hangup
asterisk -rvvv
dialplan reload
Теперь при звонке на 200 сначала будет проигрываться один из стандартных звуковых фрагментов, потом будет совершаться вызов на user2.
Настроим возможность звонить во внешний мир
Строк с playback из предыдущего примера здесь нет, в остальном диалплан тот же.
mcedit /etc/asterisk/extentions.conf
[phones]
exten => 100,1,NoOp(call for user1)
same => n,Dial(Sip/user1)
same = > n,Hangup
exten => 200,1,NoOp(call for user2)
same => n,Dial(Sip/user2)
same = > n,Hangup
exten => 8888,1,Goto(ougoing,8888,1)
[outgoing]
extent => 8888,1,Dial(SIP/outside)
Вводим новое расширение outgoing, а при звонках на 8888 вызовы будут перенаправляться пользователю outside из sip.conf — обычно это провайдер телефонии.
Теперь если user1 или user2 будут набирать 8888 телефон пользователя outside будет звонить.
Если мы хотим звонить не только на номер 8888 (а это обычно так, то используем регулярное выражение)
mcedit /etc/asterisk/extentions.conf
[phones]
exten => 100,1,NoOp(call for user1)
same => n,Dial(Sip/user1)
same = > n,Hangup
exten => 200,1,NoOp(call for user2)
same => n,Dial(Sip/user2)
same = > n,Hangup
exten => _XXXX,1,Goto(ougoing,8888,1)
[outgoing]
extent => 8888,1,Dial(SIP/outside)
Все регулярные выражения начинаются с нижнего подчеркивания, ХХХХ означает, что провайдеру вызов будет переадресован случае если номер состоит из 4-х цифр, для номера произвольной длины можно использовать _0X.
Если после настройки звука нет или он есть частично нужно выяснить за NAT-ом ли клиент и сервер и скорректировать конфигурацию.