Tools
командная строка asterisk -rvv
rasterisk вот так мы попадаем в консоль asterisk
sip show peers - показать сипы
sip show settings - показать настройки
sip set debug on - показывать дебаг
sip show registry
sip reload - перезагрузить настройки сип
dialplan reload - перечитать конфиг диалплана extensions.conf
dialplan show - показать диалплан
sip.conf
/etc/asterisk/sip.conf
Дальше нас интересует файл sip.conf, где определяются серверы и клиенты SIP,
с которыми будет дружить наш Asterisk. Каждый из них представлен в файле
отдельным блоком, который начинается с оглавления, заключенного в
квадратные скобки. Параметров в sip.conf довольно много,
ограничимся лишь добавлением SIP-аккаунта:
[grinder]
type=friend
host=dynamic
; defaultip=192.168.1.200
username=grinder
secret=password
language=ru
nat=no
canreinvite=no
context=office
callerid=grinder <1234>
mailbox=1234@office
; перед использованием параметра allow следует отключить все кодеки
disallow=all
; порядок следования кодеков не имеет значения
allow=ulaw
allow=alaw
extensions.conf
/etc/asterisk/extensions.conf
После определения SIP-аккаунтов наши клиенты могут регистрироваться на сервере
Asterisk и совершать исходящие вызовы. Чтобы у них была возможность
принимать звонки, следует обратиться к файлу extensions.conf, в котором
описывается план набора (Dialplan), распределяющий звонки в системе.
Здесь же указываются все разрешенные расширения.
[office]
include => default
exten => 1234,1,Dial(SIP/grinder,20)
exten => 1234,2,Voicemail(grinder)
Сопоставление имени пользователя, а не IP-адреса
Некоторые поставщики услуг для отправки своих вызовов могут использовать
вместо протокола Session Initiation Protocol множество IP-адресов,
требуя от вас создания отдельной учетной записи типа peer для каждого IP-адреса.
Если известны не все IP-адреса, вероятно, придется сравнивать имена пользователей.
В этом случае потребуется лишь немного изменить формат описания поставщика сервисов.
Самое большое изменение, на которое следует обратить внимание, – то,
что вам понадобится задать [заголовок_поставщика_услуг] как имя пользователя,
которому ваш поставщик сервисов собирается направлять вызовы.
Также мы изменили тип peer (равноправный) на friend (дружественный),
что с точки зрения Asterisk создает типы и user (пользователь),
и peer, где тип user будет сравниваться раньше peer:
[мой_уникальный_id]
type=friend
host=10.251.55.100
fromuser=мой_уникальный_id
secret=мой_секретный пароль
context=incoming_calls
dtmfmode=rfc2833
disallow=all
allow=gsm
allow=ulaw
insecure=invite
nano sip.conf
Начинается самое интересное: процесс конфигурации.
[general]
context=default ;контекст по умолчанию
allowguest=no ;никаких гостей, мы никого не ждём
allowoverlap=no ;Этот параметр определяет разрешаем мы или нет передачу вызова с дополнительными цифрами. Мы – не разрешаем.
alwaysauthreject=yes ;Этот параметр означает, что все ошибки для внешнего клиента выглядят одинаково – ошибка авторизации. Призван осложнять взлом АТС.
useragent=Orgue de Barbaris ;Это – как мы представляемся у других. Я назвался по имени первого патефона, чтобы облегчить техподдержке провайдеров
поиск диалогов с моей АТС, т.к. периодически приходится с ними общаться.
defaultexpiry=360 ;Интервал обязательной перерегистрации клиентов.
callevents=yes ;Это на будущее, чтобы клиент мог поиграть в управление music on hold
limitonpeer=yes ;Считаем исходящие и входящие вызовы пиров вместе.
tcpenable=yes ;Разрешаем TCP протокол для SIP. rtptimeout=60 ;Сколько времени клиент может не откликаться, прежде чем будет кикнут из системы.
language=ru ;Язык системы. Используется для голосового меню.
bindport=5060 ;Порт по умолчанию. Можно изменить для усложнения вычисления и взлома АТС, но решение спорное.
bindaddr=0.0.0.0 ;у меня стоят нули, т.к. АТС имеет два интерфейса и на обоих висят клиенты.
srvlookup=yes
tos_sip=cs3 ; http://www.voipinfo.org/wiki/view/Asterisk+sip+tos tos_audio=ef
disallow=all ;сначала запрещаем все кодеки
allow=alaw ;затем, разрешаем только те, что хотим использовать. Порядок значения не имеет.
allow=g729
allow=g723
allow=ulaw
dtmfmode=rfc2833 ;На Asterisk-ах рекомендуется ставить info, но мой итальянский провайдер настоял на rfc.
rtpholdtimeout=300
rtpkeepalive=5
canreinvite=no ;Этот параметр запрещает клиентам общаться напрямую.
Общение происходит только через сервер. У меня это сделано так потому что
мобильные клиенты используют платные клиенты с протоколом g.729а, а стационарные
сидят на бесплатных клиентах без оного. Поэтому, я предпочёл напрячь сервер
транскодингом alaw<->g.729a на лету в пользу качества связи для мобильных клиентов.
Тем более что Core i7-930 вообще не замечает этой нагрузки.
externip=xxx.xxx.xxx.xxx ;Указываем наш внешний IP. Параметр нужен вообще-то, если только Asterisk прячется за NAT, но у меня он есть. Нехай будет.
allowexternaldomains=yes ;Читаем тут и решаем, надо-ли вам это.
domain=mydomain.com,default fromdomain=mydomain.com ;Здесь должны
быть прописаны пиры до провайдеров. Все встречавшиеся мне SIP-провайдеры имеют
стандартный шаблон секции конфига для Asterisk и предлагают именно его для
прописывания в конфиги. Я так и сделал и у меня всё работает. Поэтому, я не
буду приводить здесь их все, дабы не смущать никого. Покажу только
мегафоновский шаблон для мультифона просто в качестве примера.
register => tcp://номер@multifon.ru:пароль:номер@sbc.megafon.ru/номер~60 ;
Это пример стандартного SIP-пира до провайдера сип-телефонии для входящей связи
[multifon] ;это тот же пир, только уже для исходящей связи
type=peer
secret=пароль
username=номер
host=sbc.megafon.ru
port=5060
insecure=port,invite
call-limit=1
context=incoming
canreinvite=no
qualify=yes
transport=tcp
dtmfmode=inband ;А теперь – самое интересное. Клиентов у нас довольно много,
поэтому, чтобы не прописывать каждому одно и то же, мы используем шаблоны.
Выглядит это так:
[defaults](!) canreinvite=no ;голосовой трафик только через сервер
disallow=all
allow=alaw
allow=g729
allow=g723 [peer](!,defaults)
type=peer
host=dynamic ;разрешаем цепляться откуда угодно
qualify=yes ;постоянно держим связь с клиентом
nat=yes ;предполагаем, что клиент может быть за NAT
call-limit=1 ;ограничиваем кол-во одновременных звонков
busylevel=1 ;сообщаем, когда отбивать с сигналом “занято”
rtpkeepalive=5 ;интервал в секундах для пинга клиента.
[ext1000](peer)
secret=secretsecretsecret
[ext1001](peer)
secret=secretsecretsecret
[ext1002](peer) secret=secretsecretsecret ;Если нам надо что-то изменить
или добавить, то выглядеть это будет так:
[ext1101](peer)
secret=secretsecretsecret
transport=tcp ;разрешаем отдельному пиру SIP по TCP.
Voicemail.conf - остаеться практически по дефолту
queues.conf
[general]
persistentmembers = yes ;очередь постоянная, никто никуда не выходит
autofill = yes ;просто так надо
autopause = no ;если мембер не отвечает, то ему всё-равно звонить
monitor-type = MixMonitor ;Пример одной очереди
[1100] ;екстеншн очереди
strategy = ringall ;стратегия обзвона группы – звонят все сразу
eventwhencalled = yes ;прилада для внешних мониторов типа Fop2
ringinuse = no ;занятых не дёргаем
timeout = 20 ;таймаут
retry = 1 ;повторный вызов всей группы через 1 секунду
wrapuptime = 0 ;какая передышка у агента очереди после звонка (сек)
maxlen = 0 ;сколько людей в очереди на ответ. 0=бесконечно
;ниже – просто список мемберов очереди
member => SIP/2222
member => SIP/1101
member => SIP/1102
member => SIP/1103
member => SIP/1104
member => SIP/1105
member => SIP/1106
member => SIP/1107
member => SIP/1108
member => SIP/1109
member => SIP/1110
Запись звуков
При создании голосовых меню часто возникает необходимость использования
собственных файлов озвучки. Звуковые файлы, используемые в Asterisk,
хранятся в формате gsm. Наиболее просто и быстро записать такие файлы можно
с помощью самого Asterisk. Для этого в номерном плане можно создать
специальный контекст со следующим содержанием:
[gsm-record]
exten => 150,1,Wait(2)
exten => 150,2,Record(testrecord:gsm)
exten => 150,3,Wait(2)
exten => 150,4,Hangup
exten => 151,1,Playback(testrecord2)
exten => 151,2,Wait(2)
exten => 151,3,Hangup
Позвонив на номер 150, мы сможем наговорить необходимый текст, который
будет сохранен в стандартной папке звуков Asterisk (/var/lib/asterisk/sound)
в файле ivrrecording.gsm. Прослушать содержимое этого файла можно,
позвонив по номеру 151.