对于我正在努力解决的问题,我喜欢关于我的twilio设置的一些建议.
概述:
我们系统中的每个用户都配置了一个twilio电话号码,他们可以将这些电话号码发送给任何人与他们联系.
如果personA通过配置的twilio电话号码联系我们系统中的用户(userB),我们希望将它们与userB连接(如果可用).如果userB不可用,我们希望将personA指向语音邮件.换句话说,我们希望确保我们能够控制语音邮件体验和语音邮件本身,以便我们可以将其存储在我们的系统中,而不是将语音邮件保留在用户B的设备上.
当前解决方案
PersonA的来电被添加到队列中.同时,系统拨出userB.
要求UserB按1接受呼叫.从UserB显式输入的原因是检测UserB是否可用于应答呼叫.(例如,如果对UserB的呼叫转到他们的个人语音邮件,则不会发生明确的数字输入,告诉我们他们无法回答.)
如果UserB未在指定的时间内输入1,则将PersonA定向到语音邮件.
如果UserB按1,则修改对UserB的调用(通过twilio rest api)以拨打PersonA所在的队列以连接UserB和PersonA.
当前解决方案的问题:
在该解决方案中,何时转移personA对语音邮件的呼叫的控制由对UserB的呼叫的结果控制,这似乎是次优的.例如,我们可能根本无法呼叫UserB.在这种情况下,personA将无限期地留在队列中.
在这种情况下我想要发生的是轮询队列人员A进入以检查队列中的时间,并且如果队列中的时间大于阈值,则将呼叫转移到语音邮件.但是,似乎不可能准确地知道呼叫在队列中无人值守多长时间,因为:
in-progress
即使呼叫者正在收听等待音乐,队列中呼叫的状态也是如此.这与PersonA的呼叫已被回答的状态相同.
如果UserB拨入队列,则当桥接方断开连接时,呼叫才会出列,而PersonA呼叫的呼叫状态不会发生变化,表明它们已连接到UserB.
问题
我理解为什么我无法轮询呼叫队列以转移对语音邮件的呼叫正确吗?
我是否应该将PersonA召集到会议中,如果UserB可用,将他/她连接到PersonA所在的会议?
如果我使用会议设置,那么最简单的方法是检测PersonA在会议中等待多长时间,以便在UserB从未加入会议时将PersonA的呼叫转移到语音邮件?
philnash.. 16
Twilio开发者传道者在这里.
我想你可能在队列中有一些过于复杂的东西.您实际上可以提供消息并在原始呼叫中收集,而无需自己拨出电话并最终连接两个电话.
这是如何做:
您的来电TwiML应如下所示:
ONWARD DIAL NUMBER
给
名词提供URL将在连接两个调用之前播放该URL的TwiML内容.您可以
在此处使用以确保用户已应答呼叫而不是他们自己的语音邮件系统:
/whisperYou are receiving a call, press any key to accept
将/gather_result
需要制定出一个键是否被按下.如果它被按下,那么我们将进入调用,我们可以使用空响应,因为这会将控制权恢复到原始状态
.如果没有按下任何数字,我们会挂断此端,这会导致原始文件
完成并指向其action
属性.(我不确定你使用的语言是什么,但这里有一些Rubyish伪代码)
/gather_resultif params["Digits"] and params["Digits"].empty? end
/call_complete
一旦
行动结束,就会被召唤.如果此时呼叫状态为"已完成"或"已应答",则用户已接听电话并正确回应耳语,我们可以挂机.如果是其他任何内容,我们会将呼叫重定向到我们的语音邮件记录器.
/call_completeif params["DialCallStatus"] == "completed" or params["DialCallStatus"] == "answered" else The call could not be answered this time, please leave a message end
最后,您的/record_complete
操作可以使用录制URL执行任何操作并挂断电话.
/record_complete
这可以通过Twimlets实现,如本博文中所述.如果这有帮助,请告诉我.
Twilio开发者传道者在这里.
我想你可能在队列中有一些过于复杂的东西.您实际上可以提供消息并在原始呼叫中收集,而无需自己拨出电话并最终连接两个电话.
这是如何做:
您的来电TwiML应如下所示:
ONWARD DIAL NUMBER
给
名词提供URL将在连接两个调用之前播放该URL的TwiML内容.您可以
在此处使用以确保用户已应答呼叫而不是他们自己的语音邮件系统:
/whisperYou are receiving a call, press any key to accept
将/gather_result
需要制定出一个键是否被按下.如果它被按下,那么我们将进入调用,我们可以使用空响应,因为这会将控制权恢复到原始状态
.如果没有按下任何数字,我们会挂断此端,这会导致原始文件
完成并指向其action
属性.(我不确定你使用的语言是什么,但这里有一些Rubyish伪代码)
/gather_resultif params["Digits"] and params["Digits"].empty? end
/call_complete
一旦
行动结束,就会被召唤.如果此时呼叫状态为"已完成"或"已应答",则用户已接听电话并正确回应耳语,我们可以挂机.如果是其他任何内容,我们会将呼叫重定向到我们的语音邮件记录器.
/call_completeif params["DialCallStatus"] == "completed" or params["DialCallStatus"] == "answered" else The call could not be answered this time, please leave a message end
最后,您的/record_complete
操作可以使用录制URL执行任何操作并挂断电话.
/record_complete
这可以通过Twimlets实现,如本博文中所述.如果这有帮助,请告诉我.