Задача обзванивать номера по списку взятому из файла,проигрывать фразу типа «вы наш клиент?Если да,нажмите 2»,результат выводить на экран.Вторая переменная ru/en в зависимости от нее проигрываются разные файлы.Входящие звонки не планируются,внутренние номера тоже только для первичных тестов быди заведены.Скрипт формирует call файлы и грепает вывод после окончания вызова.
/etc/asterisk/sip.conf
udpbindaddr=0.0.0.0
tcpenable=no
tcpbindaddr=0.0.0.0
transport=udp
srvlookup=yes
allowguest=no
limitonpeers=yes
[authentication]
;Создаем шаблон для внутренних номеров
[phones](!)
type=friend
context=call-out
secret=хххххх
host=dynamic
nat=no
qualify=yes
canreinvite=no
callgroup=1
pickupgroup=1
call-limit=1
dtmfmode=auto
disallow=all
allow=alaw
allow=ulaw
allow=g729
allow=g723
allow=g722
;Создаем пользователей
[100](phones)
callerid="Number 100" <100>
[104](phones)
callerid="Number 104" <104>
;подключаем zadarma
[sipzadarma]
host=sip.zadarma.com
insecure=invite,port
type=peer
fromdomain=sip.zadarma.com
disallow=all
allow=alaw
allow=ulaw
dtmfmode=auto
secret=
trunkname=sipzadarma
fromuser=sipzadarma
callbackextension=sipzadarma
context=zadarma-in
qualify=400
directmedia=no
==============================
/etc/asterisk/extensions.conf
[general]
static=yes
writeprotect=no
[globals]
[default]
;Вешаем трубку
[handup-sip]
exten => _X!,1,HangUp()
;Исходящие звонки
[call-out]
;Звонок на внутренний номер
exten => _XXX,1,Dial(SIP/${EXTEN})
include => handup-sip
[call-client-ru]
exten => s,1,Answer()
exten => s,2,Playback(conf-now-recording)
exten => s,3,Read(myvar,beep,1,,,15)
exten => s,n,SayDigits(${myvar})
;exten => s,n,Set(CDR(userfield)=${myvar})
;exten => s,n,Verbose(${myvar})
;exten => s,n,System(echo "${CHANNEL}" "${DIALSTATUS}" - "${myvar}" >> /var/log/asterisk/${STRFTIME(${EPOCH},,%Y%m%d)})
exten => s,n,System(echo "${NUM}" - "${myvar}" >> /var/spool/asterisk/answer)
[call-client-en]
exten => s,1,Answer()
exten => s,2,Playback(conf-now-recording)
exten => s,3,Read(myvar,beep,1,,,15)
exten => s,n,SayDigits(${myvar})
;exten => s,n,Set(CDR(userfield)=${myvar})
;exten => s,n,Verbose(${myvar})
;exten => s,n,System(echo "${CHANNEL}" "${DIALSTATUS}" - "${myvar}" >> /var/log/asterisk/${STRFTIME(${EPOCH},,%Y%m%d)})
exten => s,n,System(echo "${NUM}" - "${myvar}" >> /var/spool/asterisk/answer)
===================================
Скрипт для формирования call файлов
call.sh
#!/bin/sh
# Based on example at http://asterisk-support.ru/forum/topics/267/
pause=40
spooldir=/var/spool/asterisk # No trailing slash!
diallist=/var/spool/asterisk/list.txt
if [ $1 ]; then
echo "$1 $2" > $diallist
fi
echo "" > $spooldir/answer
echo `date`": Dialing with $pause second pause"
while read -r number lang; do
if [ "$lang" = "ru" ]; then
echo "Channel: SIP/$number@
Set: NUM=$number
MaxRetries: 0
RetryTime: 5
WaitTime: 30
Context: call-client-ru
Extension: s
Callerid:
Priority: 1
AlwaysDelete: Yes
Archive: Yes" > $spooldir/$number
chmod 777 $spooldir/$number
chown asterisk:asterisk $spooldir/$number
mv $spooldir/$number $spooldir/outgoing
echo "Number: $number"
echo "Language: russian"
sleep $pause
status=`cat $spooldir/outgoing_done/$number | grep Status |cut -d":" -f 2`
num=`cat $spooldir/answer| grep $number|cut -d"-" -f2`
echo "Status: $status
Answer: $num
============"
else
echo "Channel: SIP/$number@
Set: NUM=$number
MaxRetries: 0
RetryTime: 5
WaitTime: 30
Context: call-client-en
Extension: s
Callerid:
Priority: 1
AlwaysDelete: Yes
Archive: Yes" > $spooldir/$number
chmod 777 $spooldir/$number
chown asterisk:asterisk $spooldir/$number
mv $spooldir/$number $spooldir/outgoing
echo "Number: $number"
echo "Language: english"
sleep $pause
status=`cat $spooldir/outgoing_done/$number | grep Status |cut -d":" -f 2`
num=`cat $spooldir/answer| grep $number|cut -d"-" -f2`
echo "Status: $status
Answer: $num
============"
fi
done < $diallist
echo "Done"
exit 0