В большенстве реализованых кол бек системах звонок сначала поступает тому кто звонил, а уж потом оператору, это и не выгодно, так как мы платим за ожидания пользователя на линии и не удобно, так как пользователь вынужден слушать музыку.
Как это решить:
Все наши транки, которым нужен кол бек должны быть в контексте, например “callback-to-to”
в нет мы приветствуем пользователя и говорим о перезвоне, по хенгапу выполняем скрипт создания колл файла, не ждем пока дослушает запись, так как можем пропустить, а именно по хенгапу, см. ниже.
[callback-to-to]
exten => s,1,Playback(custom/hello)
exten => n,hangup
exten => h,1,System(/var/lib/asterisk/agi-bin/callback.sh ${CALLERID(num)})
Для операторов создали очередь 1001, куда и будем слать звонок, Время ожидания ответа одной попытки 900 секунд, попыток 10, а вдруг…. Скрипт выглядит так:
####create астериск.укр ##########
#!/bin/sh
#Get number to call
number=$1
callfile=/tmp/$number.call
rm -Rf $callfile#Create call file
touch $callfile
echo “Channel: Local/1001@from-queue” >> $callfile
echo “CallerID: $number ” >> $callfile
echo “MaxRetries: 10” >> $callfile
echo “RetryTime: 10” >> $callfile
echo “WaitTime: 900” >> $callfile
echo “Context: callback” >> $callfile
echo “Extension: s” >> $callfile
echo “Priority: 1” >> $callfile
echo “Set: BNUM=$number” >> $callfile
echo “Set: number_to=$numen_to” >> $callfile#Move call file to asterisk directory
mv $callfile /var/spool/asterisk/outgoing/exit 0
######END #########
Контекст для выполнения исходящих “callback”, он выполняется после того как оператор снимает трубку.
[callback]
exten => s,1,Answer()
same => n,Wait(4)
same => n,Dial(Local/${BNUM}@from-internal,220,r)
same => n,Hangup
Итого мы получили следующую систему:
- Пользователь звонит, и слышит здравствуйте мы Вам перезвоним.
- Первый освободившийся оператор получает входящий звонок
- После того как оператор снял трубку пользователь получает входящий звонок, и успешно говорит с оператором.