java - 使用 Asterisk 接听电话(AMI/AGI 或其他)

标签 java asterisk tapi incoming-call

我正在使用 Asterisk 与 PBX 通信并想接听来电,但是,我需要的是:

  • 假设我们是 101 并调用 102。我们可以毫无问题地看到/监听来电。

  • 在接收方 (102),用户会看到来电通知。我希望答案由客户端 gui 触发,一旦用户在 gui(软件)上执行了一些按钮操作,答案事件应该传播到 asterix/pbx,然后系统应该处于已回答状态和通话状态。当我在 102 上为来电定义一些 AGI 脚本并定义应答时,调用者 (101) 进入通话状态,但我们看不到接收器 102(被叫方)的电话设备上有任何 Action 。有没有办法在接收方执行一些 Action 、脚本等时让双方都进入通话状态(等到接收方执行一些应答/拾取 Action )然后进入通话状态? Action 应该由一些脚本(基于 java 的 agi/ami 脚本)启动

  • 总而言之,我想使用电话硬件设备和软件同步工作。该要求可以使用 TAPI/JTAPI/GJTAPI 来完成,但我想了解是否可以通过替换 TAPI 使用 asterix 来实现。目前,我们可以从基于 java 的客户端发起调用,向电话硬件发送操作并使用 gjtapi 监控调用。我们还可以在我们的 java 客户端上看到一个来电,用户可以通过一些 gui 按钮操作来接听,gjtapi 将应答发送到线路,然后电话设备进入通话状态。 我想用软件管理电话设备,但我不想要任何软电话。我想用软件控制电话和触发makecall、接听 Action 。

  • TAPI 是满足此要求的唯一解决方案吗?尝试使用 asterisk 是错误的方法吗?

示例 extensions.conf

扩展 => 102,1,Agi(agi://192.168.0.X/answer.agi)

fastagi.properties:

answer.agi = org.asteriskjava.examples.fastagi.ExampleCallIn

示例调用:

public class ExampleCallIn extends BaseAgiScript {
  public void service(AgiRequest request, AgiChannel channel) throws AgiException {
   answer();

我从 101 开始调用,通过电话设备或通过软件(拨号),服务方法被触发并调用应答,在电话 101 上我看到它因为接听电话而进入通话状态,但是在 102 上(电话设备)没有任何反应,它还在响(从 101 呼入)。

最佳答案

要通过 AGI 接听电话而不是另一条腿,你只需要做类似的事情

  print "ANSWER\n"

您选择的任何语言。

但是,如果您已经被要求调用其他支路 B,事情就会变得复杂得多。您需要使用目标手机的固件,否则您可以

1) 在目标电话上设置自动应答或将您的调用标记为对讲电话

https://www.voip-info.org/wiki/view/Asterisk+Paging+and+Intercom

此时当目标设备有来电时,会自动接听并桥接

2) 设置隐私宏 https://www.voip-info.org/wiki-Asterisk+cmd+Dial#Dialmacros

3) 在宏设置中调用外部脚本/数据库来确认调用。

这样技术上的电话会被接听,但甲方会认为它还在响,直到您确认,以正确的结果结束宏。

然而,这需要更高的编程水平和对 Asterisk 的理解。

关于java - 使用 Asterisk 接听电话(AMI/AGI 或其他),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43628858/

相关文章:

java - 如何使用 Avaya 实现 TAPI 解决方案

java - 找不到符号编译器错误

java - 有什么办法可以限制时间吗?

java - 如何使用 OpenCsv 下载 csv 文件而不写入它

asterisk - 开始使用Asterisk的最佳方法是什么?

python - Asterisk 测试套件 : phone not ringing

java - Spring @AutoWired 始终为 null

java - Asterisk:- 如何使用 java 在 Asterisk 框中实现自动拨号

c# - 使用 SIP 中继、PBX 电话系统等