Апдейт записи cdr
Сообщений: 147
|
Апдейт записи cdr
Приветствую!
В диалплане настроено:
.....
exten => 100,n,Dial(SIP/prov_test/1234567890,60,tTg)
exten => 100,n, NoOP(============= ${HANGUPCAUSE}==========)
exten => 100,n,Set(ODBC_CR_FIX_TEST(${E})=${ORIG_NUM} ${HANGUPCAUSE} DST)
exten => 100,n,Hangup()
Настройка func_odbc:
[CR_FIX_TEST]
dsn=asterisk
writesql=UPDATE cdr SET userfield = '${VALUE}' WHERE uniqueid = '${ARG1}'
В консоли вижу:
Executing [100@office:5] Dial("SIP/100-001d4f54", "SIP/prov_test/1234567890,60,tTg") in new stack
== Using SIP RTP CoS mark 5
-- Called prov_test/1234567890
-- SIP/prov_test-001d4f55 is circuit-busy
== Everyone is busy/congested at this time (1:0/1/0)
-- Executing [100@office:6] NoOp("SIP/100-001d4f54", "============= 1==========") in new stack
-- Executing [100@office:7] Set("SIP/100-001d4f54", "ODBC_CR_FIX_TEST(1291364127.2077258)=100 1 DST") in new stack
-- Executing [100@office:8] Hangup("SIP/100-001d4f54", "") in new stack
Но в поле юзерфилд какое было значение до звонка - то и осталось. Есть идеи, почему ?
Заранее благодарен за ответы!
|
Сообщений: 261
|
Re: Апдейт записи cdr
А почему бы не сделать так?
exten => 100,n,Set(CDR(userfield)=${ORIG_NUM} ${HANGUPCAUSE} DST)
Intel Core 2 Duo E6400 @ 2.40GHz / 6GB / 160GB | Gentoo Linux 2.6.32 || Asterisk 1.6.2.9 | SFA + FFA | Linksys SPA922 + D-Link DPH-300S + D-Link DVG-7111S + 3xHuawei E1550
|
Сообщений: 147
|
Re: Апдейт записи cdr
В 1.6.2.10 этот финт не работал - приходилось апдейтить .. а в 1.6.2.13 видимо поправили - заработало. Спасибо ).
|
Сообщений: 147
|
Re: Апдейт записи cdr
Потестировал еще ... дурацкая ситуация получается и не стандартное поведение:
Если сбой, то конструкция Set(CDR(userfield)= работает. Если разговор состоялся, то не важно стоит опция "g" или нет - не работает функция.
Апдейт же работает боле мене верно. Если дозвон был и указана опция "g" то, как и следует ожидать апдейтится запись в любом случае, не важно кто положил трубку. Если был сбой - то апдейтить нечего, т.к. запись создается в таблице после отбоя первого плеча.
Вобщем думается мне что придется писать макрос, где тупо перечислять все коды, и в зависимости от кода делать либо апдейт, либо сет юзерфилд, что немного печалит из-за обема ). У кого нибудь есть более рациональное решение, без гигантского макроса ?
|
Сообщений: 261
|
Re: Апдейт записи cdr
iye у меня на 13 работает при состоявшемся разговоре
Intel Core 2 Duo E6400 @ 2.40GHz / 6GB / 160GB | Gentoo Linux 2.6.32 || Asterisk 1.6.2.9 | SFA + FFA | Linksys SPA922 + D-Link DPH-300S + D-Link DVG-7111S + 3xHuawei E1550
|
Сообщений: 147
|
Re: Апдейт записи cdr
Какие типы каналов использовались для теста ?
|
Сообщений: 261
|
Re: Апдейт записи cdr
Только SIP
Intel Core 2 Duo E6400 @ 2.40GHz / 6GB / 160GB | Gentoo Linux 2.6.32 || Asterisk 1.6.2.9 | SFA + FFA | Linksys SPA922 + D-Link DPH-300S + D-Link DVG-7111S + 3xHuawei E1550
|
Сообщений: 147
|
Re: Апдейт записи cdr
А в базу через какой модуль пишется ? Я использую odbc.
|
Откуда: Санкт-Петербург
Сообщений: 568
|
Re: Апдейт записи cdr
iye:
[CR_FIX_TEST]
dsn=asterisk
writesql=UPDATE cdr SET userfield = '${VALUE}' WHERE uniqueid = '${ARG1}'
Но в поле юзерфилд какое было значение до звонка - то и осталось. Есть идеи, почему ?
Потому что CDR запись в таблице создается после Hangup. В тот момент, когда вы пытаетесь WHERE uniqueid = '${ARG1} , записи с таким uniqueid еще нет.
|
Откуда: Санкт-Петербург
Сообщений: 568
|
Re: Апдейт записи cdr
iye: У кого нибудь есть более рациональное решение, без гигантского макроса ?
Попробуйте делать Dial с опцией 'e', а ODBC апдейт CDR-a перенести в экстен 'h'.
п.с. ^^^ завтра прочту, сам не пойму что написал :)
|
|