Проверка DIALSTATUS перед выполнением команды DIAL
[internal] include => parkedcalls exten => _XXX,1,Verbose(3,Internal calls from ${CALLERID(num)} to ${EXTEN}) same => n,ExecIf($["${A_DUMP_CHAN}"="yes"]?DumpChan) same => n,ExecIf($["${REC_INTERNAL}"!=""]?MixMonitor(${REC_INTERNAL})) same => n,Set(CDR(maflags)=INTERAL) same => n,GoSub(subcheck_devstate,${EXTEN},1) same => n,Verbose(3,Device ${EXTEN} is ${GOSUB_RETVAL}) same => n,GoToIf($["${GOSUB_RETVAL}"="UNAVAILABLE"]?Unavailable) same => n,GoToIf($["${GOSUB_RETVAL}"="BUSY"]?Busy) same => n,GoSubIf($["${GOSUB_RETVAL}"="RINGING"]?redial-local(${EXTEN},${TRUE_EXTEN})) same => n,GoSubIf($["${GOSUB_RETVAL}"="INUSE"]?redial-local(${EXTEN},${TRUE_EXTEN})) same => n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes) same => n,Dial(SIP/${EXTEN},60,TtWw) same => n(Unavailable),VoiceMail(${EXTEN}@internal,u) same => n,Hangup() same => n(Busy),VoiceMail(${EXTEN}@internal,b) [subcheck_devstate] exten => _${A_EXTEN},1,Verbose(3,Check DEVSTATE ${DEVICE_STATE(SIP/${EXTEN})}) same => n,SET(D_STATUS=${DEVICE_STATE(SIP/${EXTEN})}) same => n,Return(${D_STATUS})
Это дает нам возможность узнать статус SIP устройства без выполнения звонка на него. Кроме того мы можем использовать полученный статус для реализации Re-dial функции или переадресации на другой номер.