
Denis 災 nobody
05.04.2017
16:13:25
видимо, надо как loopback/${digits}/XML/default
но у нас генерилка диалплана, поступает запрос на $digits и дальше идёт формирование, тот же бридж

Александр
05.04.2017
16:14:33
не работает

Denis 災 nobody
05.04.2017
16:14:49
конфиги статика?

Google


Александр
05.04.2017
16:16:54
2017-04-05 19:14:15.970535 [NOTICE] switch_core_session.c:2986 Execute att_xfer(loopback/${digits}/XML/default)
EXECUTE sofia/internal/sip:5556@192.168.200.91:5060 att_xfer(loopback/7014101/XML/default)
2017-04-05 19:14:15.970535 [NOTICE] switch_channel.c:1054 New Channel loopback/7014101/XML/default-a [ea418d92-1a1a-11e7-ad52-27ddc2797685]
2017-04-05 19:14:15.970535 [NOTICE] switch_channel.c:1052 Rename Channel loopback/7014101/XML/default-a->loopback/7014101-a [ea418d92-1a1a-11e7-ad52-27ddc2797685]
2017-04-05 19:14:15.970535 [DEBUG] mod_loopback.c:391 loopback/7014101-b CHANNEL ROUTING
2017-04-05 19:14:15.970535 [INFO] switch_core_state_machine.c:239 No Route, Aborting
2017-04-05 19:14:15.970535 [NOTICE] switch_core_state_machine.c:240 Hangup loopback/7014101-b [CS_ROUTING] [NO_ROUTE_DESTINATION]
номер только не 5556, а 1002
вот план на 7014101
<extension name="RnD" continue="true">
<condition field="destination_number" expression="^7014(1\d{2}|444)$" >
<action application="set" data="sip_h_X-accountcode=${accountcode}" />
<action application="set" data="sip_h_X-Tag=" />
<action application="set" data="call_direction=outbound" />
<action application="set" data="hangup_after_bridge=true" />
<action application="set" data="effective_caller_id_name=${outbound_caller_id_name}" />
<action application="set" data="effective_caller_id_number=${outbound_caller_id_number}" />
<action application="set" data="inherit_codec=true" />
<action application="set" data="media_bug_answer_req=true"/>
<action application="export" data="record=$${base_dir}/recordings/archive/${strftime(%Y)}/${strftime(%b)}/${strftime(%d)}/7014/outbound/${caller_id_name}/${destination_number}_${uuid}.mp3" />
<action application="export" data="execute_on_answer=record_session ${record}" />
<action application="bridge" data="sofia/gateway/rnd/$1" />
</condition>
</extension>
до нужного контекста не доходит


Denis 災 nobody
05.04.2017
16:25:57
а если для теста скопировать код в features, с вариантом когда было last line

Александр
05.04.2017
16:28:12
last line?
если добавить в features то все работает
Regex (PASS) [RnD] destination_number(7014101) =~ /^7014(1\d{2}|444)$/ break=on-false
но блин план то не там)
у меня 70 fs примерно, может чуть больше... не дублировать же все маршруты в features
можно так же подинклудить, но это же не по ГОСТу) надо чтобы красиво было)

Denis 災 nobody
05.04.2017
16:43:57
если поможет, то можно попробовать впихнуть transfer|execute_extension
в паблик

Google

Александр
05.04.2017
16:44:17
это как?

Denis 災 nobody
05.04.2017
16:45:01
добавить after_xfer с просто трансфером в дефолт

Александр
05.04.2017
16:45:41
вообще не понял

Denis 災 nobody
05.04.2017
16:46:24
https://wiki.freeswitch.org/wiki/Variable_force_transfer_context
https://wiki.freeswitch.org/wiki/Variable_force_transfer_dialplan
смотрел?
вообще не понял
в секции features делаешь блок, где будет трансфер в дефолт. Не?

Александр
05.04.2017
16:50:01
смотрел...
в секции features делаешь блок, где будет трансфер в дефолт. Не? в том и дело что не понял как его сделать

Denis 災 nobody
05.04.2017
16:51:17
<section name="dialplan" description="Regex/XML Dialplan">
<context name="features">
<!— one or more extension tags —>
</context>
а там extension, condition, action transfer

Александр
05.04.2017
16:53:55
а можно пример подробнее? ну реально не врубаюсь)

Denis 災 nobody
05.04.2017
17:05:59
куда уж подробнее..
прямо в код вписать?)

Александр
05.04.2017
17:07:05
я бы не отказался ибо действительно не понимаю что вы хотите до меня донести

Denis 災 nobody
05.04.2017
17:27:59
имхо, тут очень дельное может подсказать @rostel

Александр
05.04.2017
17:28:24
он собственно сюда и направил)


Denis 災 nobody
05.04.2017
17:41:47
любители луа, почему фс от него дохнет? )
(gdb) bt
#0 0x00007f37be29cbbb in SWIG_PropagateClientData () at mod_lua_wrap.cpp:8678
#1 luaopen_freeswitch (L=<optimized out>) at mod_lua_wrap.cpp:8722
#2 0x00007f37be28300a in lua_init () at mod_lua.cpp:127
#3 0x00007f37be283b93 in lua_function (session=0x7f37d004fd78, data=0x7f37a8001e70 "somescript.lua") at mod_lua.cpp:468
#4 0x00007f37fc5d596b in switch_core_session_exec (session=session@entry=0x7f37d004fd78, application_interface=application_interface@entry=0x193ae08, arg=arg@entry=0x7f37a8001e70 "somescript.lua") at src/switch_core_session.c:2754
#5 0x00007f37fc5d5f5a in switch_core_session_execute_application_get_flags (session=session@entry=0x7f37d004fd78, app=0x7f37a8001e68 "lua", arg=0x7f37a8001e70 "somescript.lua", flags=flags@entry=0x0) at src/switch_core_session.c:2624
#6 0x00007f37fc5d8d4a in switch_core_standard_on_execute (session=0x7f37d004fd78) at src/switch_core_state_machine.c:283
#7 switch_core_session_run (session=0x7f37d004fd78) at src/switch_core_state_machine.c:535
#8 0x00007f37fc5d325e in switch_core_session_thread (thread=<optimized out>, obj=0x7f37d004fd78) at src/switch_core_session.c:1607
#9 0x00007f37fc5cf092 in switch_core_session_thread_pool_worker (thread=0x7f37d006a490, obj=<optimized out>) at src/switch_core_session.c:1673
#10 0x00007f37fc6a2500 in dummy_worker (opaque=0x7f37d006a490) at threadproc/unix/thread.c:151
#11 0x00007f37fa6b3dc5 in start_thread () from /lib64/libpthread.so.0
#12 0x00007f37f9d8a73d in clone () from /lib64/libc.so.6


Максим
05.04.2017
17:49:24
В скрипте используете конструктор сессий? Подключение к бд по dbh?

Denis 災 nobody
05.04.2017
17:51:18
function log(message, session, level)
freeswitch.consoleLog(level, string.format('%s. Destination: %s; from: %s; to: %s; uuid: %s; X-Inring: %s\n', message, session:getVariable('destination_number'),
session:getVariable('sip_from_user'),
session:getVariable('sip_to_user'),
session:getVariable('uuid'),
session:getVariable('sip_h_X-Inring')
))
end
orig_channel_name = session:getVariable('origination_channel_name')
limit_var_key = session:getVariable('limit_var_key')
—log(string.format('lua done'), session, 'notice')
весь скрипт

Александр
05.04.2017
17:58:30
огромное спасибо @Dragonflybsd, все работает

kino
05.04.2017
18:07:40

Google


Alexandru
05.04.2017
22:33:01
function log(message, session, level)
freeswitch.consoleLog(level, string.format('%s. Destination: %s; from: %s; to: %s; uuid: %s; X-Inring: %s\n', message, session:getVariable('destination_number'),
session:getVariable('sip_from_user'),
session:getVariable('sip_to_user'),
session:getVariable('uuid'),
session:getVariable('sip_h_X-Inring')
))
end
orig_channel_name = session:getVariable('origination_channel_name')
limit_var_key = session:getVariable('limit_var_key')
—log(string.format('lua done'), session, 'notice')
ээм
а consolelog где заканчивается?
ааа
вижу
function log(message, session, level)
freeswitch.consoleLog(level, string.format('%s. Destination: %s; from: %s; to: %s; uuid: %s; X-Inring: %s\n', message, session:getVariable('destination_number'),
session:getVariable('sip_from_user'),
session:getVariable('sip_to_user'),
session:getVariable('uuid'),
session:getVariable('sip_h_X-Inring')
))
end
orig_channel_name = session:getVariable('origination_channel_name')
limit_var_key = session:getVariable('limit_var_key')
—log(string.format('lua done'), session, 'notice')
static int _wrap_consoleLog(lua_State* L) {
int SWIG_arg = 0;
char *arg1 = (char *) 0 ;
char *arg2 = (char *) 0 ;
SWIG_check_num_args("consoleLog",2,2)
if(!SWIG_lua_isnilstring(L,1)) SWIG_fail_arg("consoleLog",1,"char *");
if(!SWIG_lua_isnilstring(L,2)) SWIG_fail_arg("consoleLog",2,"char *");
arg1 = (char *)lua_tostring(L, 1);
arg2 = (char *)lua_tostring(L, 2);
consoleLog(arg1,arg2);
return SWIG_arg;
if(0) SWIG_fail;
fail:
lua_error(L);
return SWIG_arg;
}
я не знаю что тут может покласть фрисвитч
и не понимаю почему обрывается на трединге
бред какой-то
зачем ему создавать новый тред??
а тьфу, ун скрипт обработать да...
не
ссплю уже


Alexandru
05.04.2017
23:07:40
завтра посмотрю свежим взглядом
Денис, а можешь попробовать изначально все переменные отдельно поспрашивать и объединиь, чтобы string.format внутри consolelog не юзать?
мне кажется что это луашный враппер всетаки тупит
я имею в виду mod_lua_wrap
nu nado smotret

Максим
05.04.2017
23:10:36
всегда писал как то так
freeswitch.consoleLog('INFO',"LuaLogicDetection.lua detected VIP client "..def_number.." and distributed to fscallcenter\n");
и ни каких проблем, зачем string.format?

Google

Максим
05.04.2017
23:13:14
я как то столкнулся с такой штукой что обычный вывод в лог модуль mod_xml_rpc парсил по регулярке O_O зачем не понимаю. Так вот если строка длинная попадалась, то был выход за пределы массива и модуль клал FS
отсюда вывод, чем проще, тем надёжнее)


ros
06.04.2017
03:59:37
а можно пример подробнее? ну реально не врубаюсь)
попробовать как-то так (не проверял)
<extension name="att_xfer_fil">
<condition field="destination_number" expression="^att_xfer_fil$">
<action application="read" data="3 4 'tone_stream://%(10000,0,350,440)' digits 30000 #"/>
<action application="set" data="origination_cancel_key=#"/>
<action application="transfer" data="${digits} XML redirect_xfer"/>
</condition>
</extension>
<!--==== вынести из контекста features ====-->
<context name="redirect_xfer">
<extension name="RnD" continue="true">
<condition field="destination_number" expression="^(100\d)$" >
<action application="att_xfer" data="user/$1@$${domain}"/>
</condition>
</extension>
<extension name="RnD" continue="true">
<condition field="destination_number" expression="^7014(1\d{2}|444)$" >
<action application="bridge" data="sofia/gateway/rnd/$1" />
</condition>
</extension>
</context>

Александр
06.04.2017
09:01:32


ros
06.04.2017
09:03:33
отредактировал портянку
att_xfer вместо bridge

Александр
06.04.2017
09:37:32
без изменений

Denis 災 nobody
06.04.2017
09:40:02
а в дебаг логе что?

Admin
ERROR: S client not available

Александр
06.04.2017
09:52:06
а в дебаг логе полный пипец... не успеваю отловить... там в один момент времени порядка 700 звонков крутится)) если знаете как отфильтровать вывод, подскажите плз

Denis 災 nobody
06.04.2017
09:52:45
включили, позвонили, выключили, потом в логе по юиду грепаем
...но обычно есть рядом тестовый контур
нода без звонков или вообще пустая система

Александр
06.04.2017
11:08:53
подшаманил немного, ситуация немного изменилась
при переключении у абонента А(1 FS) включается музыка, абонент Б(1 FS) слышит гудок и набирает номер абонента Г(2 FS), абонент Г берет трубку и в этот момент у абонента А НЕ происходит сброс и он остается на удержании, но при этом если положит трубку абонент Б, переключение не произойдет
А если НЕ дожидаться пока абонент Г возьмет трубку и положить трубку у абонента Б, переключение происходит нормально, в результате абонент А и Г могут общаться.

Denis 災 nobody
06.04.2017
11:21:57
что при этом в логах? )
да, поднимай тестовую ноду

Александр
06.04.2017
11:24:21
только вечером смогу... не могу я в этих километрах логов найти свое

Denis 災 nobody
06.04.2017
11:33:39
уже говорил, fsctl loglevel debug, снимаешь дамп (как можно быстрее и не в часы пик), fsctl loglevel err или какой по дефолту был
потом находишь channel uuid и грепаешь в фс логе

Александр
06.04.2017
11:37:51
на этом FS крутится Callcenter, там час пик с 2:00 мск по 20:00 мск, поэтому если смотреть логи то только после 20:00 мск)

Google

Denis 災 nobody
06.04.2017
11:38:06
после 20 и смотри )

Igor
06.04.2017
13:18:20
всем привет
вылезла одна хрень, не пойму как забороть. Вобщем есть originate, если поточнее то
originate sofia/profile/num@ip 'wait_for_anwer,conference:id' inline
Вобщем в caller_id_number в конференцию прилетает кривой номер, т.е. с префиксом от провайдера, чего крайне не хотелось бы. Пробовал запихнуть в канал sip_cid_type=none, ignore_display_updates=true (частично решило вопрос, но опять же не полностью, т.к. там при отправке Б номера есть нюанс). Собственно вопрос, суньте носом в переменную которая отвечает за caller_id_number с которым member входит в конференцию, чтобы взять ее и поменять так как мне нужно
origination_caller_id_number, effective_caller_id_number,caller_id_number,sip_from_user уже пробовал, ФС не реагирует.
при всем при этом если меняю conference на bridge, то всё отрабатывает норм

Denis 災 nobody
06.04.2017
13:52:18
а если черещ loopback?
там работают все эти effective

Igor
06.04.2017
13:55:49
да вот cdr ломает зараза
всё бы ничего

Denis 災 nobody
06.04.2017
13:56:06
ну сделай хук на хэнгап с фиксом

Igor
06.04.2017
13:56:36
хм
как вариант
спасибо, ща попробуем

Say
07.04.2017
09:34:00
Ребят а возможно ли в настройках gateway задать в поведение, когда FS принудительно перезаписывал бы from для всех вызовов ?

Igor
07.04.2017
09:34:31
всмысле один статичный? или несколько разных?

Say
07.04.2017
09:34:45
статичный
ТОесть Идет входящий вызов -> попадает в bridge -> Исходщий, вот хочется чтобы все что отправленно через конкретный gateway в исходящем вызове всегда подставлялно from из настроек gateway

Igor
07.04.2017
09:36:39
задаешь from-user же, и поотключай всякие caller-id-in-from и тп

Say
07.04.2017
09:37:07
<param name="caller-id-in-from" value="false" />

Igor
07.04.2017
09:37:23
а еще что в параметрах?

Denis 災 nobody
07.04.2017
09:38:05
вылезла одна хрень, не пойму как забороть. Вобщем есть originate, если поточнее то
originate sofia/profile/num@ip 'wait_for_anwer,conference:id' inline
Вобщем в caller_id_number в конференцию прилетает кривой номер, т.е. с префиксом от провайдера, чего крайне не хотелось бы. Пробовал запихнуть в канал sip_cid_type=none, ignore_display_updates=true (частично решило вопрос, но опять же не полностью, т.к. там при отправке Б номера есть нюанс). Собственно вопрос, суньте носом в переменную которая отвечает за caller_id_number с которым member входит в конференцию, чтобы взять ее и поменять так как мне нужно
origination_caller_id_number, effective_caller_id_number,caller_id_number,sip_from_user уже пробовал, ФС не реагирует.
вот тут еще можно опции глянуть