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

如何通过Twilio C# SDK精准检索指定时间范围内的通话记录?

解决Twilio C# SDK获取指定时间段通话记录的问题

嘿,我看到你在使用Twilio的C# SDK筛选特定时间段的通话记录时遇到了麻烦,咱们来把这个问题捋清楚并解决它。

问题根源:参数逻辑搞反了

你当前代码里的参数组合完全不符合你的需求:

var call1 = await CallResource.ReadAsync(new ReadCallOptions {
    StartTimeBefore = startDateTimeUTC, // 取开始时间早于15:15的通话
    EndTimeAfter = endDateTimeUTC,     // 取结束时间晚于16:18的通话
    PageSize = 100
});

这两个条件组合起来,根本找不到任何匹配的通话——没有通话会同时满足“开始得比你要的时间段还早”且“结束得比你要的时间段还晚”。

正确的实现方式

根据你的需求,分两种场景给出解决方案:

场景1:获取开始时间在指定UTC时间段内的通话

这是最常见的需求,用StartTimeAfter和StartTimeBefore组合即可,前者指定区间的起始点(包含),后者指定区间的结束点(不包含):

public async Task ExecuteAsync() {
    TwilioClient.Init(_accountSid, _authToken);
    var startDateTimeUTC = new DateTime(2022, 2, 8, 15, 15, 00).ToUniversalTime();
    var endDateTimeUTC = new DateTime(2022, 2, 8, 16, 18, 01).ToUniversalTime();
    
    // 正确筛选开始时间在[15:15, 16:18)区间内的通话
    var calls = await CallResource.ReadAsync(new ReadCallOptions {
        StartTimeAfter = startDateTimeUTC,
        StartTimeBefore = endDateTimeUTC,
        PageSize = 100
    });

    if (calls.Any())
    {
        foreach (var call in calls)
        {
            Console.WriteLine($"通话目标:{call.To} | 开始时间(UTC):{call.StartTime}");
        }
    }
    else
    {
        Console.WriteLine("未找到符合条件的通话记录");
    }
}

场景2:获取整个通话过程都落在目标时间段内的通话

如果你的需求更严格,要确保通话的开始和结束时间都在你指定的区间内,那需要同时结合结束时间的参数:

var calls = await CallResource.ReadAsync(new ReadCallOptions {
    StartTimeAfter = startDateTimeUTC,
    StartTimeBefore = endDateTimeUTC,
    EndTimeAfter = startDateTimeUTC,
    EndTimeBefore = endDateTimeUTC,
    PageSize = 100
});

额外注意事项

  • 你已经将时间转换为UTC是非常正确的,Twilio的API所有时间参数都基于UTC,不要用本地时间,否则会出现偏差。
  • 如果还是查不到数据,可以先登录Twilio控制台,手动确认该时间段内是否存在通话记录。
  • 若数据量较大,可以调整PageSize或添加Limit参数来获取更多结果,避免分页导致的遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:32:33