Asterisk, малоизвестный способ использования callerid в плане набора.

Всем привет. Частенько появляется необходимость принятия решений о маршрутизации вызова в Asterisk на основе номера(CallerID) звонящего. Чаще всего это делают, на мой взгляд, не самым удобным способом.

exten => s,1,GotoIf($["${CALLERID(num)}" = "12345"]?True:False)
    same => n(True),NoOp("Есть совпадение")
    ... какая-то логика при совпадении ...
    same => n(False),NoOp("Нет совпадения")
    ... какая-то логика в остальных случаях ...

Второй же способ, крайне редко используется, но, на мой взгляд он куда элегантнее.

exten => s/100,1,NoOp(Этот маршрут сработает только для номера 100)
    ... какая-то логика при совпадении ...
exten => s,1,NoOp(Этот маршрут сработает для всех остальных)
    ... какая-то логика в остальных случаях ...


;;; можно использовать маски
exten => s/_1XX,1,NoOp(Этот маршрут сработает только для номеров из диапазона 100-199)
    ... какая-то логика при совпадении ...
exten => s,1,NoOp(Этот маршрут сработает для всех остальных)
    ... какая-то логика в остальных случаях ...

Но у второго способа есть и особенности, которые следует учитывать, если где-то в средине описываемой логики Вы решите поменять CALLERID(num) на такой, который не подходит к указанной маске. В этом случае обработка прекратится с ошибкой. При этом первый вариант избавлен от этой особенности, т.к. нет привязки логики к CALLERID(num) и его модификация не влияет на переход по приоритетам плана набора.

Спасибо за внимание.

Оставьте комментарий