我正在开发一个非常简单的基于 Asterisk-Java IVR 的程序,它会迎接调用者,从 Web 服务中检索一些信息,将检索到的数据读取给调用者,最后挂断。
我遵循了哪些步骤:
在 extensions_custom.conf 中添加了以下行:
exten => 1000,n,Agi(agi://192.168.0.8/ivryobi.agi)
在 C:\Project\target\classes\ 中创建了以下文件结构
Runnable.java
IvrYobi.java
Runnable.class
IvrYobi.class
fastagi-mapping.properties
在 fastagi-mapping.properties 里面我有:
ivryobi.agi = main.IvrYobi
IvrYoby的内容是:
public class IvrYobi extends BaseAgiScript {
public void service(AgiRequest request, AgiChannel channel) throws AgiException {
String callerMsisdn = request.getCallerIdNumber();
}
当它正常工作时
在控制台中运行以下命令
C:\Project\target\classes>java -cp asterisk-java.jar;commons-lang3-3.10.jar;commons-logging-1.2.jar;httpclient-4.5.12.jar;httpcore-4.4.13.jar; mysql-connector-java-8.0.20.jar;. org.asteriskjava.fastagi.DefaultAgiServer
正如您在以下控制台输出中看到的那样,完美运行
2020 年 6 月 30 日下午 6:09:04 org.asteriskjava.fastagi.DefaultAgiServer 启动 INFORMACIËN:监听 *:4573。2020 年 6 月 30 日下午 6:09:09 org.asteriskjava.fastagi.AbstractAgiServer getPool INFORMACIËN:线程池已启动。2020 年 6 月 30 日下午 6:09:09 org.asteriskjava.fastagi.ResourceBundleMappingStrategy loadResourceBundle INFORMACIËN:将“ivryobi.agi”的映射添加到类 IvrYobi ...
当问题出现时
当我运行相同的代码,但在控制台中插入时,我使用 Runnable.java
以下是 Runnable.java 的内容:
DefaultAgiServer server = new DefaultAgiServer();
public MyRunnable() {
ClassNameMappingStrategy strategy = new ClassNameMappingStrategy(false);
server.setMappingStrategy(strategy);
}
public void run() {
try {
server.startup();
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
server.shutdown();
}
}
public void stop() {
server.shutdown();
}
我们可以在 Eclipse 的控制台上观察到以下错误:
0 [main] DEBUG org.asteriskjava.fastagi.DefaultAgiServer - 使用 channelFactory org.asteriskjava.fastagi.internal.DefaultAgiChannelFactory 9 [main] INFO org.asteriskjava.fastagi.DefaultAgiServer - 监听 *:4573。4806 [main] DEBUG org.asteriskjava.fastagi.DefaultAgiServer - 收到来自 /192.168.0.254 的连接 4810 [main] INFO org.asteriskjava.fastagi.DefaultAgiServer - 线程池已启动。4849 [AJ DaemonPool-1.1] 调试 org.asteriskjava.fastagi.ClassNameMappingStrategy - 无法创建 ivryobi.agi 类型的 AgiScript 实例:找不到类,请确保该类存在并且在 CLASSPATH 中可用 4849 [AJ DaemonPool-1.1] 错误org.asteriskjava.fastagi.internal.FastAgiConnectionHandler - 没有为 URL 'agi://192.168.0.8/ivryobi.agi' 配置脚本(脚本'ivryobi.agi')
已尝试故障排除
- 我已经确定 fastagi-mapping.properties 在 CLASSPATH 上。
- 尝试了不同的名称和大小写
- 复制 java 执行路径上的 .properties 文件
- 将项目编译为可执行 jar
- 在 Eclipse 中添加/删除了包(例如:com.test.IvrYobi),并将更改应用于 .properties 文件。
- 我检查了 asterisk-java-3.5.0.jar 里面的代码,看起来如果没有找到配置文件,它会继续运行而不会发出任何警告。由于包装在罐子内,我无法修改该代码。
请问,你还有什么我可以尝试的想法吗?