Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

asterisk 14 gotoif всегда возвращает false

0

Доброе время суток!

Возникла проблема при настройке диалплана, а точнее с 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)

Объясню что означает:

  1. Curl-делает запрос на хост, который проверяет на существование номера телефона и возвращает ответ YES(существует)|NO(не существует)

  2. 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-а или у меня руки не оттуда ростут?

удалить закрыть спам изменить тег редактировать

спросил 2016-12-05 10:10:46 +0400

zahidov.m@bk.ru Gravatar zahidov.m@bk.ru
1 1 1

обновил 2016-12-05 11:11:55 +0400

zzuz Gravatar zzuz flag of Russian Federation
7174 2 6 75
http://line24.ru/

Comments

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 )редактировать

после:

exten =&gt; s,n,Set(foo=${CURL(http://myhost.com/?act=check&amp;subscriber=${CALLERID(num)})})

добавил

exten =&gt; s,n,NoOp(==${foo}==)

вот лог:

-- Executing [s@menu:2] Set("SIP/08880-0000001b", "foo=NO") in new stack
-- Executing [s@menu:3] NoOp("SIP/08880-0000001b", "==NO==") in new stack
zahidov.m@bk.ru ( 2016-12-05 15:07:47 +0400 )редактировать

Сделайте проще - проверяйте длину ответа 2 это NO, 3 это YES

awsswa ( 2016-12-07 09:33:11 +0400 )редактировать

2 Ответа

0

Целых два дня потратил, на виртуалку поднял 2 разные версии звездочки (1.8 и 12.6), наблюдалась такая же проблема.

И наконец то нашел причину такого поведения GotoIf, кодировка файла на хосте был в UTF-8, пересохранил в UTF-8 без BOM и пошло поехало как по маслу.

Не знаю почему но ответ CURL-а в кодировке UTF-8 GotoIf не смог сравнять.

Может кому-то пригодится.

ссылка удалить спам редактировать

ответил 2016-12-06 21:33:24 +0400

zahidov.m@bk.ru Gravatar zahidov.m@bk.ru
1 1 1
0

Может скобки мешают ?

ссылка удалить спам редактировать

ответил 2016-12-05 11:31:11 +0400

awsswa Gravatar awsswa flag of Russian Federation
685 5 2 9

обновил 2016-12-05 11:33:36 +0400

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2016-12-05 10:10:46 +0400

Просмотрен: 746 раз

Обновлен: Dec 06 '16

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.