呼叫保持(排队)时如何处理呼叫断开
how to handle call disconnection while call is on hold (queued)
我正在关注 以保持和恢复来自虚拟呼叫者的呼叫。它有效,但我还面临两个问题。仅供参考,设置完全相同。
第一个:
第一轮 Hold, Resume 完美运行。在保持状态下,我传递了 CallSid,然后我将 <Enqueue>
TwiMl 应用于子呼叫(在我的情况下只有一个)。
client.calls.list({ parentCallSid: callId }).then(calls => {
calls.forEach(call => {
call
.update({ twiml: '<Response><Enqueue>ADMIN_ID</Enqueue></Response>' });
});
});
并且在恢复时,我将呼叫者的 Sid 更新为从队列中再次拨号
client
.calls(callId)
.update({ twiml: '<Response><Dial action="/holding"><Queue>ADMIN_ID</Queue></Dial></Response>' })
它在第一轮中表现完美。当我第二次点击 hold
时,它在来电端显示 We are sorry, some application error occurred. Good Bye!
并断开连接。在接收端,它会播放保持音乐。我做错了什么?
第二个:
我看到 <Dial>
中的设置 action
使其保持活动状态并在我的情况下重复操作 TwiMl。但是在没有任何 hold
的正常情况下,如果接收器断开连接,我作为呼叫者会不断重复听到动作并且呼叫不会挂断。同样在保持期间,如果主叫方或被叫方挂断电话,另一个人只会停留在当前状态。有什么方法可以用上面的设置解决这个问题吗?
通过使用 REST API 检查调用状态解决了问题。
client.calls.list({ parentCallSid: callId }).then(calls => {
calls.forEach(call => {
if (call.status !== 'in-progress') {
client
.calls(callId)
.update({ status: 'completed' })
}
});
});
F.e。上面的代码检查父 Sid(虚拟呼叫者)是否断开连接,在这种情况下它会断开子呼叫。
我正在关注
第一个:
第一轮 Hold, Resume 完美运行。在保持状态下,我传递了 CallSid,然后我将 <Enqueue>
TwiMl 应用于子呼叫(在我的情况下只有一个)。
client.calls.list({ parentCallSid: callId }).then(calls => {
calls.forEach(call => {
call
.update({ twiml: '<Response><Enqueue>ADMIN_ID</Enqueue></Response>' });
});
});
并且在恢复时,我将呼叫者的 Sid 更新为从队列中再次拨号
client
.calls(callId)
.update({ twiml: '<Response><Dial action="/holding"><Queue>ADMIN_ID</Queue></Dial></Response>' })
它在第一轮中表现完美。当我第二次点击 hold
时,它在来电端显示 We are sorry, some application error occurred. Good Bye!
并断开连接。在接收端,它会播放保持音乐。我做错了什么?
第二个:
我看到 <Dial>
中的设置 action
使其保持活动状态并在我的情况下重复操作 TwiMl。但是在没有任何 hold
的正常情况下,如果接收器断开连接,我作为呼叫者会不断重复听到动作并且呼叫不会挂断。同样在保持期间,如果主叫方或被叫方挂断电话,另一个人只会停留在当前状态。有什么方法可以用上面的设置解决这个问题吗?
通过使用 REST API 检查调用状态解决了问题。
client.calls.list({ parentCallSid: callId }).then(calls => {
calls.forEach(call => {
if (call.status !== 'in-progress') {
client
.calls(callId)
.update({ status: 'completed' })
}
});
});
F.e。上面的代码检查父 Sid(虚拟呼叫者)是否断开连接,在这种情况下它会断开子呼叫。