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

