当用户拨打我的 pbx 时,他需要输入另一个电话号码。然后星号应该呼叫那个号码,当那个号码的所有者接听电话时,星号应该播放声音。
拨打我的 pbx 的用户,可以实时收听另一个呼叫,他会听到 pbx 播放的声音和用户的声音。
做这个的最好方式是什么?
最好(也是最简单)的方法 - 让用户参加会议并为同一个会议创建另外 2 个呼叫。
一个播放声音,一个呼叫其他用户。
有关如何创建呼叫,请参见:
http://www.voip-info.org/wiki/view/Asterisk+auto-dial+out
Chanspy 将创建类似于会议的结构,但它更简单的控制(静音/取消静音)会议。
这是我的解决方案
*我用 AEL 写的,更容易理解
首先我假设你得到了你想要播放的被叫号码和文件:
context Start
{
catch s {
Wait(1);
...
__NumberToDial=<Number that caller picked>;
FileName=<File you want to play>;
...
// I used SHARED variables to pass all the necessary data to sub channel
SHARED(FileName)=${FileName};
__Channel="${CHANNEL(name)}";
Dial(Local/${CALLERID(num)}@Originate/n,,g);
}
}
context Originate {
_X. => {
Originate(SIP/<YourDialOutTrunk>/${NumberToDial},exten,Play,${Channel},1);
if (${ORIGINATE_STATUS}!=SUCCESS)
{
//do stuff if not connected...
}
else
ChanSpy(,qsSg(${Channel}));
}
}
context Play {
_X. => {
Channel="${CUT(EXTEN,?,1)}";
Set(SPYGROUP=${Channel});
FileName=${SHARED(FileName,${Channel})};
Playback(${FileName});
}
}
*如果你想允许耳语/谈话,请添加w
选项到 ChanSpy
我没有测试这个耳语!
您需要在任何地方添加 catch => h 以及您需要的其余逻辑。
Whit this 你会得到很好的时机。如果呼叫者决定挂断,唯一的问题是杀死 Originate 频道,我已经在 AMI 上发送频道 kill 并使用 AGI 脚本发送频道名称...... bla bla ... :)
希望能帮助到你 :)