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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:17:30