我见过同一问题的其他问题,但答案是相互矛盾的,没有一个对我有用
我想将来电转移到手机,但不是立即:仅当用户在选定状态下发送 DTMF 3 时,所以我认为使用
AppEvents.CallAlerting
不适合我的情况:
然后我尝试了以下解决方案(从menuState选择单击3调用fwdState)
function fwdCall(e)
{
Call.removeEventListener(CallEvents.PlaybackFinished, fwdCall);
const callerId=Call.callerid();
const calledId='393333333333';
call = VoxEngine.callPSTN(calledId, callerId);
call.addEventListener(CallEvents.Connected, (e) => {
VoxEngine.sendMediaBetween(e.call, Call);
});
call.addEventListener(CallEvents.Failed, VoxEngine.terminate);
call.addEventListener(CallEvents.Disconnected, VoxEngine.terminate);
}
function fwdCall2(e)
{
Call.removeEventListener(CallEvents.PlaybackFinished, fwdCall2);
const callerId=Call.callerid();
const calledId='393333333333';
call = VoxEngine.callPSTN(calledId, callerId,{ followDiversion: true });
VoxEngine.easyProcess(e.call, call);
call.addEventListener(CallEvents.Failed, VoxEngine.terminate);
call.addEventListener(CallEvents.Disconnected, VoxEngine.terminate);
}
const fwdState = new IVRState('callforward', {
type: 'noinput',
prompt: {
play: 'please_wait_while_we_transfer.mp3'
}
},
(data) =>
{
Call.addEventListener(CallEvents.PlaybackFinished, fwdCall);
},
(data) =>
{
fwdState.enter(Call);
}
);
但是使用 fwdCall 和 fwdCall2 我都会收到以下错误:
JS error: Call is not a constructor in /application.js:442:23
所以我测试了 voximplant 网站上提出的示例这里
但是(在第 3 行评论
let Call
之后)
我遇到与上面相同的错误。
哪种方法是正确的?
谢谢
嗯...
似乎两种解决方案都是正确的并且有效..
事实上错误不在这些函数中,而是在场景的开始处: 在所有示例中,voximplant 使用
Call
作为默认变量来指定调用:
Call = e.call
但是
Call
是由他们的例程内部使用的,当需要管理超过 1 个调用时,它会返回错误。
解决方案非常简单,在第一个听众中,通常是
VoxEngine.addEventListener(AppEvents.CallAlerting, (e) => {
使用
call = e.call;
代替 Call = e.call;
就是这样。