Yvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
1
11:26, 12 февраля 2016

Базовая настройка Asterisk

Blog post image

В этой записке описана базовая настройка программной 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=5060
alwaysauthreject=yes

Описание:

  • [general] - секция c головными настройками
  • bindport=5060 - SIP порт по которому будет работать Asterisk, по умолчанию используется SIP порт 5060
  • alwaysauthreject=yes - не выдаем детального сообщения, причины почему нет подключения.
 

Прописываем первый номер 100 (учетную запись).

# vi /etc/asterisk/sip.conf

[100]
type=friend
host=dynamic
context=phones
secret=password
deny=0.0.0.0/0.0.0.0
permit=10.68.50.0/24
callerid="Секретарша" <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)       ;переводим вызов на абонента 100
exten => _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=peer
host=sip.telecom.kz
fromuser=2755055
defaultuser=2755055
outboundproxy=sip.telecom.kz:5061
port=5060
secret=password
context=incoming_calls
dtmfmode=rfc2833
disallow=all
allow=gsm
allow=ulaw
insecure=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
 

Источники:

http://alladmin.ru/?p=213

Видео курс: Asterisk Made Easy: Learn to Install Asterisk and Linux

Взаимодействие клиентов SIP. Часть 1

 
1
3997
1