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

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

спросил 2012-12-26 11:50:13 +0400

itprofit Gravatar itprofit

http://itprofit32.ru/

Передать CDR(dstchannel) в макрос

[macro-mfn1]
exten => s,1,Dial(${ARG1},${ARG2},mt)
exten => h,1,NoOp(${CDR(dstcannel)})
exten => h,n,Hangup()
[out]
exten => _1111,1,Macro(mfn1,sip/1001,60)
exten => h,1,NoOp(${CDR(dstchannel)})
exten => h,n,Set(CDR(userfield)=${CDR(dstchannel))
exten => h,n,StopMixMonitor()
exten => h,n,System(${monopt})

При звонке имеем

    -- Executing [1111@out:1] Macro("SIP/1004-0000014e", "mfn1,sip/1001,60") in new stack
    -- Executing [s@macro-mfn1:1] Dial("SIP/1004-0000014e", "sip/1001,60,mt") in new stack
  == Using SIP RTP CoS mark 5
    -- Called 1001
    -- Started music on hold, class 'default', on SIP/1004-0000014e
    -- SIP/1001-0000014f is ringing
    -- SIP/1001-0000014f answered SIP/1004-0000014e
    -- Stopped music on hold on SIP/1004-0000014e
    -- Executing [h@macro-mfn1:1] NoOp("SIP/1004-0000014e", "") in new stack
    -- Executing [h@macro-mfn1:2] Hangup("SIP/1004-0000014e", "") in new stack
  == Spawn extension (macro-mfn1, h, 2) exited non-zero on 'SIP/1004-0000014e'
  == Spawn extension (macro-mfn1, s, 1) exited non-zero on 'SIP/1004-0000014e' in macro 'mfn1'
  == Spawn extension (out, 1111, 1) exited non-zero on 'SIP/1004-0000014e'
    -- Executing [h@out:1] NoOp("SIP/1004-0000014e", "SIP/1001-0000014f") in new stack
    -- Executing [h@out:2] Set("SIP/1004-0000014e", "CDR(userfield)=SIP/1001-0000014f") in new stack
    -- Executing [h@out:3] StopMixMonitor("SIP/1004-0000014e", "") in new stack
    -- Executing [h@out:4] System("SIP/1004-0000014e", "") in new stack

Т.е. получается когда звонок в макросе (dstchannel) - пустой, а когда возвращается в контекст [out] - (dstchannel) снова есть.
Задача такая - записать в userfield номер принявший вызов т.е. Cut из dstchannel, но чет не получается. Если делать set cdr в контексте out , то в базе ничего нет. Может из макроса надо писать, но как в нем получить dstchannel ?

Передать CDR(dstchannel) в макрос

[macro-mfn1]
exten => s,1,Dial(${ARG1},${ARG2},mt)
exten => h,1,NoOp(${CDR(dstcannel)})
exten => h,n,Hangup()
[out]
exten => _1111,1,Macro(mfn1,sip/1001,60)
exten => h,1,NoOp(${CDR(dstchannel)})
exten => h,n,Set(CDR(userfield)=${CDR(dstchannel))
exten => h,n,StopMixMonitor()
exten => h,n,System(${monopt})

При звонке имеем

    -- Executing [1111@out:1] Macro("SIP/1004-0000014e", "mfn1,sip/1001,60") in new stack
    -- Executing [s@macro-mfn1:1] Dial("SIP/1004-0000014e", "sip/1001,60,mt") in new stack
  == Using SIP RTP CoS mark 5
    -- Called 1001
    -- Started music on hold, class 'default', on SIP/1004-0000014e
    -- SIP/1001-0000014f is ringing
    -- SIP/1001-0000014f answered SIP/1004-0000014e
    -- Stopped music on hold on SIP/1004-0000014e
    -- Executing [h@macro-mfn1:1] NoOp("SIP/1004-0000014e", "") in new stack
    -- Executing [h@macro-mfn1:2] Hangup("SIP/1004-0000014e", "") in new stack
  == Spawn extension (macro-mfn1, h, 2) exited non-zero on 'SIP/1004-0000014e'
  == Spawn extension (macro-mfn1, s, 1) exited non-zero on 'SIP/1004-0000014e' in macro 'mfn1'
  == Spawn extension (out, 1111, 1) exited non-zero on 'SIP/1004-0000014e'
    -- Executing [h@out:1] NoOp("SIP/1004-0000014e", "SIP/1001-0000014f") in new stack
    -- Executing [h@out:2] Set("SIP/1004-0000014e", "CDR(userfield)=SIP/1001-0000014f") in new stack
    -- Executing [h@out:3] StopMixMonitor("SIP/1004-0000014e", "") in new stack
    -- Executing [h@out:4] System("SIP/1004-0000014e", "") in new stack

Т.е. получается когда звонок в макросе (dstchannel) - пустой, а когда возвращается в контекст [out] - (dstchannel) снова есть.
Задача такая - записать в userfield номер принявший вызов т.е. Cut из dstchannel, но чет не получается. Если делать set cdr в контексте out , то в базе ничего нет. Может из макроса надо писать, но как в нем получить dstchannel ?

_____________часть 2___________

Для того чтобы получить в макросе того, кто принял звонок можно использовать переменную ${DIALEDPEERNAME}
Однако

exten => s,n,Set(CDR(userfield)=${CUT(DIALEDPEERNAME,-,1)})

в базу не пишет, в консоле ошибок нет вроде

Executing [s@macro-mfn1:2] Set("SIP/1004-00000188", "CDR(userfield)=SIP/1001") in new stack

В чем может быть проблема? как из макроса/(после макроса) изменить userfield ?

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