我一直在尝试使用本指南作为基础使用Taskrouter实现呼叫中心类型系统: https://www.twilio.com/docs/tutorials/walkthrough/dynamic-call-center/ruby/rails 项目地点是澳大利亚,如果这会影响通话详情。
此系统拨打多个号码(工作人员),我遇到了一个问题,即使在接听或取消呼叫后,电话仍将继续响铃。 即。如果Taskrouter调用了工作者A和B,并且A首先接收它们并连接到客户,但B将继续响铃。如果B然后拿起电话,他们会被挂断音打开。响铃可以持续至少几分钟,直到B拿起(我还没有检查过它是否超时)。 如果没有人接听并且呼叫只是超时并被重定向到语音邮件,则会发生类似情况。你可以想象,一个无休止的铃声很烦人,特别是当另一端没人时。
我能够使用上述指南复制此问题而无需修改(除了在本地设置的最小更改)。请注意,它不会同时拨打工作人员,而是在移动到下一个工作站之前拨打第一行几秒钟。
我对正在发生的事情的解释是,Taskrouter正在拨打工作人员,但在拨号结束时不会更新它们,只是转到工作流程的下一个阶段。它确实更新了工作人员状态,因此它知道他们是否已超时,但这并不会更新实际的呼叫。
我已经找到了解决方案,并且除了以下内容之外没有找到太多相关信息: How to make Twilio stop dialing numbers when hangup() is fired? https://www.twilio.com/docs/api/rest/change-call-state
这些不专门适用于Taskrouter,但建议可以更新和完成需要结束的呼叫。 我不太确定我是否可以实现这一点,因为它似乎对在工作流中拨打的所有呼叫使用相同的CallSid,使得很难/不可能分离每个呼叫,并且也将结束活动呼叫。 这也似乎是错误的,Taskrouter不会自动执行此操作,所以我想在我修补太多东西之前先询问这个问题。
之前是否有人遇到此问题,或者是否能够/无法使用教程代码复制它? 在测试时,我已经在座机号码上发现了更多问题,这可能只是因为手机有自己的超时/重定向。 VOIP似乎立即回应了电话,所以他们的行为有点不同。
任何帮助/建议表示赞赏,谢谢!
答案 0 :(得分:0)
解决此问题的当前建议是,当工作者希望接受入站呼叫时,不立即发出出列指令,而是在REST API上发出issue a Call instruction。
这将创建一个出站呼叫以将两个呼叫桥接在一起,因此不会同时为同一个入站呼叫者进行多次出站呼叫。
您的实施将取决于您想要实现的行为:
如果它是#2,那么在发出呼叫之前,您所说的工作人员应该接受预订(reservation.accepted
)。
如果是#1,您可以发出呼叫指令或出列指令。关键是您提供DequeueStatusCallbackUrl
或CallStatusCallbackUrl
来接收呼叫进度事件。一旦连接了其中一个出站呼叫,您将需要完成另一个相关呼叫。因此,您必须使用AssignmentCallbacks
或EventCallbacks
跟踪哪些外拨电话与哪个预订相关联,以便在您的应用中进行确定。