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

Expo React Native(iOS)中Twilio语音通话无法正常工作

Expo React Native中Twilio Voice调用voice.connect无响应的排查方案

1. 验证后端生成的令牌有效性

  • 检查AccessToken构造参数: 确认AccessToken使用的是Twilio API Key 和 API Secret,而非Account的AuthToken。你的代码中config.twilioAuthtoken如果是Account AuthToken,会导致令牌无效,Twilio会静默拒绝请求。
  • 校验VoiceGrant配置: 确认outgoingApplicationSid对应的Twiml应用在Twilio控制台中配置正确:
    • Twiml应用的Voice Request URL必须能返回合法的Twiml响应,比如收到请求时返回包含<Dial>标签的XML:
      <Response>
        <Dial>{{To}}</Dial>
      </Response>
      
    • 确保该URL公网可访问,且能正确接收Twilio的POST请求并返回200状态码。
  • 用Twilio工具验证令牌: 把后端生成的JWT令牌拿到Twilio控制台的Token Validator工具中校验,确认令牌包含有效的VoiceGrant,且identity、ttl等参数符合预期。

2. 前端配置与权限检查

  • Expo权限配置: 在app.json中添加必要权限:
    • iOS需添加麦克风权限说明:
      "ios": {
        "infoPlist": {
          "NSMicrophoneUsageDescription": "需要访问麦克风进行语音通话"
        }
      }
      
    • Android需添加录音和网络权限:
      "android": {
        "permissions": ["RECORD_AUDIO", "MODIFY_AUDIO_SETTINGS", "INTERNET"]
      }
      
  • Voice实例初始化与全局监听: 确保voice实例正确初始化,添加全局错误监听捕获隐性问题:
    import { TwilioVoice, TwilioCall } from '@twilio/voice-react-native';
    
    const voice = new TwilioVoice();
    voice.on(TwilioCall.Event.Error, (error) => console.error('Voice全局错误:', error));
    voice.on('ready', () => console.log('Voice实例已就绪'));
    
  • 麦克风权限确认: 在物理设备上检查应用是否已获取麦克风权限,无权限会导致语音调用静默失败。

3. 前端调用逻辑修正

  • 避免同一身份自呼: 你的代码中后端identity和前端To参数都是+916282952623,Twilio默认不允许客户端给自己拨打语音电话,需修改To为另一个验证过的号码或Twilio号码。
  • 完善事件监听: 补充更多通话阶段的事件监听,排查连接细节:
    const outgoingCall = await voice.connect(route.params.token, {
      params: {
        To: "目标号码",
        recipientType: "ios",
      },
    });
    outgoingCall.on(TwilioCall.Event.Disconnected, (data) => 
      console.log('通话断开:', data)
    );
    outgoingCall.on(TwilioCall.Event.Ringing, () => 
      console.log('对方正在响铃')
    );
    

4. 后端代码优化

  • 完善错误日志: 替换模糊的错误日志,捕获详细错误信息:
    catch (error) {
        context.logger.error("createVoiceToken", "生成语音令牌失败", { 
          message: (error as Error).message, 
          stack: (error as Error).stack 
        });
    }
    
  • 校验配置参数: 确认config中accountSid、twilioApiKey、twilioTwimlAppSid等参数与Twilio控制台中的一致,避免拼写错误或无效值。

内容的提问来源于stack exchange,提问作者abhishek p s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:13:12