freeswitchforum.com
https://freeswitchforum.com/

анализ переменных в dialplan
https://freeswitchforum.com/viewtopic.php?f=6&t=121
Страница 1 из 1

Автор:  Roman [ 04 дек 2012 12:05 ]
Заголовок сообщения:  анализ переменных в dialplan

Коллеги, помогите разобраться в ситуации с переменными в DP.
И так, имеем следующее:

<extension name="conf_ivr" continue="true">
<condition expression="^((30\d{2})(001))$" field="destination_number">
<action application="answer"/>
<action application="start_dtmf"/>
<action application="play_and_get_digits" data="1 1 1 7000 # /usr/local/freeswitch/IVR_phrases/j_p.wav /usr/local/freeswitch/IVR_phrases/confbridge-leave.wav dtmf_dig \d"/>
<action application="sleep" data="2000"/>
<action application="log" data="WARNING dialed number=$1, DTMF=${dtmf_dig}"/>
</condition>

<condition expression="^1$" field="${dtmf_dig}">
<action application="transfer" data="$1 XML default"/>
<anti-action application="log" data="WARNING ${dtmf_dig}!=1, logic=false"/>
</condition>
</extension>

(Пример содержит пару отладочных строк для вывода сообщений в консоль.)

Вопрос:
Почему при донаборе 1 не выполняется action transfer во втором условии? Тут ${dtmf_dig} получает значение 1 и expression=1, почему нет совпадения и как результат выполняется только anti-action?
Спасибо

Автор:  Vlad1983 [ 04 дек 2012 14:14 ]
Заголовок сообщения:  Re: анализ переменных в dialplan

нужно кинуть в другой контекст
и все будет

Автор:  Roman [ 04 дек 2012 14:20 ]
Заголовок сообщения:  Re: анализ переменных в dialplan

Эмм... недопонял, а что в пределах default не получится? И что тут меняется в зависимости от контекста?

Автор:  Vlad1983 [ 04 дек 2012 14:24 ]
Заголовок сообщения:  Re: анализ переменных в dialplan

после
<action application="log" data="WARNING dialed number=$1, DTMF=${dtmf_dig}"/>
делаем transfer в другой контекст

в котором уже ловим
<condition expression="^1$" field="${dtmf_dig}">

меняется много поверьте пока на слово

Автор:  Roman [ 05 дек 2012 08:14 ]
Заголовок сообщения:  Re: анализ переменных в dialplan

Мда...
действительно, так всё работает. Я попробовал сделать иначе, то есть не выносить в другой контекст, а вынести в другой extension в этом же контексте. Получилось так:

<extension name="conf" continue="true">
<condition expression="^(30\d{2})(001)$" field="destination_number">
<action application="answer"/>
<action application="start_dtmf"/>
<action application="play_and_get_digits" data="1 1 1 7000 # /usr/local/freeswitch/IVR_phrases/j_p.wav /usr/local/freeswitch/IVR_phrases/confbridge-leave.wav dtmf_dig \d"/>
<action application="set" data="conf_num=$1"/>
<action application="log" data="WARNING dialed number=${conf_num}, DTMF=${dtmf_dig}"/>
<action application="execute_extension" data="go_to_conf XML default"/>
</condition>
</extension>

<extension name="go_to_conf">
<condition expression="^go_to_conf$" field="destination_number"/>
<condition expression="^1$" field="${dtmf_dig}">
<action application="log" data="WARNING go_to_conf OK --> dial=${conf_num}, dtmf=${dtmf_dig}"/>
<action application="transfer" data="${conf_num} XML default"/>
</condition>
</extension>

Я не уверен что это оптимальное решение, но во всяком случае, мне показалось что так сделать удобнее по сравнению с переходами между контекстами. Хотя, наверное механизм работы подобных манипуляций одинаков.

Однако, мне всё таки не понятно почему нельзя выполнять проверку условий в пределах одного extension? Может это баг? Если нет, то почему подобные ограничения в явном виде не описаны в доке?

Спасибо огромное за помощь в решении проблемы!!!

Автор:  Vlad1983 [ 05 дек 2012 08:28 ]
Заголовок сообщения:  Re: анализ переменных в dialplan

это не баг, а такая особенность работы диалплана FS
если запустите под уровнем логирования debug, то можно увидеть как FS выбирает по condition - за один проход весь контекст, учитывая значения переменных которые были на входе в этот контекст, никакие изменения не принимаются во внимание

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

есть исключения, но об этом нужно сказать явно http://wiki.freeswitch.org/wiki/Dialpla ... ne_Actions

Автор:  Roman [ 05 дек 2012 10:04 ]
Заголовок сообщения:  Re: анализ переменных в dialplan

Ясно, спасибо!!

Страница 1 из 1 Часовой пояс: UTC + 4 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/