如何向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
相关产品推荐
相关产品推荐

