使用ari4java库无法创建Asterisk Stasis应用的求助
解决ari4java无法注册Stasis应用的问题
我之前也踩过这个坑,核心问题在于:ari4java的ARI.build()方法只是创建一个ARI客户端连接,并不会自动在Asterisk上注册你的Stasis应用——这和你在Asterisk CLI里用ari create app app_test命令的逻辑完全不同。
下面是一步步的排查和解决方法:
1. 先验证ARI连接是否正常
在尝试注册应用前,先确认你的客户端能正常连接到Asterisk的ARI接口:
// 建立基础连接 ari = ARI.build( ASTERISK_ADDRESS, "app_test", ASTERISK_USER, ASTERISK_PASS, AriVersion.ARI_3_0_0 ); // 尝试获取用户列表,测试连接有效性 List<User> users = ari.users().list(); if (users != null && !users.isEmpty()) { System.out.println("ARI连接正常!"); } else { System.out.println("ARI连接失败,请检查地址、用户名密码或Asterisk配置"); }
如果连接失败,优先排查:
- Asterisk的
ari.conf里是否给你的用户配置了read和write权限 ASTERISK_ADDRESS格式是否正确(一般为http://<asterisk-ip>:8088/ari)- 服务器防火墙是否开放了8088端口
2. 显式注册Stasis应用(关键步骤)
这是你缺失的核心操作!建立连接后,必须主动调用applications.create()方法完成应用注册:
// 建立连接(和之前一致) ari = ARI.build( ASTERISK_ADDRESS, "app_test", ASTERISK_USER, ASTERISK_PASS, AriVersion.ARI_3_0_0 ); // 显式注册名为"app_test"的Stasis应用 ari.applications().create("app_test"); // 再次查询应用列表验证 for (Application app : ari.applications().list()) { System.out.print(app.getName() + " "); }
执行这段代码后,去Asterisk CLI里运行ari show apps,就能看到app_test出现在已注册应用列表里了。
3. 确认ARI版本兼容性
你使用的Asterisk 15.4.0对应的ARI版本确实是3.0,但最好再手动验证一下:
在Asterisk CLI中执行:
ari show versions
查看输出里的Server API version,如果和代码中指定的AriVersion.ARI_3_0_0不一致,调整版本参数即可。
4. 可选:绑定事件WebSocket(保持应用活跃)
部分Asterisk版本会把没有活跃WebSocket连接的应用标记为不活跃,如果你需要监听事件,记得建立WebSocket连接:
// 注册应用后,创建WebSocket监听 AriWebSocket ws = ari.events().eventWebsocket("app_test", null, null); ws.addListener(new AriEventListener() { @Override public void onEvent(AriEvent event) { // 处理收到的ARI事件,比如StasisStart、ChannelHangup等 System.out.println("收到事件:" + event.getType()); } }); ws.connect();
保持这个连接活跃,能确保应用一直处于正常注册状态。
5. 日志排查(仍有问题时)
如果还是无法解决,通过日志定位问题:
- 开启ari4java的DEBUG日志,查看是否有请求失败的信息(比如403权限不足、404地址错误)
- 查看Asterisk日志文件(一般在
/var/log/asterisk/messages),搜索ARI相关的错误记录,比如请求被拒绝的原因
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

