Назад | Перейти на главную страницу

Asterisk переводит вызов на следующий добавочный номер, если предыдущий INUSE

Я пытаюсь перевести вызов на следующий добавочный номер, если предыдущий использует (INUSE) или вызов выполняется. Я пытался использовать EXTENSION_STATE(extension[@context]) чтобы найти статус следующим образом:

[sales]
exten => s,1,Dial(SIP/123)
exten => s,n,GotoIf($["${EXTENSION_STATE(123)}"="INUSE"]?passed:failed)
exten => s,n(passed),Dial(SIP/124)
exten => s,n(failed),Hangup();if other

Но не удалось. Как я могу это сделать?

Этот сработал для меня, используя GROUP_COUNT () вместо EXTENSION_STATE:

exten => s,1,Set(GROUP()=OUTBOUND_GROUP)
exten => s,2,GotoIf($[ ${GROUP_COUNT()} > 1 ]?try1:try2)
exten => s,3(try1),Dial(SIP/124)
exten => s,4(try2),Dial(SIP/123)

Ваше решение скомпилировано, это одна из причин, по которой оно не работает. Вам лучше попробовать это, это распространенный более простой подход с использованием внутренней переменной ${DIALSTATUS}. Поскольку при ответе - звонок просто повесится, вам просто нужно обработать все статусы erroneius:

[sales] exten => s,1,Dial(SIP/123) exten => s,2,Goto(${EXTEN}-${DIALSTATUS},1) exten => s-BUSY,1,Dial(SIP/other) exten => s-CONGESTION,1,Dial(SIP/someone)