n
повторяется автоматически - добавляет 1 к предыдущему приоритету . По этой же причине вам необходимо инициализировать инкрементор с приоритетом 1 в первой строке.
Когда вы ставите приоритет 1000 где-то посередине (что полностью допустимо), следующая строка с n
добавляет к этому 1, что приводит к приоритету 1001 - который никогда не срабатывает, как уже объяснено другими.
Ваш диалплан можно прочитать, как показано ниже:
[start-call]
exten => _X.,1,AGI(agi://localhost:4000)
exten => _X.,2,GotoIf($["${AGISTATUS}" = "FAILURE"]?redirect)
exten => _X.,1000(redirect),Hangup(31)
exten => 900,1001,Something() ; not 3!
exten => h,1,Hangup
Чтобы исправить это, вы должны либо переупорядочить свои расширения, как объяснено другими, либо использовать оператор +
для приоритетов:
[start-call]
exten => _X.,1,AGI(agi://localhost:4000) ; 1
exten => _X.,n,GotoIf($["${AGISTATUS}" = "FAILURE"]?redirect) ; 2
exten => _X.,n+1000(redirect),Hangup(31) ; 1002
exten => 900,n,Something() ; 3
exten => h,1,Hangup
Кстати, вы также можете использовать текстовые метки в качестве расширений, что сделает ваши диалпланы более читабельными:
[start-call]
exten => _X.,1,AGI(agi://localhost:4000) ; 1
exten => _X.,n,GotoIf($["${AGISTATUS}" = "FAILURE"]?agi_failure,1) ; 2
exten => 900,n,Something() ; 3
exten => agi_failure,1,DoSomething()
exten => agi_failure,n,DoEvenMore()
exten => h,1,Hangup