Пример работающего решения при звонке с одного локально extension на другой локальный extension.
cat /etc/asterisk/extensions_override_freepbx.conf
[from-internal-custom]
exten => _XXXX,1,NoOp(-------INTERNAL-CALL----------)
same => n,Set(DEVSTATE=${DEVICE_STATE(PJSIP/${EXTEN})})
same => n,GotoIf($[ "${DEVSTATE}" = "UNAVAILABLE" ]?go-unvailable)
same => n,Dial(Local/${EXTEN}@default,60,tT)
same => n,HangUp
same => n(go-unvailable),Noop(----unvailable----)
same => n,PlayBack(silence/1&ss-noservice)
same => n,HangUp
Если телефон не в сети, при звонке это будет сказано. Без этого диалплана выдавался сигнал занятон.
Пробовал аналогично переопределить для IVR
[ext-local-custom]
exten => _XXXX,1,NoOp(-------IVR-CALL----------)
...
Но это не работает, т.к. в конфиге, который создает freepbx, написано
[ext-local]
include => ext-local-custom
exten => 0101,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/0101/ringtimer)}" > "0"]?${DB(AMPUSER/0101/ringtimer)}:${RINGTIMER_DEFAULT})})
exten => 0101,n,Macro(exten-vm,novm,0101,0,0,0)
exten => 0101,n(dest),Set(__PICKUPMARK=)
exten => 0101,n,GotoIf($["${IVR_CONTEXT}" != ""]?${IVR_CONTEXT},return,1)
exten => 0101,hint,PJSIP/0101&Custom:DND0101,CustomPresence:0101
...
А матчинг номеров в include выполняется после матчинга в ext-local. Как следствие, туда выполнение и не заходит.