Если State is UNAVAILABLE, то логика macro-dial-one говорит - туда не надо звонить, nodial. Вы уж проверьте, когда новый номер перестаёт звонить, выхлоп команды
CLI> sip show peers
покажет у этого номера UNAVAILABLE? Тогда вам надо не код FreePBX ковырять, а свою сеть, сами устройства и/или firewall.
${DSTRING} определяет какой технологией звонить на экстен - DAHDI, PJSIP или простой SIP.
Какая версия FreePBX? Не надо использовать самую-самую последнюю, будут всякие такие траблы.
У вас случайно не обе технологии используются - PJSIP и SIP? Реально, посмотреть каким способом высчитывается эта переменная - умереть не встать!
Код: Выделить всё
exten => dlocal,1,Set(DSTRING=${IF($["${ARG1}"=""]?${DEXTEN:0:${MATH(${LEN(${DEXTEN})}-1,int)}}:Local/${DEXTEN:0:${MATH(${LEN(${DEXTEN})}-1,int)}}@from-internal/n)})
и сама sub dstring тоже не для средних умов:
exten => dstring,1,Set(DSTRING=)
exten => dstring,n,Set(DEVICES=${DB(AMPUSER/${DEXTEN}/device)})
exten => dstring,n,ExecIf($["${DEVICES}"=""]?Return())
exten => dstring,n,ExecIf($["${DEVICES:0:1}"="&"]?Set(DEVICES=${DEVICES:1}))
exten => dstring,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
exten => dstring,n,Set(ITER=1)
exten => dstring,n(begin),Set(THISDIAL=${DB(DEVICE/${CUT(DEVICES,&,${ITER})}/dial)})
exten => dstring,n,GosubIf($["${ASTCHANDAHDI}" = "1"]?zap2dahdi,1())
exten => dstring,n,GotoIf($["${THISDIAL:0:5}"!="PJSIP"]?docheck)
exten => dstring,n,Noop(Debug: Found PJSIP Destination ${THISDIAL})
exten => dstring,n,GotoIf($[ ${REGEX("(/.+/|@)" ${THISDIAL})} = 1 ]?doset)
exten => dstring,n,Noop(Debug: Updating PJSIP Destination with PJSIP_DIAL_CONTACTS)
exten => dstring,n,Set(THISDIAL=${PJSIP_DIAL_CONTACTS(${THISDIAL:6})})
exten => dstring,n(docheck),GotoIf($["${THISDIAL}"=""]?skipset)
exten => dstring,n(doset),Set(DSTRING=${DSTRING}${THISDIAL}&)
exten => dstring,n(skipset),Set(ITER=$[${ITER}+1])
exten => dstring,n,GotoIf($[${ITER}<=${LOOPCNT}]?begin)
exten => dstring,n,ExecIf($["${DSTRING:-1}"!="&"]?Return())
exten => dstring,n,Set(DSTRING=${DSTRING:0:$[${LEN(${DSTRING})}-1]})
exten => dstring,n,Return()