星号调用中的一个调用挂起中有两个挂断事件

时间:2015-01-13 19:08:53

标签: asterisk

我正在使用星号调用文件来拨打电话,我希望在呼叫结束后向呼叫者发送消息,他已经呼叫了这么长时间。我编写了用于在挂断事件中发送消息的代码。现在我面临的问题是,当呼叫结束时,对于主叫方和被叫方,两次触发挂断事件,这导致向呼叫者发送两条消息。任何人都可以建议我如何处理这个问题,一旦执行代码,它就不会再次执行同一个调用。

编辑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);  

2 个答案:

答案 0 :(得分:0)

你已经根据cdr(mysql表格检查)进行了接缝。

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

不,你不能用星号来代替你。

答案 1 :(得分:0)

想知道你曾用过星号事件来处理呼叫结束事件?