fix(agi): обрыв диалога — отдаём результат в БД (иначе звонок задним числом записывался как «не взял трубку»)

This commit is contained in:
Hermes 2026-09-11 11:05:57 +02:00
parent c4e2c4a181
commit feb3fc1b07
1 changed files with 20 additions and 0 deletions

View File

@ -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