我正在使用星号调用文件来拨打电话,我希望在呼叫结束后向呼叫者发送消息,他已经呼叫了这么长时间。我编写了用于在挂断事件中发送消息的代码。现在我面临的问题是,当呼叫结束时,对于主叫方和被叫方,两次触发挂断事件,这导致向呼叫者发送两条消息。任何人都可以建议我如何处理这个问题,一旦执行代码,它就不会再次执行同一个调用。
编辑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);
答案 0 :(得分:0)
你已经根据cdr(mysql表格检查)进行了接缝。
其他解决方案 - 确定哪个频道是原始的,记住发送,即使只有iif hangup也有来自列表的频道。
不,你不能用星号来代替你。
答案 1 :(得分:0)
想知道你曾用过星号事件来处理呼叫结束事件?