Я бы предложил зайти немного с другой стороны. Алгоритм следующий
Описать контекст
[add-trim-prefix-clid-custom]
В нем обязательно необходимо выполнить в конце
same => n,return
В контексте стоит определить свой hangup перехватчик, что то вроде:
same => n,Set(CHANNEL(hangup_handler_wipe)=custom-hangup-handler,s,1)
в нем обязательно необходимо выполнить
Gosub(hangup_handler,s,1)
и
same => n,return
В "custom-hangup-handler" вы можете вызвать свой AGI скрипт и отправить сообщение о пропущенном вызове.
Вызов следует считать пропущенным, если выполняется условие:
ExecIf($["${M_DIALSTATUS}" != "ANSWER"]?AGI(...))
Можно косвенно определить, что сработал переключатель по времени, будет определена переменная канала "filename"