Twilio Voice SDK问题:无法获取呼入呼出的Call SID及客户端身份
问题
我已经在浏览器中实现Twilio Voice JS SDK,用于发起/接收通话。通过状态回调(status callbacks)能获取通话的发起、振铃、进行中及完成状态,但没法记录是哪个用户发起/接听了通话(每个用户都有独立的日志ID和客户端身份ID)。
收到呼入通话时,浏览器端语音客户端会触发incoming事件,但无法获取Call SID这类可用于关联记录的通话信息;发起呼出通话时也同样拿不到Call SID。
以下是我处理呼入通话、尝试获取Call SID的代码:
device.on("incoming", handleIncomingCall); function handleIncomingCall(call) { try{ console.log(call.properties.CallSid); } catch (err) { console.log("An error occurred while retrieving callsid properties from call object."); } // 显示呼入通话弹窗 incomingCallDiv.classList.remove("d-none"); // 为接听、拒接、挂断按钮添加事件监听 incomingCallAcceptButton.onclick = () => { acceptIncomingCall(call); }; incomingCallRejectButton.onclick = () => { rejectIncomingCall(call); }; incomingCallHangupButton.onclick = () => { hangupIncomingCall(call); }; }
控制台输出错误:
An error occurred while retrieving callsid properties from call object.
解决方案
呼入通话获取Call SID
incoming事件触发时,Call SID还未生成,得等通话状态变更或者通过通话建立后的回调来获取,也可以通过TwiML传递自定义参数关联用户标识:
- 通话建立后获取
接听通话后,监听call对象的connected事件,此时call.sid就是Call SID:
function acceptIncomingCall(call) { call.accept(); call.on('connected', () => { console.log('Call SID:', call.sid); // 这里把Call SID和当前用户的日志ID关联记录 }); }
- 通过TwiML传递自定义参数
在处理呼入的TwiML中,给Client标签添加Parameter,传递发起方的日志ID或后端已生成的Call SID:
<Response> <Dial> <Client> <Parameter name="caller_log_id" value="用户A的日志ID"/> <Parameter name="call_sid" value="{{CallSid}}"/> </Client> </Dial> </Response>
然后在浏览器的incoming事件里,通过call.parameters获取这些参数:
function handleIncomingCall(call) { const callerLogId = call.parameters.get('caller_log_id'); const callSid = call.parameters.get('call_sid'); console.log('发起方日志ID:', callerLogId, 'Call SID:', callSid); }
呼出通话获取Call SID
发起呼出时,device.connect()返回的call对象,监听其initiated事件即可拿到Call SID,也可以传递自定义参数关联当前用户:
// 发起呼出通话 const call = device.connect({ log_id: '当前用户的日志ID' }); call.on('initiated', () => { console.log('呼出Call SID:', call.sid); // 关联日志ID和Call SID做记录 });
另外更可靠的方式是在后端的状态回调接口中接收Call SID和自定义参数(比如用户日志ID),直接在后端完成记录,避免前端获取不到的情况。
内容的提问来源于stack exchange,提问作者Manish Jain
相关产品推荐
相关产品推荐

