В большинстве реализованных кол бек системах звонок сначала поступает тому кто звонил, а уж потом оператору, это и не выгодно, так как мы платим за ожидания пользователя на линии и не удобно, так как пользователь вынужден слушать музыку.
Как это решить:
Все наши транки, которым нужен кол бек должны быть в контексте, например «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
Итого мы получили следующую систему:
- Пользователь звонит, и слышит здравствуйте мы Вам перезвоним.
- Первый освободившийся оператор получает входящий звонок
- После того как оператор снял трубку пользователь получает входящий звонок, и успешно говорит с оператором.