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

如何向TwiML传递动态值实现ASP.NET Core Twilio自定义外呼

实现方案(完全适配现有架构,无需大规模改动)

1. 前端传递自定义参数

调用Twilio.Device.connect()时,将用户输入的号码、需要指定的CallerID作为自定义参数传入,参数会由Twilio自动透传给你的TwiML应用绑定的Request URL接口:

// 假设用户输入的号码存储在inputPhone变量,指定的callerId存储在selectedCallerId变量
Twilio.Device.connect({
  targetPhone: inputPhone.trim(),
  callerId: selectedCallerId.trim()
});

你原有后端生成Token的逻辑不需要做任何调整。

2. 调整TwiML生成接口,动态返回内容

你原来的TwiML是硬编码内容,现在将对应的接口改为接收Twilio传递的参数、动态生成TwiML即可。Twilio调用你的Request URL时会以表单参数形式带上前端传入的自定义字段,ASP.NET Core侧示例代码如下:

using Twilio.TwiML;
using Twilio.TwiML.Voice;

[HttpPost]
public IActionResult GenerateTwiML(string targetPhone, string callerId)
{
    // 安全校验:1. 校验callerId是否是你Twilio账号下的已验证号码,防止滥用
    // 2. 校验targetPhone格式是否符合E.164标准,避免发起非法呼叫
    var response = new VoiceResponse();
    var dial = new Dial(callerId: callerId);
    dial.Number(targetPhone);
    response.Append(dial);
    return Content(response.ToString(), "application/xml");
}

可选替代方案(仅当不需要网页端作为软电话发起通话时使用)

如果不需要通过网页端接听/控制通话,也可以直接让前端把号码传给你自己的后端接口,后端直接调用Twilio Rest API发起呼叫,无需依赖TwiML应用回调,示例代码:

using Twilio;
using Twilio.Rest.Api.V2010.Account;

[HttpPost]
public IActionResult MakeCall(string targetPhone, string callerId)
{
    var accountSid = ConfigurationManager.AppSettings["TwilioAccountSid"];
    var authToken = ConfigurationManager.AppSettings["TwilioAuthToken"];
    TwilioClient.Init(accountSid, authToken);
    // TwiML可直接内联,也可指定一个返回TwiML的接口地址
    var call = CallResource.Create(
        to: new Twilio.Types.PhoneNumber(targetPhone),
        from: new Twilio.Types.PhoneNumber(callerId),
        twiml: new Twilio.Types.Twiml("<Response><Say>呼叫已接通</Say></Response>")
    );
    return Ok(call.Sid);
}

内容的提问来源于stack exchange,提问作者Hemant Sisodia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:21:03