VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Помогите по длине строки в GotoIf

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

ipok
Сообщения: 20
Зарегистрирован: 18 май 2016, 21:20

Помогите по длине строки в GotoIf

Сообщение ipok »

Вот есть кусок файла extensions_custom.conf
Смысл его = ищем в базе mysql соответствие внешнего номера внутреннему, и если есть, то кладем в переменную int_num внутренний номер
Само собой, если строки такой нет, то переменная оказывается пустая и на строке exten =>601,5,Dial(SIP/${int_num}) звонок отбивается
Как вариант вижу отследить длину строки LEN(${int_num}) и если она =0, то закрываем таблицу и идем дальше.
Но это не работает, видимо выражение LEN(${int_num}) = 0 выглядит не так, подскажите, как должно быть

Код: Выделить всё

exten =>601,1,MySQL(Connect connid localhost XXX XXX asterisk)
exten =>601,2,MySQL(Query resultid ${connid} SELECT intnumber FROM routes WHERE extnumber=${CALLERID(num)})
exten =>601,3,MySQL(Fetch fetchid ${resultid} int_num)
exten =>601,4,GotoIf(LEN(${int_num}) = 0]?6)
exten =>601,5,Dial(SIP/${int_num})
exten =>601,6,MySQL(Clear ${resultid})
exten =>601,7,MySQL(Disconnect ${connid})
exten =>601,8,Wait(1)
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: Помогите по длине строки в GotoIf

Сообщение ded »

1) Обработку шагов 1-2-3 сделайте в РНР и вызывайте этот код как AGI.
2) Используйте лучше переход на метку, а не на шаг №

Проверка длины, переход на метку label1

Код: Выделить всё

exten => s,n,GotoIF($[LEN(x${CALLERID(number)})<8]?label1)
Добавление 7 к 10-тизначному CLID

Код: Выделить всё

exten => s,n,ExecIF($[LEN(${CALLERID(number)})=10]?Set(CALLERID(number)=7${CALLERID(number)}))
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: Помогите по длине строки в GotoIf

Сообщение zzuz »

Код: Выделить всё

exten => s,n,ExecIF($[LEN(${CALLERID(number)})=10]?Set(CALLERID(number)=7${CALLERID(number)}))
Не покажусь занудой , опечатку исправлю

Код: Выделить всё

exten => s,n,ExecIF($[${LEN(${CALLERID(number)})}=10]?Set(CALLERID(number)=7${CALLERID(number)}))
Линия24 - Системы Массового Телефонного Обслуживания
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: Помогите по длине строки в GotoIf

Сообщение ded »

$[...)}) против $[${....)})} ? А у нас так работает, как написал :((
Впажный поп! (Это так на табличках в местах массового отдыха, где кафель. Они думают, что пишут по-русски - Влажный пол).
Очень аутентично! :))))
ipok
Сообщения: 20
Зарегистрирован: 18 май 2016, 21:20

Re: Помогите по длине строки в GotoIf

Сообщение ipok »

ded писал(а):1) Обработку шагов 1-2-3 сделайте в РНР и вызывайте этот код как AGI.
2) Используйте лучше переход на метку, а не на шаг №

Проверка длины, переход на метку label1

Код: Выделить всё

exten => s,n,GotoIF($[LEN(x${CALLERID(number)})<8]?label1)
Спасибо за пару подсказок
Решил сделать более красиво:

Код: Выделить всё

exten =>601,1,MySQL(Connect connid localhost X X asterisk)
exten =>601,2,MySQL(Query resultid ${connid} SELECT intnumber FROM routes WHERE extnumber=${CALLERID(num)})
exten =>601,3,MySQL(Fetch fetchid ${resultid} int_num)
exten =>601,4,MySQL(Clear ${resultid})
exten =>601,5,MySQL(Disconnect ${connid})
exten =>601,6,ExecIF($[LEN(x${int_num})>1]?Dial(SIP/${int_num})
exten =>601,7,Wait(1)
В переменной int_num у меня лежит внутренний номер.
Соответственно определяем длину строки внутреннего номер

Теперь вот такой вопрос:
Имеет ли смысл изначально определять значение переменной int_num или оно по дефолту нулевое ?
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: Помогите по длине строки в GotoIf

Сообщение ded »

Есть такая удобная аппликация - NoOp
она и ответит Вам на этот вопрос.
И, уже пора читать Книгу о вкусной и здоровой пище о будущем телефонии?
awsswa
Сообщения: 2390
Зарегистрирован: 09 июн 2012, 10:52
Откуда: Россия, Пермь skype: yarick_perm

Re: Помогите по длине строки в GotoIf

Сообщение awsswa »

Все переменные - если они не глобальные имеют значение NULL и это не нолик
платный суппорт по мере возможностей
ipok
Сообщения: 20
Зарегистрирован: 18 май 2016, 21:20

Re: Помогите по длине строки в GotoIf

Сообщение ipok »

Позволю себе спросить еще один вопрос:

Допустим каждый extension может принадлежать только одной очереди, возможно ли как-то по его номеру (101) узнать какой очереди он принадлежит ?

или объясню задачу:
есть таблица соответствия внешний - внутр
по внешний нашли внутренний, позвонили ему.
Если он не взял трубку, звонок должен уйти в очередь, которой он принадлежит и начать обзванивать абонентов из его очереди.
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: Помогите по длине строки в GotoIf

Сообщение ded »

Позволю себе напомнить, что регистрируясь на этом форуме, человек как бы декларирует, что владеет минимальным объёмом знаний по предмету, прочитав Книгу о будущем телефони, чтобы не проходить азбуку и таблицу умножения с каждым вновь прибывшим.
Тогда бы Вы знали о командах
CLI> queue show XXX (номер очереди)
ipok
Сообщения: 20
Зарегистрирован: 18 май 2016, 21:20

Re: Помогите по длине строки в GotoIf

Сообщение ipok »

Спасибо, я знаю об этой команде, но меня интересует dialplan

Так же знаю о addqueuemember и removequeuemember.

А вот функции по возврату очередей по extension пока не нашёл.

Проходить по всем очередям функцией QUEUE_MEMBER_LIST() в надежде найти в какой очереди extension мне кажется не самое лучшее решение.
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH