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

Twilio预飞测试failed事件返回空无法获取指定连接错误类型问题咨询

问题根因说明

  1. 你当前看到failed回调返回空对象,首先是JS的Error对象序列化机制导致的:标准Error实例的name、message等属性默认不可枚举,直接对Error对象做JSON序列化输出的结果就是{},并非Twilio没有返回错误信息。
  2. 你当前模拟封禁IP的场景触发的是媒体等待超时错误,已经走到了mediaSubscribed阶段,说明信令层已经完成建联,不会触发你提到的SignalingServerBusyError这类信令层返回的显式错误类型,只有对应触发场景出现时才会返回对应的自定义错误。

能否捕获指定错误类型

可以正常捕获,这类自定义错误均为Twilio SDK主动抛出的带特定标识的Error实例,只有对应触发条件满足时才会返回:

  • 信令建联阶段失败会返回SignalingConnectionError、SignalingServerBusyError等信令类错误
  • 信令建联成功、媒体协商/连接阶段失败会返回MediaConnectionError等媒体类错误
  • 房间校验阶段失败会返回RoomMaxParticipantsExceededError、RoomNotFoundError等房间类错误

修复方案

第一步:修正错误信息提取逻辑

修改failed回调的错误处理代码,显式提取Error实例的核心字段,避免序列化后为空:

this.preflightTest.on('failed', (error: Error) => {
  // 显式提取Twilio错误的核心字段,自定义错误的name会直接对应你需要的错误类型名
  const formattedError = {
    name: error.name,
    message: error.message,
    code: (error as any).code
  };
  callback(PREFLIGHT_EVENT.FAILED, { error: formattedError });
});

修改后你就能正常拿到错误的类型名、错误描述和错误码,匹配官方列出的错误类型。

第二步:对应场景模拟验证

如果需要验证指定错误类型,可以对应调整模拟方式:

  • 验证信令类错误:发起预飞请求前就封禁Twilio信令服务器域名/IP,或使用超限/无效的Token,或短时间高频发起请求触发限流
  • 验证媒体类错误:在预飞请求走到mediaAcquired阶段后封禁媒体服务器IP,中断媒体连接
  • 验证房间类错误:传入不存在的房间ID,或传入的房间已达人数上限的相关Token参数

第三步:优化状态判断逻辑

你当前基于progress事件的可达性判断逻辑可以结合错误信息进一步优化:

  • 若预飞失败时未触发mediaAcquired进度事件,结合错误类型即可判定为信令网关不可达
  • 若预飞失败时已触发mediaAcquired但未触发dtlsConnected/peerConnectionConnected,结合错误类型即可判定为TURN服务器不可达或媒体连接失败

内容的提问来源于stack exchange,提问作者Yuuta Moriyama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:45:06