无法将呼叫任务出队并连接至JavaScript客户端设备的问题求助
问题排查与解决建议
针对你遇到的呼叫保持、JavaScript客户端无响应的问题,以下是几个关键排查和修复点:
确保Device监听
incoming事件
Twilio Device必须注册incoming事件处理器,才能接收并处理出队后的呼叫。示例代码:device.on('incoming', function(connection) { // 可在此添加来电提示逻辑,直接接受呼叫 connection.accept(); });若缺少这个监听逻辑,即便Worker已接受任务,客户端也不会有任何反应。
修正Worker的
contact_uri格式
当目标是Twilio Web客户端时,contact_uri必须以client:开头,后跟你的标识值。正确设置方式:readyWorker.setAttributes({ contact_uri: `client:${identity}` });直接填写标识会导致Twilio无法识别目标类型,无法完成呼叫路由。
Dequeue指令补充
from参数
在分配回调的响应中,建议添加from参数指定来电号码(可从回调请求的From字段获取),确保呼叫上下文正确:res.status(200).json({ instruction: "dequeue", to: res.locals.twilioIdentity, from: req.body.From });验证AccessToken的权限范围
生成AccessToken时,必须同时包含Client Grant和TaskRouter Worker Grant,保证Device和Worker都能正常授权:const twilio = require('twilio'); const { ClientGrant, TaskRouterWorkerGrant } = twilio.jwt; const token = new twilio.jwt.AccessToken( process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_API_KEY, process.env.TWILIO_API_SECRET, { identity: res.locals.twilioIdentity } ); // 添加Client Grant用于Device功能 const clientGrant = new ClientGrant({ serviceSid: process.env.TWILIO_TWIML_APP_SID, endpointId: res.locals.twilioIdentity }); token.addGrant(clientGrant); // 添加Worker Grant用于TaskRouter Worker功能 const workerGrant = new TaskRouterWorkerGrant({ workerSid: process.env.TWILIO_WORKER_SID, workspaceSid: process.env.TWILIO_WORKSPACE_SID }); token.addGrant(workerGrant); const tokenJwt = token.toJwt();检查Twiml应用与入队配置
确认呼入电话处理端点返回的Twiml中,<Enqueue>标签正确关联你的Workflow SID:<Response> <Enqueue workflowSid="YOUR_WORKFLOW_SID">Incoming Call</Enqueue> </Response>同时Twiml应用的「Voice Request URL」需指向该处理端点。
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

