如何通过STATUS CALLBACK URL获取Twilio CallStatus及参数接收方式?
嗨,我来帮你搞定Twilio呼叫状态回调的问题!
接收Twilio呼叫状态参数的具体方法
首先明确:当呼叫状态发生变化时(包括无人接听的情况),Twilio会向你设置的STATUS CALLBACK URL发送一个POST请求,所有呼叫相关的状态信息都会通过表单参数传递过来。针对你用的C# Web API场景,有两种直观的接收方式:
1. 直接读取Form表单参数
Twilio发送的是application/x-www-form-urlencoded格式的请求,你可以直接从Request.Form里提取需要的参数,核心的CallStatus就是你要找的状态标识:
[System.Web.Http.HttpPost] public void TwilioCallbackEvent() { // 获取核心状态参数 string callStatus = Request.Form["CallStatus"]; string callSid = Request.Form["CallSid"]; // 唯一呼叫ID,方便后续排查问题 // 按需获取其他常用参数 string fromNumber = Request.Form["From"]; string toNumber = Request.Form["To"]; string duration = Request.Form["Duration"]; // 根据状态处理业务逻辑 switch(callStatus) { case "no-answer": // 这就是你要处理的「无人接听」场景 break; case "completed": // 呼叫正常完成 break; case "busy": // 对方占线 break; case "failed": // 呼叫失败 break; // 还有ringing(响铃中)、in-progress(通话中)等状态 } }
2. 使用模型绑定(更优雅的写法)
你可以定义一个对应参数的模型类,让框架自动帮你完成参数绑定,代码会更整洁易维护:
// 定义Twilio回调参数模型 public class TwilioCallCallbackModel { public string CallStatus { get; set; } public string CallSid { get; set; } public string From { get; set; } public string To { get; set; } public string Duration { get; set; } // 可根据需求添加更多参数,比如AccountSid、ApiVersion等 } // 控制器方法 [System.Web.Http.HttpPost] public void TwilioCallbackEvent(TwilioCallCallbackModel model) { if (model != null) { if (model.CallStatus == "no-answer") { // 处理无人接听的业务逻辑 } } }
几个关键注意事项
- 你的回调URL必须是公网可访问的,Twilio无法访问本地localhost地址,开发阶段可以用内网穿透工具把本地端口映射到公网。
- Twilio传递的所有参数都是字符串类型,比如呼叫未完成时
Duration的值会是"0"。 - 一定要确保你在Twilio应用或呼叫请求中正确设置了
StatusCallback属性,否则Twilio不会发送回调请求。
内容的提问来源于stack exchange,提问作者u_1826
相关产品推荐
相关产品推荐

