我正在尝试从前端应用程序使用asterisk pbx执行呼叫。我的后端是用java编写的,我使用的是Spring框架。目前,我可以使用以下服务发起呼叫:
@Service("callHandlingService")
public class AsteriskCallHandlingServiceImpl implements AsteriskCallHandlingService {
private ManagerConnection managerConnection;
public void initiateCall(String caller, String callee) throws IllegalStateException, IOException, AuthenticationFailedException, TimeoutException {
ManagerConnectionFactory factory = new ManagerConnectionFactory(
"0.0.0.0", 5038, "test", "test");
this.managerConnection = factory.createManagerConnection();
OriginateAction originateAction;
ManagerResponse originateResponse;
originateAction = new OriginateAction();
originateAction.setChannel("SIP/" +caller);
originateAction.setContext("default");
originateAction.setExten(callee);
originateAction.setPriority(new Integer(1));
originateAction.setTimeout(new Integer(30000));
managerConnection.login();
originateResponse = managerConnection
.sendAction(originateAction, 30000);
}
}和控制器:
@Controller
public class CallController {
@Autowired
private AsteriskCallHandlingService callHandlingService;
@Autowired
private SimpMessageSendingOperations messagingTemplate;
@MessageMapping("/originateCall/{caller}/{callee}")
public void callNumber(@DestinationVariable String caller, @DestinationVariable String callee) throws IllegalStateException, IOException, AuthenticationFailedException, TimeoutException {
callHandlingService.initiateCall(caller, callee);
}我的问题是如何终止主叫方和被叫方之间的连接?我有一个想法是在服务hangup(String callee)中再添加一个方法,我找不到任何示例,我希望有人能给我一个提示。非常感谢!如有任何帮助,我们不胜感激!
发布于 2015-04-21 03:28:49
您需要侦听事件,这样您就可以确定为您需要的频道分配的频道名称。
在此之后,您可以通过AMI执行“核心软挂起通道XXXX”操作。
如果没有拨号方案支持,就没有简单的方法可以做到这一点。但您可以组织拨号方案,以便它在呼叫之前为您的频道名称录音。
一般来说,在不完全了解asterisk如何工作的情况下编写类似dialler的代码是非常糟糕的主意。如果你不能花时间学习,可以使用vicidial.org或其他开源的拨号内核。
https://stackoverflow.com/questions/29742016
复制相似问题