diff --git a/docs/ats/ss-dialog.agi b/docs/ats/ss-dialog.agi index eeda485..ce81fdd 100644 --- a/docs/ats/ss-dialog.agi +++ b/docs/ats/ss-dialog.agi @@ -37,6 +37,26 @@ getvar () { # $1=имя -> VAR } play () { say "STREAM FILE $1 \"\""; } +# Обрыв: клиент положил трубку посередине диалога. Asterisk шлёт SIGHUP и убивает +# скрипт — без этого обработчика результат не уходил в БД, и звонок задним числом +# записывался как «не взял трубку», хотя человек ответил. Сохраняем то, что успели. +on_interrupt () { + if [ -z "$OUTCOME" ]; then + if [ -n "$HALF" ]; then + OUTCOME=no_input_half # день выбрал, время не назвал + elif [ -n "$DAY" ] && [ "$DAY" != "0" ] && [ "$DAY" != "9" ]; then + OUTCOME=no_input_half # день выбран, до времени не дошло + elif [ -z "$ANY_DIGIT" ] && [ "$RING_SEC" -ge 20 ]; then + OUTCOME=no_answer # объявление оператора: человека не было + else + OUTCOME=no_input_day # ответил, но ничего не нажал + fi + save + fi + exit 0 +} +trap on_interrupt HUP TERM INT + # Channel-переменные из call-файла (Setvar). Читаем ДО диалога, т.к. AGI # не видит их как bash-переменные — только через GET VARIABLE. getvar API_URL; API_URL=$VAR