一个呼叫中的两个挂断事件 hangup in asterisk call
Two hangup events in one call hangup in asterisk call
我正在使用星号呼叫文件进行呼叫,并且我想在呼叫结束后向呼叫者发送他已经呼叫了这么长时间的消息。我编写了在挂断事件中发送消息的代码。现在我面临的问题是,当呼叫结束时,主叫方和被叫方都会触发挂断事件两次,这会导致向呼叫者发送两条消息。任何人都可以建议我如何处理这个东西,一旦执行代码,它就不会再次执行相同的调用。
编辑 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);
您根据 cdr 执行的接缝(mysql table 检查)。
其他解决方案 - 确定哪个频道是 origunate,记住即使只有 iif hangup 有列表中的频道也发送。
不,你不能强迫 asterisk 代替你这样做。
想问下你用什么asterisk事件来处理call end事件?
我正在使用星号呼叫文件进行呼叫,并且我想在呼叫结束后向呼叫者发送他已经呼叫了这么长时间的消息。我编写了在挂断事件中发送消息的代码。现在我面临的问题是,当呼叫结束时,主叫方和被叫方都会触发挂断事件两次,这会导致向呼叫者发送两条消息。任何人都可以建议我如何处理这个东西,一旦执行代码,它就不会再次执行相同的调用。
编辑 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);
您根据 cdr 执行的接缝(mysql table 检查)。
其他解决方案 - 确定哪个频道是 origunate,记住即使只有 iif hangup 有列表中的频道也发送。
不,你不能强迫 asterisk 代替你这样做。
想问下你用什么asterisk事件来处理call end事件?