You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中使用Twilio Voice SDK无法检测来电问题求助

排查Twilio Voice SDK来电第一声铃后断开的问题

以下是针对你遇到的问题的具体排查和解决步骤:

1. 验证TwiML应用的来电Webhook配置

  • 确认TwiML应用中Voice > 来电的Webhook URL完全正确,并且请求方法(GET/POST)和你的服务器端处理逻辑匹配。外呼正常不代表来电Webhook配置无误,两者的Webhook可能是分开设置的。

2. 检查服务器返回的TwiML内容

当Twilio收到来电时,会向配置的Webhook发送请求,服务器必须返回合法的TwiML指令才能将来电转接到你的Angular客户端。正确的TwiML示例如下:

<Response>
  <Dial>
    <Client>your-client-identity</Client>
  </Dial>
</Response>
  • 确保TwiML格式正确,没有语法错误;<Client>标签中的身份必须和你生成Token时使用的identity完全一致。
  • 可以通过Twilio控制台的调试器查看Webhook的请求和响应详情,确认返回的TwiML是否符合要求。

3. 确认客户端的来电监听逻辑

检查Angular代码中是否正确监听了来电事件并处理接听动作:

import { Device } from '@twilio/voice-sdk';

// 初始化Device(确保token是有效且包含正确VoiceGrant的)
const device = new Device(yourToken, {
  logLevel: 'debug' // 开启调试日志,方便排查
});

// 必须监听incoming事件
device.on('incoming', (connection) => {
  console.log('收到来电:', connection);
  // 这里可以添加UI提示,让用户手动接听,或者自动接听
  connection.accept(); // 关键:必须调用accept()才能建立通话
});

// 监听错误事件,排查连接问题
device.on('error', (error) => {
  console.error('Device错误:', error);
});

如果没有监听incoming事件,或者未调用connection.accept(),Twilio会在等待超时后挂断来电。

4. 检查Token生成的正确性

生成Voice Grant时,除了incomingCall: true,还要确保:

// 后端生成Token的示例(Node.js)
const voiceGrant = new VoiceGrant({
  incomingAllow: true, // 注意:部分版本的库可能用incomingCall,确认参数名是否匹配你的SDK版本
  outgoingApplicationSid: '你的TwiML应用SID',
  identity: 'client-identity' // 必须和TwiML中<Client>的身份一致
});
  • 确认你的SDK版本(^2.11.2)对应的Voice Grant参数名是否正确,避免参数名不匹配导致权限失效。

5. 网络与浏览器权限排查

  • 确保客户端浏览器已授予麦克风权限,接听来电需要权限支持,权限缺失会导致连接失败。
  • 检查是否有防火墙、代理或浏览器插件阻止了Twilio的WebSocket连接(来电通知依赖WebSocket推送),可以开启Device的logLevel: 'debug'查看连接日志。

6. 查看Twilio调试器日志

登录Twilio控制台进入调试器,筛选最近的来电相关事件,里面会包含详细的错误码和原因(比如Webhook请求超时、TwiML无效、客户端未在线等),这是定位问题最直接的方式。

内容的提问来源于stack exchange,提问作者Tirth bhavsar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:26:02