【问题标题】:Two hangup events in one call hangup in asterisk call一个通话中的两个挂断事件 星号通话中的挂断
【发布时间】:2015-05-24 07:55:49
【问题描述】:

我正在使用星号呼叫文件进行呼叫,我想在呼叫结束后向呼叫者发送消息,表明他已经呼叫了这么长时间。我编写了在挂断事件中发送消息的代码。现在我面临的问题是,当呼叫结束时,呼叫方和被呼叫方都会触发两次挂断事件,这会导致向呼叫者发送两条消息。任何人都可以提出任何想法,我该如何处理一旦代码被执行,它就不会再次执行相同的调用。

编辑 1: 以下是我希望避免在同一调用中执行两次的代码。

LogProperties.log.debug("[" + refID + "] Channel HUNGUP on id: " + channelID);
LogProperties.log.debug("Channel hungup on id: " + channelID);
Object channelObj = EventMonitor.requestsMap.get(channelID);
if (channelObj != null) {
    ChargingTask activeTask = (ChargingTask) channelObj;
    LogProperties.log.info("[" + refID + "] Cancelling changing task on channelID: " + channelID);
    activeTask.cancel();
} 
else {
    String otherChannelID = (String) EventMonitor.linkedChannels.get(channelID);
    LogProperties.log.info("[" + refID + "] Cannot Cancel changing task against channelID: " + channelID + ", Now looking for other linked channel, ID: " + otherChannelID);
    channelObj = EventMonitor.requestsMap.get(otherChannelID);
    if (channelObj != null) {
        ChargingTask activeTask = (ChargingTask) channelObj;
        LogProperties.log.info("[" + refID + "] Cancelling changing task for channelID: " + otherChannelID);
        activeTask.cancel();
    }
    else{
        LogProperties.log.error("[" + refID + "] Still cannot Cancel Charging Task");
    }
}
Utilities.removeMemcachedEntry(channelID);
Utilities.ClearHashtables(channelID);  

【问题讨论】:

    标签: asterisk


    【解决方案1】:

    您根据 cdr(mysql 表检查)执行此操作的接缝。

    其他解决方案 - 确定哪个频道是原始频道,记住它是一个发送,即使只有 iif hangup 有来自列表的频道。

    不,你不能强迫星号代替你这样做。

    【讨论】:

    • 其他解决方案对我有用,我只在第一次挂断事件中捕获了频道,这解决了我的问题
    【解决方案2】:

    想问一下你用什么星号事件来处理通话结束事件?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      相关资源
      最近更新 更多