Вход | Регистрация
Вы здесь: Главная / Форум / Главный форум по Asterisk / Конфигурация и настройка / Макрос. Как IF обрабатывает значения LEN?

Макрос. Как IF обрабатывает значения LEN?

Макрос. Как IF обрабатывает значения LEN?
Сообщений: 31

Макрос. Как 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 как-то скупо...)

2010-07-18 17:08

Сообщений: 76

Re: Макрос. Как IF обрабатывает значения LEN?

Попробуй так
exten => s,1,GotoIf($[LEN(${CALLERID(number)}) = ${ARG1}]?rus:world);
Не проверял поэтому могу чуть чуть ошибаться но твоя ошибка в том что ты не взял выражение в квадратные скобки.
Что бы астериск рассчитал выражение его нужно взять в квадратные скобки.
Хорошее описание этого языка есть в книге The Future of Telephony или на voip-info.org

2010-07-18 17:51

Avatara of zzuz
Откуда: SPb
Сообщений: 1307

Re: Макрос. Как IF обрабатывает значения LEN?

"Попытка вразумить операторов, разумеется, успеха не имела."

С чего такое заключение , что номер должен прилетать 11значным?
http://линия24.рф - Астериск и прочие бубны!
2010-07-18 18:29

Откуда: Зеленоград
Сообщений: 446

Re: Макрос. Как IF обрабатывает значения LEN?

Во-первых, CALLERID(num), а не CALLERID(number)
Во-вторых, надо так:
exten => s,1,GotoIf($["${LEN(${CALLERID(num)})}" = "${ARG1}"]?rus:world)

Точки с запятой в конце строк тоже непонятно зачем.

И в SET лишних пробелов вокруг "=" тоже не нужно ставить. Синтаксис extensions.conf чувствителен к такого рода мелочам.

Как обычно, все написано на http://voip-info.org.
2010-07-18 19:57

Сообщений: 76

Re: Макрос. Как IF обрабатывает значения LEN?

Glukinho:

Точки с запятой в конце строк тоже непонятно зачем.
=) Да не стоит так строго.
Я вот к примеру тоже в начале пытался с ней бороться, но перестал.
Почти во всех языках в конце ;
Такая каша начинается в * постоянно её ставишь а в других языках постоянно пропускаешь.
2010-07-18 20:23

Сообщений: 31

Re: Макрос. Как IF обрабатывает значения LEN?

kasper:

Попробуй так
exten => s,1,GotoIf($[LEN(${CALLERID(number)}) = ${ARG1}]?rus:world);
Тханкс... Похоже, работает...

Ogogon.
2010-07-19 00:41

Avatara of zzuz
Откуда: SPb
Сообщений: 1307

Re: Макрос. Как IF обрабатывает значения LEN?

почти на всех языках ";" , что за вздор.
http://линия24.рф - Астериск и прочие бубны!
2010-07-19 21:22

Добавить страницу в закладки:  Delicious Google Slashdot Yahoo Yandex.ru Reddit Digg Technorati Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Myscoop.ru 100zakladok.ru