如何通过Genesys Cloud .NET SDK过滤语音类型会话?
解决Genesys Cloud .NET SDK过滤语音会话的问题
你可以通过两种方式实现仅获取语音类型的会话,推荐优先使用API查询阶段过滤,减少不必要的数据传输:
方法一:查询阶段直接过滤(推荐)
Genesys Cloud的Analytics查询支持通过SegmentFilters针对会话段的媒体类型进行过滤,语音类型对应枚举值MediaType.Voice。修改你的ConversationQuery构造代码,添加SegmentFilters参数即可:
var conversationsApi = new ConversationsApi(); var startdate = DateString(currentTime.Subtract(fetchInterval)); var enddate = DateString(currentTime); var matches = new List<PM.ConversationDetailQueryPredicate>(); matches.AddRange(Divisions.Select(d => Matches(Dim.Divisionid, d))); var conversations = new List<PM.AnalyticsConversationWithoutAttributes>(); var pageNum = 1; // 新增:创建语音媒体类型的段过滤条件 var voiceSegmentFilter = new PM.SegmentDetailQueryFilter( Predicates: new List<PM.SegmentDetailQueryPredicate> { PM.Matches(PM.Dim.SegmentMediaType, PM.MediaType.Voice.ToString()) } ); do { var convs = conversationsApi.PostAnalyticsConversationsDetailsQuery( new PM.ConversationQuery( Interval: $"{startdate}/{enddate}", Paging: new PM.PagingSpec(100, pageNum++), ConversationFilters: new List<PM.ConversationDetailQueryFilter> { Or(matches.ToArray()) }, // 添加段过滤参数 SegmentFilters: new List<PM.SegmentDetailQueryFilter> { voiceSegmentFilter } )); if (convs == null || convs.Conversations == null || convs.TotalHits == 0) break; conversations.AddRange(convs.Conversations ?.Where(y => y.ConversationEnd >= insertStartTime) ?.Where(z => true == z.Participants? .Any(p => p.Purpose == PM.AnalyticsParticipantWithoutAttributes.PurposeEnum.Agent || p.Purpose == PM.AnalyticsParticipantWithoutAttributes.PurposeEnum.User))); } while (true);
方法二:获取结果后过滤
如果查询阶段的过滤不生效,也可以在获取会话列表后,通过检查会话的Segments媒体类型来过滤:
// 在原有过滤条件后添加语音类型检查 conversations.AddRange(convs.Conversations ?.Where(y => y.ConversationEnd >= insertStartTime) ?.Where(z => z.Participants?.Any(p => p.Purpose == PM.AnalyticsParticipantWithoutAttributes.PurposeEnum.Agent || p.Purpose == PM.AnalyticsParticipantWithoutAttributes.PurposeEnum.User) == true) ?.Where(z => z.Segments?.Any(s => s.MediaType == PM.MediaType.Voice) == true));
注意事项
- 若SDK中无
PM.MediaType枚举,可直接使用字符串值"voice"(小写)替代PM.MediaType.Voice.ToString() - 方法一通过API层面过滤,能大幅减少返回的数据量,提升性能,优先选用
内容的提问来源于stack exchange,提问作者IntelligentCancer
相关产品推荐
相关产品推荐

