Asterisk - 拨打电话时播放音乐

Asterisk - playing music whilst originating a call

我正在使用基于云的 Asterisk 服务器作为我的 PBX。在我目前所在的位置,互联网相当不稳定,但手机 phone 是可靠且常见的。但是,国际手机电话很贵,VOIP 电话便宜得多。

所以,我在 Asterisk 中想出了一个脚本,它拨打我的本地手机 phone:

exten => _abcd.,1,NoOp(-- Making outbound call to number ${EXTEN:4} --)
same  => n,Answer()
same  => n,Wait(1)
same  =>  n,Originate(SIP/+86[my_cell_no]@[voip_provider],exten,incoming_remote,##${EXTEN:4})
same  => n,Hangup()

假设我想拨打一个英国手机号码,+4477 之类的。我会用我的 softphone 拨 abcd+4477something。上面的脚本运行,调用我的本地单元 phone。我一回答,它就跳转到另一个分机 _##。即拨出局号码,将两者连接在一起

效果很好。然而,当我在等待本地手机连接时,我发现线路上没有任何声音。我很想播放音乐...但是我不能使用 MusicOnHold() 应用程序,因为它只是坐在那里并且在我挂断之前什么都不做!

我无法将任何 "DIAL" 样式的命令(即 "m")添加到 Originate 命令,因为它不支持它们。

是否有任何已知的方法可以异步播放(其中一个)MusicOnHold 频道,同时我的拨号计划的其余部分继续播放?

AGI 命令 SET MUSIC 会做我想要的吗?

例如

exten => _abcd.,1,NoOp(-- Making outbound call to number ${EXTEN:4} --)
same  => n,AGI(turn_music_on.sh)
same  => n,Answer()
.....etc.

我正在使用 Asterisk 1.8,如果更新版本 fixes/changes MusicOnHold 行为,那么这将是公认的答案(但文档似乎表明它是相同的)。

您可以拨打本地频道(拨号规则)。之后在 dialplan 中你可以使用 m of dial 命令。

https://www.voip-info.org/wiki/view/Asterisk+local+channels

same  =>  n,Originate(Local/[my_cell_no]@out/n,exten,incoming_remote,##${EXTEN:4})

[out]
exten => _X.,1,Dial(SIP/+86${EXTEN}@[voip_provider],,m)