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

.NET Core+ReactJS下如何实现浏览器响铃接收Twilio来电

如何在.NET Core + ReactJS项目中实现浏览器接收Twilio来电并响铃

要实现浏览器接收Twilio来电并触发响铃,需要从后端TwiML路由配置和前端Twilio Device初始化/事件监听两部分入手,以下是具体解决方案:


1. 调整.NET Core后端的TwiML逻辑

当你的Connect方法收到Twilio的来电Webhook,且callingDeviceIdentity为空时,需要生成正确的TwiML指令,让Twilio将呼叫路由到浏览器客户端(而非直接播放语音)。

修改if分支的代码如下:

if (string.IsNullOrEmpty(callingDeviceIdentity))
{
    // 替换为你的浏览器客户端身份标识(需与前端Twilio Device的identity一致)
    // 实际项目中可根据ToNumber关联到对应的用户身份
    var clientIdentity = "your_browser_client_id";
    var client = new Client(clientIdentity);
    dial.Append(client);
    response.Append(dial);
    
    return TwiML(response);
}

这段代码的核心是通过Client对象指定要路由的浏览器客户端身份,Twilio会自动将呼叫推送到对应identity的在线Device。


2. 前端ReactJS的Twilio Device配置与响铃逻辑

前端需要正确初始化Twilio Voice SDK的Device,监听来电事件并触发响铃。

2.1 安装依赖

首先安装Twilio Voice SDK:

npm install @twilio/voice-sdk

2.2 初始化Device并监听来电

在React组件中实现以下逻辑:

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

// 从后端获取Twilio Access Token(后端需实现生成Token的接口,包含identity)
async function fetchTwilioToken() {
    const res = await fetch('/api/Call/GetAccessToken', { method: 'GET' });
    const data = await res.json();
    return data.token;
}

// 初始化Twilio Device
async function initCallDevice() {
    const token = await fetchTwilioToken();
    const device = new Device(token, {
        logLevel: 1, // 开启日志便于调试
    });

    // Device就绪事件
    device.on('ready', () => {
        console.log('Twilio Device已在线,等待来电');
    });

    // 来电事件监听
    device.on('incoming', (call) => {
        console.log(`收到来自${call.parameters.From}的来电`);
        
        // 播放响铃音(替换为你的响铃音频路径)
        const ringtone = new Audio('/sounds/ringtone.mp3');
        ringtone.loop = true;
        ringtone.play().catch(err => console.error('播放响铃失败:', err));

        // 弹出接听/拒绝提示(可替换为自定义UI)
        if (confirm(`有来自${call.parameters.From}的来电,是否接听?`)) {
            call.accept();
            ringtone.pause();
        } else {
            call.reject();
            ringtone.pause();
        }
    });

    // 错误事件监听
    device.on('error', (err) => {
        console.error('Twilio Device异常:', err);
    });

    return device;
}

// 组件挂载时初始化Device
useEffect(() => {
    initCallDevice();
}, []);

3. 关键排查点(解决incoming事件不触发的问题)

如果前端的device.on('incoming')始终不触发,检查以下几点:

  • 身份一致性:后端TwiML中Client的身份标识,必须和前端Access Token中的identity完全一致
  • Token有效性:确保后端生成的Access Token包含正确的权限(Voice客户端权限)且未过期
  • Webhook配置:在Twilio控制台确认你的号码的来电Webhook指向正确的Connect接口
  • 浏览器权限:确保浏览器已授予麦克风访问权限(Twilio Device需要麦克风权限才能正常工作)
  • Twilio日志:查看Twilio控制台的「调试控制台」,检查呼叫路由过程中是否有错误信息

内容的提问来源于stack exchange,提问作者Himanshu Aggarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:02:03