IVR голосовое меню для Asterisk сервера

09.07.2013 - 09:06

Краткая заметка по IVR...

[root@voip /usr/local/etc/asterisk]#cat /usr/local/etc/asterisk/extensions.conf
#include "/usr/local/etc/asterisk/menu/company.tree"

;КиевСтар-1                                                                                                                                
[ks1]                                                                                                                                      
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})                                                                          
exten => sms,n,System(echo "${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${SMS}" >> /var/log/asterisk/sms.tx
t)                                                                                                                                          
exten => sms,n,Hangup()                                                                                                                    
                                                                                                                                           
exten => ussd,1,Verbose(Incoming USSD: ${USSD})                                                                                            
exten => ussd,n,System(echo "${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}: ${USSD}" >> /var/log/asterisk/ussd.txt)              
exten => ussd,n,Hangup()                                                                                                                    

exten => s,1,GotoIfTime(9:00-18:00|mon-fri|*|*?wellcome,s,1)                                                                                
exten => s,2,GotoIfTime(18:00-9:00|mon-fri|*|*?not_work,s,1)                                                                                
exten => s,3,GotoIfTime(9:00-15:00|sat|*|*?wellcome,s,1)                                                                                    
exten => s,4,GotoIfTime(15:00-9:00|sat|*|*?not_work,s,1)                                                                                    
exten => s,5,GotoIfTime(*|sun|*|*?not_work,s,1)

;Интертелеком-1                                                                                                                            
[it1]                                                                                                                                      
exten => 44XXXXXXX,1,GotoIfTime(9:00-18:00|mon-fri|*|*?wellcome_it,44XXXXXXX,1)                                                            
exten => 44XXXXXXX,2,GotoIfTime(18:00-9:00|mon-fri|*|*?not_work,s,1)                                                                        
exten => 44XXXXXXX,3,GotoIfTime(9:00-15:00|sat|*|*?wellcome_it,44XXXXXXX,1)                                                                
exten => 44XXXXXXX,4,GotoIfTime(15:00-9:00|sat|*|*?not_work,s,1)                                                                            
exten => 44XXXXXXX,5,GotoIfTime(*|sun|*|*?not_work,s,1)

[root@voip /usr/local/etc/asterisk/menu]# /usr/local/etc/asterisk/menu/company.tree
[wellcome]
exten => s,1,Answer() ;Поднимаем трубку.
exten => s,n,Background(/usr/local/share/asterisk/sounds/music/wellcome)  ;Здравствуйте, Вас приветствует компания "___", оставайтесь пожалуйста на линии.
exten => s,n,Dial(SIP/201&SIP/202&SIP/203&SIP/204&SIP/205,20,m) ;Мелодия ожидания 20сек.
exten => s,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}' >> /var/log/asterisk/missed.txt)
exten => s,n,Playback(/usr/local/share/asterisk/sounds/music/line_is_busy) ; в данный момент никто не может принять Ваш звонок              
exten => s,n,Dial(SIP/201&SIP/202&SIP/203&SIP/204&SIP/205,20,m)                                                                            
exten => s,n,Playback(vm-nobodyavail) ; в данный момент никто не может принять Ваш звонок                                                  
exten => s,n,Hangup() ; положить трубку                                                                                                    
                                                                                                                                           
[wellcome_it]                                                                                                                              
exten => 44XXXXXXX,1,Answer()                                                                                                              
exten => 44XXXXXXX,n,Background(/usr/local/share/asterisk/sounds/music/wellcome)                                                            
exten => 44XXXXXXX,n,Dial(SIP/201&SIP/202&SIP/203&SIP/204&SIP/205,20,m)                                                                    
exten => 44XXXXXXX,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${CALLERID(name)} - ${CALLERID(num)}' >> /var/log/asterisk/miss
ed.txt)                                                                                                                                    
exten => 44XXXXXXX,n,Playback(/usr/local/share/asterisk/sounds/music/line_is_busy) ; в данный момент никто не может принять Ваш звонок      
exten => 44XXXXXXX,n,Dial(SIP/201&SIP/202&SIP/203&SIP/204&SIP/205,20,m)                                                                    
exten => 44XXXXXXX,n,Playback(vm-nobodyavail) ; в данный момент никто не может принять Ваш звонок                                          
exten => 44XXXXXXX,n,Hangup() ; положить трубку                                                                                            
                                                                                                                                           
[not_work]
exten => s,1,Playback(/usr/local/share/asterisk/sounds/music/not_work_time)                                                                
exten => s,n,Dial(SIP/201&SIP/202&SIP/203&SIP/204&SIP/205,20,m)                                                                            
exten => s,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}' >> /var/log/asterisk/missed.txt)    
exten => s,n,Playback(vm-nobodyavail) ; в данный момент никто не может принять Ваш звонок                                                  
exten => s,n,Hangup() ; положить трубку

если необходимо ввести добавочный номер:
[ivr]
exten => s,1,Answer()
;Проигрываем приветствие
exten => s,2,Background(/etc/asterisk/ivr/ivr-main)
;Ждем 5 секунд ввода добавочного номера
exten => s,3,WaitExten(5)
;Звоним по введенному добавочному
exten => _XXX,1,Dial(SIP/${EXTEN})
;Если введен не существующий номер, то говорим об этом и отправляем в начало приветствия
exten => _XXX,2,Playback(privacy-incorrect)
exten => _XXX,3,Goto(ivr-main,s,1)
;Если звонящий ничего не вводит, то звоним секретарю
exten => t,1,Dial(SIP/100)

Подготовим звуковые файлы:
#!/bin/sh                                                                                                                                  
for i in *.wav                                                                                                                              
do                                                                                                                                          
        ffmpeg -i $i -acodec pcm_s16le -vol 50 -ar 8000 -ac 1  -y  done/"${i%wav}wav"                                                      
done

или с помощью sox, -v 0.5 - уменьшить входящую громкость на 50%:

sox -v 0.5 -V hello.wav -r 8000 -c 1 -t ul hello.ulaw
sox -v 0.5 -V hello.wav -r 8000 -c 1 -t al hello.alaw
sox -v 0.5 -V hello.wav -r 8000 -c 1 -t gsm hello.gsm

Параметры аудиофайла:

Формат файла wav
Audio frequency: 8 000 Hz
Аudio bitrate: 16 kbps
Audio channels: mono

Ваша оценка: Нет Средняя: 3.3 (8 votes)