Доброе время суток!
Возникла проблема при настройке диалплана, а точнее с GotoIf.
Вот кусочек диалплана:
exten => s,1,Set(home="/home/menu")
exten => s,n,Set(foo=${CURL(http://myhost.com/?act=check&subscriber=${CALLERID(num)})})
exten => s,n,GotoIf($["${foo}" = "NO"]?playwithoutreg)
exten => s,n,Background(${home}/hello_with_reg)
exten => s,n,Goto(menunext,s,1)
exten => s,n(playwithoutreg),Goto(menunoreg,s,1)
Объясню что означает:
Curl-делает запрос на хост, который проверяет на существование номера телефона и возвращает ответ YES(существует)|NO(не существует)
GotoIf-сверяет значение переменного и при совпадении прыгает в соответствующий шаг.
Что происходит?
GotoIf всегда возвращает 0 не зависимо от ответа, хоть YES, хоть NO.
вот логи:
-- Executing [s@menu:1] Set("SIP/08880-00000001", "home="/home/menu"") in new stack
-- Executing [s@menu:2] Set("SIP/08880-00000001", "foo=YES") in new stack
-- Executing [s@menu:3] GotoIf("SIP/08880-00000001", "0?playwithoutreg") in new stack
-- Executing [s@menu:4] BackGround("SIP/08880-00000001", ""/home/menu"/hello_with_reg") in new stack
-- <SIP/08880-00000001> Playing '/home/menu/hello_with_reg.slin' (language 'ru')
-- Executing [s@menu:1] Set("SIP/08880-00000002", "home="/home/menu"") in new stack
-- Executing [s@menu:2] Set("SIP/08880-00000002", "foo=NO") in new stack
-- Executing [s@menu:3] GotoIf("SIP/08880-00000002", "0?playwithoutreg") in new stack
-- Executing [s@menu:4] BackGround("SIP/08880-00000002", ""/home/menu"/hello_with_reg") in new stack
-- <SIP/08880-00000002> Playing '/home/menu/hello_with_reg.slin' (language 'ru')
Это баги Asterisk-а или у меня руки не оттуда ростут?
Целых два дня потратил, на виртуалку поднял 2 разные версии звездочки (1.8 и 12.6), наблюдалась такая же проблема.
И наконец то нашел причину такого поведения GotoIf, кодировка файла на хосте был в UTF-8, пересохранил в UTF-8 без BOM и пошло поехало как по маслу.
Не знаю почему но ответ CURL-а в кодировке UTF-8 GotoIf не смог сравнять.
Может кому-то пригодится.
Может скобки мешают ?
Задан: 2016-12-05 10:10:46 +0400
Просмотрен: 744 раз
Обновлен: Dec 06 '16
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
awsswa, имеете ввиду поменять:
exten => s,n,GotoIf($["${foo}" = "NO"]?playwithoutreg)
на:
exten => s,n,GotoIf("${foo}" = "NO"?playwithoutreg)?
в таком случаи звонок попадает сразу в playwithoutreg, не зависимо от ответа CURL
zahidov.m@bk.ru ( 2016-12-05 12:30:22 +0400 )редактироватьпосле:
добавил
вот лог:
zahidov.m@bk.ru ( 2016-12-05 15:07:47 +0400 )редактироватьСделайте проще - проверяйте длину ответа 2 это NO, 3 это YES
awsswa ( 2016-12-07 09:33:11 +0400 )редактировать