如何在Twilio Dial方法完成通话录制后获取Call SID与录制SID
Twilio Dial录制后获取Call SID和录制SID的解决方案
嘿,我来帮你搞定这个问题!结合你给出的var dial = new Dial(callerId: callerId, record: record_from_answer);代码片段,我整理了确认录制成功的方法,以及两种获取SID的实用方案:
一、先确认录制操作能正常执行
要确保你的录制配置没问题,最快的验证方式:
- 检查
record参数值:你用的record_from_answer是正确的(另一个可选值是record_from_ringing),只有这个参数正确设置,Twilio才会触发录制 - 登录Twilio控制台,进入「录制」页面,查看是否生成了对应的录制文件——如果能看到,说明录制操作已经成功执行
二、获取Call SID和录制SID的两种方式
1. 同步获取(适合用Rest API发起呼叫的场景)
如果你是通过Twilio Helper库(比如C#)直接发起呼叫并配置Dial,那么在调用API后可以直接从返回的Call对象里拿到Call SID,之后再用这个SID查询对应的录制记录。
给你扩展一下你的代码:
using Twilio; using Twilio.Rest.Api.V2010.Account; // 先初始化Twilio客户端 TwilioClient.Init("你的Account SID", "你的Auth Token"); // 构建呼叫参数,和你的Dial配置对应 var callOptions = new CreateCallOptions( to: "要拨打的目标号码", from: callerId, url: "返回TwiML的接口URL(如果需要)" ); // 开启录制,和你的record参数一致 callOptions.Record = "record-from-answer"; // 发起呼叫并获取Call对象 var call = CallResource.Create(callOptions); // 直接拿到Call SID string callSid = call.Sid; Console.WriteLine($"当前通话的Call SID: {callSid}"); // 用Call SID查询该通话的所有录制记录 var recordings = RecordingResource.Read(callSid: callSid); foreach (var recording in recordings) { Console.WriteLine("对应的录制SID: " + recording.Sid); }
2. 异步Webhook回调获取(适合TwiML响应的场景)
如果你的Dial是在TwiML中触发的(比如用户呼入你的Twilio号码,你的服务器返回带<Dial>的TwiML),那Twilio会在通话结束或录制完成时,向你指定的回调URL发送POST请求,请求参数里就包含Call SID和Recording SID。
具体步骤:
- 修改你的Dial代码,添加回调配置:
// 给你的Dial添加回调相关参数 var dial = new Dial( callerId: callerId, record: "record-from-answer", statusCallback: "你的公开可访问的回调URL", // 指定要监听的事件,录制完成和通话完成都可以 statusCallbackEvent: new List<string> { "recording-completed", "completed" }, statusCallbackMethod: HttpMethod.Post ); - 然后在你的回调接口里解析参数:
[HttpPost("twilio/callback")] public IActionResult TwilioCallback([FromForm] TwilioCallbackData model) { // 获取Call SID string callSid = model.CallSid; // 获取录制SID(触发recording-completed事件时,这个参数肯定存在) string recordingSid = model.RecordingSid; // 这里可以把SID存储到数据库,或者做其他业务处理 Console.WriteLine($"Call SID: {callSid}, 录制SID: {recordingSid}"); return Ok(); } // 对应的参数模型类 public class TwilioCallbackData { public string CallSid { get; set; } public string RecordingSid { get; set; } // 你还可以添加其他需要的参数,比如CallStatus、RecordingUrl等 }
三、几个要注意的点
- 回调URL必须是公开可访问的,如果是本地开发调试,可以用ngrok这类工具做内网穿透
- 建议优先监听
recording-completed事件,因为这个事件是在录制文件完全生成后触发的,此时Recording SID一定存在;如果监听completed,可能会出现录制还没生成的情况 - 就算你错过了回调,也可以随时用Call SID通过Twilio API查询该通话的所有录制记录
内容的提问来源于stack exchange,提问作者Sachithra K
相关产品推荐
相关产品推荐

