这是拨号计划
[testInComingCalls]
exten => s,1,Answer
exten => 30953025,1,Dial(SIP/20000,20)
我想在有人接听电话后立即播放音频文件..
请给我一些想法如何调用 php 文件,发送输入并根据输出转发调用。
由于大多数拨号选项都作用于被叫方,而不是主叫方,因此您必须有点创意。对呼叫者而不是被呼叫方做这样的事情有点奇怪,但是嘿,它是 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()
您想向谁播放音频,主叫方还是被叫方?
您可以在呼叫桥接之前使用 M 标志拨号在呼叫上运行宏,它在被叫方 SIP/200000 上运行。例子:
[testInComingCalls]
exten => 30953025,1,Dial(SIP/20000,20,M(onanswer))
[macro-onanswer]
exten => s,1,Playback(hello-world)
您需要阅读有关 AGI 接口的信息,该接口允许通过 phpagi 使用 php 来控制拨号方案。
http://www.voip-info.org/wiki/view/Asterisk+AGI
对于播放文件使用 STREAM FILE agi 命令($agi->stream_file in php)