Страница 1 из 2
Помогите по длине строки в GotoIf
Добавлено: 19 июл 2016, 20:16
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)
Re: Помогите по длине строки в GotoIf
Добавлено: 19 июл 2016, 21:27
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)}))
Re: Помогите по длине строки в GotoIf
Добавлено: 20 июл 2016, 00:31
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)}))
Re: Помогите по длине строки в GotoIf
Добавлено: 20 июл 2016, 01:11
ded
$[...)}) против $[${....)})} ? А у нас так работает, как написал
(
Впажный поп! (Это так на табличках в местах массового отдыха, где кафель. Они думают, что пишут по-русски - Влажный пол).
Очень аутентично!
)))
Re: Помогите по длине строки в GotoIf
Добавлено: 20 июл 2016, 13:43
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 или оно по дефолту нулевое ?
Re: Помогите по длине строки в GotoIf
Добавлено: 20 июл 2016, 14:08
ded
Есть такая удобная аппликация - NoOp
она и ответит Вам на этот вопрос.
И, уже пора читать Книгу о вкусной и здоровой пище о будущем телефонии?
Re: Помогите по длине строки в GotoIf
Добавлено: 20 июл 2016, 21:11
awsswa
Все переменные - если они не глобальные имеют значение NULL и это не нолик
Re: Помогите по длине строки в GotoIf
Добавлено: 20 июл 2016, 22:16
ipok
Позволю себе спросить еще один вопрос:
Допустим каждый extension может принадлежать только одной очереди, возможно ли как-то по его номеру (101) узнать какой очереди он принадлежит ?
или объясню задачу:
есть таблица соответствия внешний - внутр
по внешний нашли внутренний, позвонили ему.
Если он не взял трубку, звонок должен уйти в очередь, которой он принадлежит и начать обзванивать абонентов из его очереди.
Re: Помогите по длине строки в GotoIf
Добавлено: 20 июл 2016, 22:53
ded
Позволю себе напомнить, что регистрируясь на этом форуме, человек как бы декларирует, что владеет минимальным объёмом знаний по предмету, прочитав Книгу о будущем телефони, чтобы не проходить азбуку и таблицу умножения с каждым вновь прибывшим.
Тогда бы Вы знали о командах
CLI> queue show XXX (номер очереди)
Re: Помогите по длине строки в GotoIf
Добавлено: 21 июл 2016, 00:05
ipok
Спасибо, я знаю об этой команде, но меня интересует dialplan
Так же знаю о addqueuemember и removequeuemember.
А вот функции по возврату очередей по extension пока не нашёл.
Проходить по всем очередям функцией QUEUE_MEMBER_LIST() в надежде найти в какой очереди extension мне кажется не самое лучшее решение.