我正在使用 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/