У меняset fsm(any_state,ev_disconnected) "act_Cleanup same_state";
proc act_Cleanup {} {
set status [infotag get evt_last_disconnect_cause]
puts "BYE !!!!!!!!!!!!!!!!!!!!! status = $status"
call close;
return;
}
proc act_CallSetupDone {} {
#...
set status [infotag get evt_status];
set connID [infotag get evt_connections];
# set legOut [infotag get evt_legs]
switch $status {
"ls_000" {
if { $CreditTime < $WarnTime} {
set beep 0;
} else {
set beep 1;
set CreditTime [ expr $CreditTime - $WarnTime ];
}
timer start leg_timer $CreditTime leg_incoming;
}
#...
По таймеру у меня все прекрасно отключается, и вообще, если абонент ответил на звонок все прекрасно (только в радиус не пишется почемуто).
Но если телефон абонента занят, то все...пиши пропало.
Как я понял из документации по программированию IVR, это происходит потому, что при выполнении leg setup циска рвет стрый leg_incoming и создает два новых плеча leg_incoming и leg_outgoing (в данном случае, если связь рвется, то пропадают все плечи соединения и меня выбрасывает).
Это фишка перенаправления звонка, и написано, что в принципе циска может восстановить старое соединение в случае неудачи...однако она ни фига так не делает =(
Соединение отваливается по сообщению ev_disconnected и статусу di_099 (отвалилось входящее плечо)...что странно...
...короче я понял важную вещь, все странно и ни фига не понятно...пора искать мыло и веревку =)