我正面临这样一种情况:如果接收呼叫的浏览器窗口被重新加载,则实时Twilio呼叫将被丢弃。有没有一种方法可以在不影响实时通话的情况下克服这种挫折?
这里是Twilio Evangelist。
根据你的问题,我假设你正在使用Twilio客户端JavaScript SDK?如果确实是这样,那么不幸的是,如果托管SDK的页面被重新加载,浏览器和Twilio之间的连接将断开,因为浏览器正在重新加载所有内容,包括JavaScript SDK。
我可以想到一些不同的技术,你可以用它们来帮助避免页面重新加载,还有一个想法可以帮助你恢复调用,当浏览器的连接因为页面重新加载而断开时。这在很大程度上取决于你的特定应用和你试图为用户创造的体验。
所以为了避免重新加载页面:
1)使用AJAX请求你的服务器,以避免页面重新加载。如果页面包含表单之类的内容,或者希望使用来自服务器的数据更新页面内容,可以使用AJAX请求(而不是普通的整页回发)向服务器提交表单,或者从服务器检索数据。这将有助于避免在这两种情况下重新加载整个页面。2)使用iFrame来承载页面内容,然后将Twilio SDK放在父页面(定义iFrame的那个)中。这将允许您重新加载iframe中托管的内容,而不必重新加载整个主机页面,从而避免重新加载Twilio库。这样做的缺点是iframe中的内容与其主机之间的通信可能会很快变得非常混乱。
这两种技术都不是万无一失的。显然,用户总是可以点击浏览器上的刷新按钮,这将导致连接断开。
在页面被重新加载的情况下,从Twilio到浏览器的连接被断开,一个想法是利用Twilios的功能来帮助重新连接调用者。当一个用户拨打你的twilio电话号码,而不是将他们直接连接到浏览器中运行的twilio客户端(通过使用<Client>
拨号客户端),而是将呼叫者拨打到会议<Conference>
,然后让浏览器客户端连接到同一个会议。这样做的好处是,如果浏览器断开连接,原来的呼叫者不会被挂断,他们仍然会坐在会议室里。只要您保存了会议SID或名称,您就可以让浏览器客户端重新连接到该会议。