如何检测Twilio Voice Client断开连接并设置Task Router Worker为不可用
捕获Twilio Voice Client注册/注销事件的方案
Twilio Voice Client确实没有原生的注册/注销Webhook,但可以通过以下几种方式实现检测客户端断开、更新Task Router Worker状态的需求:
1. 客户端侧事件主动上报
在Voice Client的代码中监听连接状态变化,当检测到断开时主动通知后端,再由后端更新Worker状态:
- JavaScript客户端可监听
device.disconnect事件,触发时调用你的后端接口:device.on('disconnect', function(connection) { // 发送请求到你的后端,标记对应Worker为不可用 fetch('/api/update-worker-status', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ workerSid: 'YOUR_WORKER_SID' }) }); }); - 补充:如果客户端意外崩溃(如浏览器强制关闭),这种方法可能失效,建议搭配心跳机制做兜底。
2. Task Router Activity超时机制
利用Task Router的Activity超时功能实现自动状态切换:
- 创建一个「在线」状态的Activity,设置合理的超时时间(比如30秒)
- 让Voice Client每隔一段时间(比如20秒)向你的后端发送心跳请求,后端调用Task Router API刷新Worker的Activity超时时间
- 若客户端断开,心跳停止,超时后Worker会自动切换到预设的「不可用」Activity
3. 借助Call Status Webhook间接判断
如果客户端用于接听来电,可通过通话结束后的Call Status Webhook触发状态更新:
- 当Twilio发送
call.status=completed的Webhook时,在你的后端处理逻辑中,关联该通话对应的Worker,将其标记为不可用 - 局限性:仅适用于通话结束后的断开场景,无法覆盖未接来电时的主动注销情况
内容的提问来源于stack exchange,提问作者JonathanT
相关产品推荐
相关产品推荐

