Проблема: идет двойной колбэк.
Описание:
В момент формирования колфайла неизвестен свободный канал, поэтому его приходится искать налету, потому получилась следующая конструкция:
1- крон каждую минуту дергает скрипт написанный на C,
2 -скрипт проверяет интервал времени и при совпадении условий генерирует колфайл.
3 — колфайл вызывает Local/$NUMBER@declined-dialer в котором определяется свободный канал и делается вызов абонента
4 — на declined-dialer происходит обработка колфайла контекстом canceled-order-buyer-info-daria.
Проблема: Local/$NUMBER@declined-dialer многократно вызывается не зависимо от того поднта трубы юзверем или нет. В результате приходит не один, два-пять одновременных звонков.
Крон? Диалплан? Нет метки состояния звонка? Другие варианты?
Код: Выделить всё
LogFile='/var/log/asterisk/callbackmobile.log'
TmpFile='/var/spool/asterisk/tmp/$NUMBER'
CallFile='/var/spool/asterisk/outgoing/$NUMBER'
cat > /var/spool/asterisk/tmp/$NUMBER << EOF
MaxRetries: 4
Channel: Local/$NUMBER@declined-dialer
Context: canceled-order-buyer-info-daria
Extension: s
Set: DIALEDID=$NUMBER
Set: idsdb=$IDSDB
Set: clphone=$NUMBER
Set: standnumber=$STOPNUM
Set: clientid=$CLID
Set: clstreet=$STREET
Set: clhouse=$CLHOUSE
Set: clporch=$PORCH
SEt: clapart=$APART
Set: carclass=$CARCLASS
Set: CID=$NUMBER
Set: language=ru
#Set: carclass=$CARCLASS
#Set: stopid=$STOPID
#Set: stoporder=$STOPORDER
RetryTime: 12
WaitTime: 45
EOF
touch -d "$delate seconds" /var/spool/asterisk/tmp/$NUMBER
(sleep 1; mv /var/spool/asterisk/tmp/$NUMBER /var/spool/asterisk/outgoing/$NUMBER;) &
Код: Выделить всё
[declined-dialer]
exten => _.,1,Set(anyphone=${EXTEN:-10})
exten => _.,n,AGI(/usr/share/call-taxi/tools-call-taxi,${PBXTYPE},ops,${anyphone},${telcitydig})
exten => _.,n,Gosub(gsm-gate-looking-free-chan,s,1(${OPSOS}))
exten => _.,n,Dial(${${OPSOS}}/${if8}${anyphone},40,m()S(200))
exten => _.,nHangup()
Код: Выделить всё
[canceled-order-buyer-info-daria]
exten => s,1,Answer()
exten => s,n,Wait(1)
exten => s,n(lbl_canceled-order-buyer-info-daria_0),Set(TIMEOUT(response)=120)
exten => s,n,Set(TIMEOUT(digit)=5)
exten => s,n,Background(taxi/general/ru/no-car-com&${language}/digits/1)
exten => s,n,WaitExten(1)
exten => s,n,Goto(lbl_canceled-order-buyer-info-daria_0)
exten => 1,1,Wait(1)
exten => 1,n,AGI(/usr/share/call-taxi/tools-call-taxi,${PBXTYPE},cso,${idsdb},${clphone},${standnumber},${clientid},${clstreet},${clhouse},${clporch},${clapart},${carclass})
exten => 1,n,Playback(taxi/general/${language}/order-taken)
exten => 1,n,GotoIf($["${PLAYBACKSTATUS}" = "SUCCESS"]?:lbl_canceled-order-buyer-info-daria_1)
exten => 1,n(lbl_canceled-order-buyer-info-daria_1),Hangup()