Макрос. Как IF обрабатывает значения LEN?
Добрый день, коллеги!
Попробовал написать под 'Asterisk 1.4.25 built by root @ ogogon.org.ru on a amd64 running FreeBSD on 2009-12-24 05:32:25 UTC' макрос, проводящий сравнение по длине строки.
Побудившая задача такая - два оператора подают урезанный CID. Без кода страны. (Вместо '+7916xxxxxxx' или хотя бы '8916xxxxxxx' приезжает '916xxxxxxx'.) Причем, это касается только входящих звонков из России. С входящими зарубежными все нормально.
Попытка вразумить операторов, разумеется, успеха не имела.
Решил написать макрос и включить его и их входные контексты.
Макрос простой - проверяет длину строки CALLERID(number) и если она не 11 цифр, а 10, то впихивает спереди '8' или там '+7'.
Написал двумя способами - на IF одной строчкой и на GotoIF с метками. Результат один и тот же - макрос всегда считает, что true.
Многострочный вариант, он нагляднее:
[macro-normcid]
; ${ARG1} - len
; ${ARG2} - prefix
exten => s,1,GotoIf(LEN(${CALLERID(number)}) = ARG1?rus:world);
exten => s,n(rus),Set(CALLERID(number) = ${ARG2}${CALLERID(number)});
exten => s,n(world),NoOp();
ARG1 писал и в фигурных скобках, и прямо указывал значение в коде. Функцию LEN тоже в фигурные скобки брал... Все ему true...
Подскажите, коллеги, что я не так делаю?
Есть ли где нибудь подробное описание этого скриптового языка? (А то в AFOT как-то скупо...)
|