В этой записке описана базовая настройка программной IP АТС Asterisk. Все только самое важное, ничего лишнего. По мере необходимости, вы можете дополнять конфигурационные файлы внося свои корректировки, в случае, если базового функционала стало не хватать.
1. Базовые возможности обычной мини АТС
Под базовыми возможностями я подразумеваю следующее:
-
Как прописывать внутренние номера, допустим офис менеджеру номер 100, директору номер 101, маркетологу номер 102, бухгалтеру номер 200 и т.д.
-
Как подключить городской номер чтобы осуществлять исходящие звонки в город и на мобильные телефоны. У нас в Казахстане популярен способ подключения по протоколу SIP. Государственный провайдер и сотовые операторы без проблем подключают абонента по SIP. Мы будем использовать такую линию на нашем Asterisk, чтобы наши внутренние пользователи могли звонить в город и на сотовые номера. Здесь только подключение номера, настройка исходящих вызовов будет описано в последнем пункте этой записки.
-
Как настроить распределения входящих звонков, чтобы позвонивший на городской номер попал на внутренний номер секретарши.
-
Как сделать настройку для исходящих звонков. Чтобы внутренние номера, могли звонить в город, на сотовые и другие номера.
2. Основные файлы для достижения результата
Будем использовать только два файла:
-
/etc/asterisk/sip.conf - описания для внутренних и городских номеров
-
/etc/asterisk/extensions.conf - описания логики работы Asterisk, прием звонков, исходящие вызовы.
3. Настройка внутренних номеров
Подключение SIP телефонов (учетные записи, внутренние номера):
# vi /etc/asterisk/sip.conf
Пишем основные настройки:
[general]bindport=5060alwaysauthreject=yes
Описание:
- [general] - секция c головными настройками
- bindport=5060 - SIP порт по которому будет работать Asterisk, по умолчанию используется SIP порт 5060
- alwaysauthreject=yes - не выдаем детального сообщения, причины почему нет подключения.
Прописываем первый номер 100 (учетную запись).
# vi /etc/asterisk/sip.conf
[100]type=friendhost=dynamiccontext=phonessecret=passworddeny=0.0.0.0/0.0.0.0permit=10.68.50.0/24callerid="Секретарша" <100>
Описание:
- [100] - имя учетной записи (может содержать символы)
- type=friend - указывает что устройство может совершать и принимать звонки
- host=dynamic - указывает что IP адрес у телефона динамический т.е. по DHCP
- context=phones - указывает контекст в котором данный номер работает.
- secret=password - указываем пароль к учетке с номером 100
- deny=0.0.0.0/0.0.0.0 - запрещаем подключение c любого IP
- permit=10.168.50.0/24 - разрешаем подключение к серверу только определенному диапазону сети (авторизация вкл. только для лок. сети)
- callerid="Секретарша" <100> - информация для Сaller*Id. То есть сам внут. номер 100
4. Подключение к провайдеру по протоколу SIP
Подключаем Asterisk к SIP провайдеру
# vi /etc/asterisk/sip.conf
Дописываем в секцию [general] регистрацию на провайдерском сервере:
[general]
register => login1:password1@sip.telecom.kz:5061/2755055~3600
- [general] - основная секция
- login1 - логин учетной записи с городским номером
- password - пароль от этой учетной записи
- sip.telecom.kz - провайдерский сервер
- 2755055 - здесь мы определили, что входящие звонки из города в asterisk должны приходить на внутреннею метку (номер) 2755055, которая будет описана в файле extensions.conf, если этого не сделать, все звонки будут приходит на служебный номер "s" или на шаблон .X_ контекста [incoming_calls]. Контекст с именем [incoming_calls], мы опишем в секции авторизации на провайдерском сервере [sip-provaider]. Эти настройки описаны внизу записки. Кстати, метка 2755055 меняет формирование поля Contact в SIP пакетах.
- ~3600 - таймаут регистрации
Стоит написать что, не всегда нужна регистрация на провайдерском сервере, некоторым операторам хватает только авторизации учетной записи без регистрации, например сотовый номер от мобильного оператора KCELL, не нуждается в регистрации. Важный момент - операторы могут делать привязку учетной записи с номером к IP адресу вашего сервера.
5. Входящие звонки
Принимаем входящие звонки на внутренний номер.
Сперва делаем тест с проигрыванием звукового сообщения "Hello World".
# vi /etc/asterisk/extensions.conf
[general][globals][default]exten => _X.,1,Verbose(1,Получен звонок с внешней линии)exten => _X.,n,Answer()exten => _X.,n,Playback(hello-world)exten => _X.,n,Hangup()
Описание:
- [general] - основная секция
- [globals] - секция для описания глобальных переменных
- [default] - секция с стандартным контекстом - по умолчанию сюда попадают все внешние звонки
- exten => _X.,1,Verbose(1,Получен звонок с внешней линии) - передаем произвольный текст в детальный вывод. Это требуется для отладки работы Asterisk. Это строка будет в логах Asterisk.
- exten => _X.,n,Answer() - поднимаем трубку
- exten => _X.,n,Playback(hello-world) - проигрываем звуковой файл "Hello World"
- exten => _X.,n,Hangup() - ложим трубку
Теперь соединим внешнего абонента с внутренним номером 100:
[general][globals][default]exten => _X.,1,Verbose(1,Получен звонок с внешней линии)exten => _X.,n,Answer()exten => _X.,n,Dial(SIP/100) ;переводим вызов на абонента 100exten => _X.,n,Hangup() ;ложим трубку
Описание:
- [general] - основная секция
- [globals] - глобальная секция
- [default] - секция с стандартным контекстом, по умолчанию сюда попадают все внешние звонки
- exten => _X.,1,Verbose(1,Получен звонок с внешней линии) - передаем произвольный текст в детальный вывод
- exten => _X.,n,Answer() - поднимаем трубку
- exten => _X.,n,Dial(SIP/100) - переводим вызов на внутреннего абонента с номером 100
- exten => _X.,n,Hangup() - ложим трубку
В этом примере входящие звонки поступают в контекст по умолчанию с именем [default], чтобы исправить это, можно указать другой контекст, например [incoming_calls], что мы и сделаем в примере внизу.
Настраиваем входящие и исходящие звонки через городскую телефонную линию с номером 2755-055
Редактируем /etc/asterisk/sip.conf
Добавляем настройки - секция авторизации на провайдерском сервере:
[sip-provaider]type=peerhost=sip.telecom.kzfromuser=2755055defaultuser=2755055outboundproxy=sip.telecom.kz:5061port=5060secret=passwordcontext=incoming_callsdtmfmode=rfc2833disallow=allallow=gsmallow=ulawinsecure=port,invite
По сути с помощью строчки регистрации и секции авторизации, мы подключаем Asterisk к провайдеру вроде клиентского софтфона, например X-Lite. Если вы поменяете пароль к провайдерской учетной записи с городским номером, не забывайте менять пароль в строчке регистрации и в секции авторизации.
Описание секции авторизации:
- [sip-provaider] - секция описывающая настройки авторизации
- type=peer - указываем что при получении INVITE(вызов) будем сравнивать не имя поставщика сервисов а его IP адрес
- host=sip.telecom.kz - указываем от кого мы должны получать/отправлять INVITE
- fromuser=2755055 - имя пользователя для аутентификации
- defaultuser=2755055
- outboundproxy=sip.telecom.kz:5061 - сервер провайдера
- port=5060 - sip порт
- secret=password
- context=incoming_calls - задаем контекст, на него будем принимать звонки.
- dtmfmode=rfc2833 - метод генерации тонального DTFM-кода
- disallow=all - запрещаем все кодеки
- allow=gsm - разрешаем кодек GSM
- allow=ulaw - разрешаем кодек g711
- insecure=invite
Здесь, мы указали очень важный момент, все поступающие звонки по городскому номеру 2755055 будут приходить в контекст "incoming_calls" на метку 2755055 которую мы указали ранее в строке регистрации на провайдерском сервере файла sip.conf:
register => login1:password1@sip.telecom.kz/2755055~3600
После описания этого номера в контекст "incoming_calls", мы можем направить внешний звонок нашей любимой секретарше или проиграть звуковой файл "Пипец, шоб все было чики-пуки".
И еще, здесь есть очень важный момент, мы указали имя для секции авторизации как "sip-provaider", в дальнейшем когда нам потребуется сделать исходящие звонки с наших внутренних номеров в город, понадобиться использовать имя секции авторизации "sip-provaider" для осуществления звонков во внешнею сеть города, мобильных и т.д., смотрите пример исходящего звонка - Dial(SIP/sip-provaider/${EXTEN})).
Редактируем /etc/asterisk/extensions.conf
[general][globals][default][incoming_calls]exten => _X.,1,Verbose(Получен вызов с внешней линии)exten => _X.,n,Dial(SIP/100)
- [general] - головная секция
- [globals] - глобальная секция для переменных
- [default] - секция по умолчанию
- [incoming_calls] - контекст секция с входящими вызовами
- exten => _X.,1,Verbose(Получен вызов с внешней линии) - протоколируем что получен вызов
- exten => _X.,n,Dial(SIP/100) - принимаем вызов на номер 100
6. Исходящие звонки
Теперь сделаем исходящею связь:
# vi /etc/asterisk/extensions.conf
[outgoing_calls]exten => _X.,1,Verbose(Совершается исходящий вызов)exten => _X.,n,Dial(SIP/sip-provaider/${EXTEN})
Описание:
- [outgoing_calls] - контекст для исходящих звонков
- exten => _X.,1,Verbose(Совершается исходящий вызов) - протоколируем исходящий вызов
- exten => _X.,n,Dial(SIP/sip-provaider/${EXTEN}) - соединяемся с провайдерским сервером и набираем номер.
- ${EXTEN} - это набранный номер внутреннего пользователя
Так вот, мы ранее дали имя секции авторизации вроде "sip-provaider", теперь чтобы осуществить исходящий звонок, пишем команду соединить Dial и указываем имя секции авторизации + набранный номер на внут. телефоне в виде переменной ${exten}.
Теперь надо включить контекст [outgoing_calls] в конекст [phones] файла /etc/asterisk/extensions.conf
[phones]include => outgoing_calls
Источники:
Видео курс: Asterisk Made Easy: Learn to Install Asterisk and Linux