【问题标题】:How to link Originate Action with Hangup event in JAVA AMI SIP如何在 JAVA AMI SIP 中将 Originate Action 与 Hangup 事件联系起来
【发布时间】:2015-07-21 15:08:40
【问题描述】:

我正在使用 Asterisk Java 通过 SIP 通道拨打各种号码

originateAction.setChannel("SIP/10.0.66.118/0900044314");

但是当涉及到事件时,频道更改为 SIP/10.0.66.118-0000003f

请建议如何将事件与 Originate 操作联系起来,因为它在 DAHDI 中显示带有被叫号码的频道。

Manager Event is-->org.asteriskjava.manager.event.NewChannelEvent[dateReceived=Tue Jul 21 18:45:14 IST 2015,privilege='call,all',timestamp='null',calleridname='null',uniqueid='1437484937.66',callerid='null',state='null',calleridnum='null',channel='SIP/10.0.66.118-0000003f',systemHashcode=90910501]
Manager Event is-->org.asteriskjava.manager.event.NewCallerIdEvent[dateReceived=Tue Jul 21 18:45:14 IST 2015,privilege='call,all',timestamp='null',calleridname='null',uniqueid='1437484937.66',callerid='6131000',cidcallingpres='0',cidcallingprestxt='Presentation Allowed, Not Screened',calleridnum='6131000',channel='SIP/10.0.66.118-0000003f',systemHashcode=473578347]
Manager Event is-->org.asteriskjava.manager.event.NewChannelEvent[dateReceived=Tue Jul 21 18:45:15 IST 2015,privilege='call,all',timestamp='null',calleridname='null',uniqueid='1437484938.67',callerid='null',state='null',calleridnum='null',channel='SIP/10.0.66.118-00000040',systemHashcode=856882247]
Manager Event is-->org.asteriskjava.manager.event.NewCallerIdEvent[dateReceived=Tue Jul 21 18:45:15 IST 2015,privilege='call,all',timestamp='null',calleridname='null',uniqueid='1437484938.67',callerid='6131000',cidcallingpres='0',cidcallingprestxt='Presentation Allowed, Not Screened',calleridnum='6131000',channel='SIP/10.0.66.118-00000040',systemHashcode=594588547]
Manager Event is-->org.asteriskjava.manager.event.NewStateEvent[dateReceived=Tue Jul 21 18:45:18 IST 2015,privilege='call,all',timestamp='null',calleridname='null',uniqueid='1437484937.66',callerid='6131000',state='null',calleridnum='6131000',channel='SIP/10.0.66.118-0000003f',systemHashcode=703599489]
Manager Event is-->org.asteriskjava.manager.event.HangupEvent[dateReceived=Tue Jul 21 18:45:44 IST 2015,privilege='call,all',timestamp='null',calleridname='<unknown>',uniqueid='1437484937.66',callerid='6131000',causetxt='User alerting, no answer',cause='19',state='null',calleridnum='6131000',channel='SIP/10.0.66.118-0000003f',systemHashcode=1275756078]
Manager Event is-->org.asteriskjava.manager.event.OriginateResponseEvent[dateReceived=Tue Jul 21 18:45:44 IST 2015,privilege='call,all',reason='3',response='Failure',calleridname='<unknown>',timestamp='null',uniqueid='<null>',actionid='null',internalactionid='498357308_6',context='from-pstn',exten='84',calleridnum='6131000',channel='SIP/10.0.66.118/08755862255',systemHashcode=771938640]
Manager Event is-->org.asteriskjava.manager.event.HangupEvent[dateReceived=Tue Jul 21 18:45:45 IST 2015,privilege='call,all',timestamp='null',calleridname='<unknown>',uniqueid='1437484938.67',callerid='6131000',causetxt='User alerting, no answer',cause='19',state='null',calleridnum='6131000',channel='SIP/10.0.66.118-00000040',systemHashcode=1024010953]
Manager Event is-->org.asteriskjava.manager.event.OriginateResponseEvent[dateReceived=Tue Jul 21 18:45:45 IST 2015,privilege='call,all',reason='3',response='Failure',calleridname='<unknown>',timestamp='null',uniqueid='<null>',actionid='null',internalactionid='1655137665_6',context='from-pstn',exten='5',calleridnum='6131000',channel='SIP/10.0.66.118/09910044314',systemHashcode=618140013]
Manager Event is-->org.asteriskjava.manager.event.RegistryEvent[dateReceived=Tue Jul 21 18:47:34 IST 2015,privilege='system,all',timestamp='null',username='6131000',cause='null',channeldriver='null',status='Registered',domain='10.0.66.118',channel='null',systemHashcode=156354047]

请建议。

【问题讨论】:

    标签: java asterisk sip amazon-ami asteriskami


    【解决方案1】:

    在我的 C# 应用程序(也使用 AMI)中,通过发起操作,我使用自己的唯一标识符设置了一些变量,然后跟踪 VarSet 事件以将调用的 UniqueId 绑定到此变量中指定的我自己的 ID。然后使用 UniqueId 您可以跟踪呼叫的任何事件。

    在你的情况下,你需要做类似的事情

    originateAction.setVariable('myOwnId=myUniqueValue');
    

    并监听 VarSet 事件:https://github.com/asterisk-java/asterisk-java/blob/master/src/main/java/org/asteriskjava/manager/event/VarSetEvent.java

    然后您可以检查变量和值字段,如果它等于您的值,请记住 uniqueId 值。

    还有另一种方法可以将您的发起操作与 UniqueId - OriginateResponse 事件绑定。

    【讨论】:

    • 嗨,但是您自己的变量没有出现在事件跟踪中?喜欢新的事件跟踪.NewChannelEvent[dateReceived=Tue Jul 21 18:45:14 IST 2015,privilege='call,all',timestamp='null',calleridname='null',uniqueid='1437484937.66',callerid='null',state='null',calleridnum='null',channel='SIP/10.0.66.118-0000003f',systemHashcode=90910501]
    • 如何将originAction.setChannel("SIP/10.0.66.118/0900044314") --> 链接到SIP 事件,通常是呼叫号-->0900044314--> 唯一ID-->事件。有没有办法在发起操作时获取 Uqique id
    • 有一种方法可以将发起操作与 UniqueId 链接 - 它是 OriginateResponse 事件,您也可以通过通道变量绑定它。我不明白你的意思是“没有出现在事件跟踪中”,但是 VarSet 和 OriginateResponse 事件都完全由星号 java 支持。看看我的答案的版本。或许现在最好不要理解。
    • 这是事件字符串 --> (频道不显示原始号码)INFO: No event class registered for event type 'varset', attributes: {uniqueid=1437876389.147733, event=VarSet, privilege=dialplan,all, value=SUCCESS, variable=PLAYBACKSTATUS, channel=SIP/10.0.66.118-00000c83}我的代码` originResponse = managerConnection.sendAction(originateAction,60000);//,sleep_time_for_call); System.out.print("O Response is --> "+originateResponse.getUniqueId());` getUniqueId 给出 null
    • 您是否在发起操作中添加了自定义变量 (originateAction.setVariable('myOwnId=myUniqueValue'))?
    【解决方案2】:
    UniqueId = "";
    var originateResponse = manager.SendEventGeneratingAction(oc, oc.Timeout);
    if (originateResponse.Events.Count > 0 && originateResponse.Events[0].UniqueId != null && originateResponse.Events[0].UniqueId != "<unknown>")
    {
        UniqueId = originateResponse.Events[0].UniqueId;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 2023-03-24
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 2011-12-31
      相关资源
      最近更新 更多