GosubIf() - Переходит в новую точку по условию, сохраняя адрес возврата.
GosubIf(условие?меткаеслиистинно:меткаеслиложно)
На основании вычисленного условия Gosub будет передавать выполнение или в параметр меткаеслиистинно, или в параметр меткаеслиложно. Вернуться в эту точку диалплана можно, с помощью команды Return.
Метка (label) используется для того, чтобы обозначить возможность задать приоритет; добавочный номер и приоритет или контекст, добавочный номер и приоритет.
Пример:
Задаем исходящий Caller*ID по умолчанию, если он не задан конкретным каналом.
exten => _NXXXXXX,1,GosubIf($["${CALLERID(num)}" = ""]?setcallerid,1)
exten => _NXXXXXX,n,Dial(Dahdi/g1/${EXTEN})
exten => _1NXXNXXXXXX,1,GosubIf($[„${CALLERID(num)}" = „"]?setcallerid,1)
exten => _1NXXNXXXXXX,n,Dial(Dahdi/g1/${EXTEN})
exten => setcallerid,1,Set(CALLERID(num)=7918123456)
exten => setcallerid,n,Return