Настройка Asterisk по ТЗ с меню и музыкой вместо гудков

Инструкция по установке астериска: Установка Asterisk 16 на Debian 10

Техническое задание

1.) Работа АТС ПН-ПТ с 9:00 — 17:00, в СБ с 9:00-16:00

При входящем звонке проигрывается звуковой файл с перечислением пунктов меню — М1.1
При нажатии цифры:

[1] — АТС соединяет с мастером по ремонту телефонов, планшетов, компьютеров и ноутбуков.
До момента поднятия трубки играет мелодия — М0
Если тут трубку не подняли в течении 60 сек, то включается аудио-запись: — М1.1.2

[2] — АТС соединяет с мастером по телевизоров.
До момента поднятия трубки играет мелодия — М0
Если тут трубку не подняли в течении 60 сек, то включается аудио-запись: — М2.1

[3] — АТС включает аудио-запись — М3.1

2.) Работа АТС ПН-ПТ с 17:00 — 9:00, в СБ с16:00 — ПН 9:00

АТС включает аудио-запись — М4.1

 

Реализация в Asterisk

Записи преобразовать в формат ULAW (инструкция по преобразованию: Конвертировать звуковые файлы в Debian)

записи М1.1, М1.1.2, М2.1, М3.1, М4.1 — поместил в папку /var/lib/asterisk/sounds (папку со звуками определяет параметр astdatadir в файле /etc/asterisk/asterisk.conf)

запись М0 поместил в папку /var/lib/asterisk/moh и удалил все остальные записи из этой папки (папка определена параметром directory в группе default в файле /etc/asterisk/musiconhold.conf)

GoIP с одной симкой подсоедена на пользователя 4001 и при внешнем звонке производит вызов на 2001

Настройка GoIP в статье: Настройка шлюза GOIP8 для Asterisk

Настройка в файлах:

/etc/asterisk/sip.conf

[general]
useragent=Test-Ats
transport=udp
udpbindaddr=0.0.0.0:5060
tcpbindaddr=0.0.0.0:5061
tcpenable=yes
localnet=192.168.1.0/24
language=ru
allowguest=no
match_auth_username=yes
maxexpiry=3600
dtmfmode=rfc2833
minexpiry=60
defaultexpiry=120
registerattempts=0
registertimeout=20
videosupport=no
disallow=all
allow=ulaw,alaw,gsm,h261,h263,h263p,h264
notifyringing=yes
notifyhold=yes
tos=0x68
permit = 0.0.0.0/0.0.0.0
allowoverlap=yes
allowsubscribe=yes
allowtransfers=yes
alwaysauthreject=yes
subscribecontext=default
autodomain=no
callevents=yes
compactheaders=no
dumphistory=yes
g726nonstandard=no
ignoreregexpire=no
pedantic=no
promiscredir=no
recordhistory=no
relaxdtmf=no
rtcachefriends=no
rtptimeout=1800
rtsavesysname=no
rtupdate=no
sendrpid=no
sipdebug=no
srvlookup=no
trustrpid=no
usereqphone=no
progressinband=no
maxcallbitrate=384
tos_sip=cs3
tos_audio=ef
tos_video=af41
cos_sip=3
cos_audio=5
cos_video=4
constantssrc=yes
nat=force_rport,comedia
session-timers=accept
session-expires=1800
session-minse=90
session-refresher=uas

/etc/asterisk/users.conf

[general]
userbase=600
hasvoicemail=yes
vmsecret=123456
hassip=no
hasiax=no
hasmanager=no
callwaiting=yes
threewaycalling=yes
callwaitingcallerid=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
host=dynamic
localextenlength=3
qualify=yes
vmexten=*2
subscribecontext=hintcontext
language=ru

[tmp-udp](!)
cid_number= 
vmsecret=no
nat=force_rport,comedia
dtmfmode=rfc2833
callgroup=
pickupgroup=1
callwaiting=no
hasmanager=yes
hasvoicemail=no
hasagent=no
mailbox=no
hassip=yes
registersip=no
transfer=yes
host=dynamic
threewaycalling=yes
insecure=port
call-limit=100
compensate=yes
transport=udp
srtpcapable=no
qualify=yes
remoteregister=yes

[tmp-tcp](!)
cid_number= 
vmsecret=no
nat=force_rport,comedia
dtmfmode=rfc2833
callgroup=
pickupgroup=1
callwaiting=no
hasmanager=yes
hasvoicemail=no
hasagent=no
mailbox=no
hassip=yes
registersip=no
transfer=yes
host=dynamic
threewaycalling=yes
insecure=port
call-limit=100
compensate=yes
transport=tcp
srtpcapable=no
qualify=yes
remoteregister=yes

[1001](tmp-udp)
username=1001
secret=123456
context=from-internal

[1002](tmp-udp)
username=1002
secret=123456
context=from-internal

[1003](tmp-udp)
username=1003
secret=123456
context=from-internal

[4001](tmp-udp)
username=4001
secret=123456
context=from-external-4001
dtmfmode=inband

/etc/asterisk/extensions.conf

[general]
static = yes
writeprotect = no
autofallthrough = yes
clearglobalvars = yes
priorityjumping = no
extenpatternmatchnew = no

[from-internal]
exten => _100X,1,NoOp(from-internal)
	same => n,Dial(SIP/${EXTEN}, 60)
	same => n,Hangup()

[from-external-4001]
exten => 2001,1,Answer()
	same => n,GotoIfTime(9:00-23:30,mon-fri,*,*?raboch)
	same => n,GotoIfTime(9:00-16:00,sat,*,*?raboch)
	same => n,Goto(from-neraboch,s,1)
	same => n(raboch),Goto(from-raboch,s,1)
exten => _100X,1,NoOp(from-external-4001)
	same => n,Dial(SIP/${EXTEN}, 60)
	same => n,Hangup()

[from-raboch]
exten => s,1,Ringing
	same => n(st1),Background(m1-1)
	same => n,Waitexten(5)
	same => n,Goto(st1)
exten => 1,1,Goto(from-raboch1,s,1)
exten => 2,1,Goto(from-raboch2,s,1)
exten => i,1,Playback(m3-1)
	same => n,Wait(5)
	same => n,Hangup()

[from-raboch1]
exten => s,1,Ringing
	same => n,Dial(SIP/1001,30,mU(from-record,${UNIQUEID}))
	same => n,Playback(m1-1-2)
	same => n,Wait(5)
	same => n,Hangup()

[from-raboch2]
exten => s,1,Ringing
	same => n,Dial(SIP/1002,30,mU(from-record,${UNIQUEID}))
	same => n,Playback(m2-1)
	same => n,Wait(5)
	same => n,Hangup()

[from-record]
exten => s,1,MixMonitor(/var/log/asterisk/records/${ARG1}.wav)
	same => n,Return

[from-neraboch]
exten => s,1,Ringing
	same => n(st1),Playback(m4-1)
	same => n,Wait(5)
	same => n,Hangup()