Страница 1 из 1

диалплан биллинг

Добавлено: 22 янв 2014, 16:13
Diana92
Пытаюсь написать диалплан, что-то вроде биллинга Ставит лимит на определенные исходящие звонки, в данном примере на все номера, но я потом поменяю

Код: Выделить всё

exten => _X.,1,MYSQL(Connect connid localhost asterisk_user Some_Pass_Aster01 asterisk)
exten => _X.,n,MYSQL(Query resultid ${connid}SELECT\SUM(billsec)\FROM\cdr\WHERE\src=${CALLERID(num)})
exten => _X.,n,MYSQL(Fetch fetchid ${resultid} billing)
exten => _X.,n,MYSQL(Clear ${resultid})
exten => _X.,n,GotoIf($["${fetchid}"="1"]?true:false)
exten => _X.,n,GotoIf($["${billing}" < "1"]?call:end)
exten => _X.,n(call),Dial(SIP/300)
exten => _X.,n,MYSQL(Clear ${resultid})
exten => _X.,n,Hangup()
exten => _X.,n(false),Playback(goodbye)
exten => _X.,n,Hangup()
есть у меня база, создала я там табличку cdr, он данные о звонках берет и записывает, все работает нормально

только вот проблема в диалплане, делаю звонок он мне говорит goodbye, значит дело в запросе, fetchid возвращает 0 Но почему?

И да на всякий случай лог

Код: Выделить всё

== Using SIP RTP TOS bits 184
  == Using SIP RTP CoS mark 5
    -- Executing [300@from-internal:1] MYSQL("SIP/301-00000002", "Connect connid localhost asterisk_user Some_Pass_Aster01 asterisk") in new stack
    -- Executing [300@from-internal:2] MYSQL("SIP/301-00000002", "Query resultid 3SELECT\SUM(billsec)\FROM\cdr\WHERE\src=301") in new stack
    -- Executing [300@from-internal:3] MYSQL("SIP/301-00000002", "Fetch found  billing") in new stack
    -- Executing [300@from-internal:4] MYSQL("SIP/301-00000002", "Clear ") in new stack
    -- Executing [300@from-internal:5] GotoIf("SIP/301-00000002", "0?true:false") in new stack
    -- Goto (from-internal,300,10)
    -- Executing [300@from-internal:10] Playback("SIP/301-00000002", "goodbye") in new stack
    -- <SIP/301-00000002> Playing 'goodbye.gsm' (language 'RU')
    -- Executing [300@from-internal:11] Hangup("SIP/301-00000002", "") in new stack
  == Spawn extension (from-internal, 300, 11) exited non-zero on 'SIP/301-00000002'
    -- Executing [h@from-internal:1] Macro("SIP/301-00000002", "hangupcall") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("SIP/301-00000002", "1?endmixmoncheck") in new stack
    -- Goto (macro-hangupcall,s,9)
    -- Executing [s@macro-hangupcall:9] NoOp("SIP/301-00000002", "End of MIXMON check") in new stack
    -- Executing [s@macro-hangupcall:10] GotoIf("SIP/301-00000002", "1?nomeetmemon") in new stack
    -- Goto (macro-hangupcall,s,28)
    -- Executing [s@macro-hangupcall:28] NoOp("SIP/301-00000002", "End of MEETME check") in new stack
    -- Executing [s@macro-hangupcall:29] GotoIf("SIP/301-00000002", "1?noautomon") in new stack
    -- Goto (macro-hangupcall,s,34)
    -- Executing [s@macro-hangupcall:34] NoOp("SIP/301-00000002", "TOUCH_MONITOR_OUTPUT=") in new stack
    -- Executing [s@macro-hangupcall:35] GotoIf("SIP/301-00000002", "1?noautomon2") in new stack
    -- Goto (macro-hangupcall,s,41)
    -- Executing [s@macro-hangupcall:41] NoOp("SIP/301-00000002", "MONITOR_FILENAME=") in new stack
    -- Executing [s@macro-hangupcall:42] GotoIf("SIP/301-00000002", "1?skiprg") in new stack
    -- Goto (macro-hangupcall,s,45)
    -- Executing [s@macro-hangupcall:45] GotoIf("SIP/301-00000002", "1?skipblkvm") in new stack
    -- Goto (macro-hangupcall,s,48)
    -- Executing [s@macro-hangupcall:48] GotoIf("SIP/301-00000002", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,50)
    -- Executing [s@macro-hangupcall:50] AGI("SIP/301-00000002", "hangup.agi") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/hangup.agi
    -- <SIP/301-00000002>AGI Script hangup.agi completed, returning 0
    -- Executing [s@macro-hangupcall:51] Hangup("SIP/301-00000002", "") in new stack
  == Spawn extension (macro-hangupcall, s, 51) exited non-zero on 'SIP/301-00000002' in macro 'hangupcall'
  == Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/301-00000002'
Поправьте меня или укажите на ошибку, я в этом новичок, возможно кое что не так делаю?

Re: диалплан биллинг

Добавлено: 22 янв 2014, 16:20
ded
Вам надо бы прочитать про AGI, и осваивать его помаленьку. Ибо делать mysql запросы из диал-плана - не дело.
Потом Вы обнаружите, что ничего писать уже не надо, ибо всё уже написано, и доступно, надо только разобраться.
A2billing

Re: диалплан биллинг

Добавлено: 22 янв 2014, 19:39
Diana92
Спасибо за совет) я в курсе про a2billing. Но я хочу сама попробовать сделать хоть и простенький биллинг. Делаю для себя. Но у меня почему то к базе не подключается :(

Re: диалплан биллинг

Добавлено: 22 янв 2014, 22:40
april22
после долгих изучений вопроса - AGI - это все .....

все просто :-) намекну .... опция L в Dial ;-)
ded писал(а):Потом Вы обнаружите, что ничего писать уже не надо, ибо всё уже написано, и доступно, надо только разобраться.
песен еще не написано , сколько ....... (с) не я ....

Re: диалплан биллинг

Добавлено: 22 янв 2014, 23:00
tma
Diana92 писал(а):

Код: Выделить всё

exten => _X.,n,MYSQL(Clear ${resultid})
...
exten => _X.,n(call),Dial(SIP/300)
exten => _X.,n,MYSQL(Clear ${resultid})
У Вас тут походу ошибка - Вы в одном случае дважды вызываете Clear...

Re: диалплан биллинг

Добавлено: 23 янв 2014, 08:31
virus_net
tma писал(а):У Вас тут походу ошибка
+1
Сначала вызывается Clear, а только потом начинаете анализировать значения переменных
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
Asterisk cmd MYSQL

Код: Выделить всё

exten => _X.,1,MYSQL(Connect connid localhost dbuser dbpass dbname)
exten => _X.,2,MYSQL(Query resultid ${connid} SELECT\ scriptname\ from\ mac2pin\ where\ userid=${CALLERIDNAME})
exten => _X.,3,MYSQL(Fetch fetchid ${resultid} AGIScript)
exten => _X.,4,GotoIf($[${AGIScript} = NULL]?5:7)
exten => _X.,5,AGI(${DefaultAGIScript},${EXTEN})
exten => _X.,6,Goto(_X.,8)
exten => _X.,7,AGI(${AGIScript},${EXTEN})
exten => _X.,8,MYSQL(Clear ${resultid})
exten => _X.,9,MYSQL(Disconnect ${connid})
exten => _X.,10,Hangup