Исходящий звонок в Asterisk. Корпоративная телефония часть №5


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)



Исходящий звонок Asterisk




Вводим новое расширение 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-ом ли клиент и сервер и скорректировать конфигурацию.

Сказать спасибо