5

这是拨号计划

[testInComingCalls]

exten => s,1,Answer

exten => 30953025,1,Dial(SIP/20000,20)

我想在有人接听电话后立即播放音频文件..

请给我一些想法如何调用 php 文件,发送输入并根据输出转发调用。

4

3 回答 3

5

由于大多数拨号选项都作用于被叫方,而不是主叫方,因此您必须有点创意。对呼叫者而不是被呼叫方做这样的事情有点奇怪,但是嘿,它是 Asterisk:通常有一种方法可以做任何你想做的事情。

一种方法是使用鲜为人知(而且有些奇怪)的G选项。从文档中引用:

如果呼叫被接听,则将主叫方转移到指定的优先级,将被叫方转移到指定的优先级加一。

  • 语境
  • 扩展
  • 优先

基本上,G选项采用主叫/被叫通道,而不是将它们桥接在一起 - 将它们都弹回拨号计划。然后,您可以在将它们放在 Bridge 中之前获得一些创意来执行 Playback 操作。以下拨号计划应该可以工作(警告:我还没有测试过这个,我正坐在沙发上的笔记本电脑上,但这应该让你接近):

[default]

exten => 1000,1,NoOp()
 same => n,Dial(SIP/alice,,G(default^bridge_and_play^1))
 same => n,Hangup()

exten => bridge_and_play,1,Goto(jump_caller,1)
 same => n,Goto(jump_called,1)
 same => n,Hangup()

exten => jump_caller,1,NoOp()
 same => n,Answer()
 same => n,Playback(tt-monkeys)
 same => n,Bridge(${bridge_this})
 same => n,Hangup()

exten => jump_called,1,NoOp()
 same => n,Set(MASTER_CHANNEL(bridge_this)=${CHANNEL})
 same => n,Wait(1000)
 same => n,Hangup()
于 2014-02-04T03:21:12.863 回答
2

您想向谁播放音频,主叫方还是被叫方?

您可以在呼叫桥接之前使用 M 标志拨号在呼叫上运行宏,它在被叫方 SIP/200000 上运行。例子:

[testInComingCalls]
exten => 30953025,1,Dial(SIP/20000,20,M(onanswer))

[macro-onanswer]
exten => s,1,Playback(hello-world)
于 2014-01-31T06:20:17.500 回答
0

您需要阅读有关 AGI 接口的信息,该接口允许通过 phpagi 使用 php 来控制拨号方案。

http://www.voip-info.org/wiki/view/Asterisk+AGI

对于播放文件使用 STREAM FILE agi 命令($agi->stream_file in php)

于 2014-02-01T12:24:01.637 回答