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

Microsoft Teams消息扩展搜索结果分页功能无法正常工作问题

Microsoft Teams搜索类消息扩展分页失效解决方案

核心实现逻辑

Teams消息扩展的搜索分页是隐式触发机制,不存在你要找的「总结果数」配置字段,客户端不会通过你传的总条数判断是否展示分页控件,整个分页流程完全靠请求/响应的参数配合实现:

  • 客户端发起搜索请求时,会自带两个分页参数:queryOptions.count(单页期望返回的结果条数,桌面端默认25、移动端默认10)、queryOptions.skip(当前页需要跳过的结果条数,第一页固定为0)
  • 你返回第一页结果时,只要结果数组长度等于请求传入的count值,客户端就会自动判定存在下一页,滚动到结果底部时自动展示「加载更多」控件
  • 用户触发下一页加载时,客户端会发起新的搜索请求,此时queryOptions.skip值会累加count值(比如第一页skip=0,第二页skip=25,第三页skip=50),你根据这个skip值和count值返回对应偏移量的结果即可
  • 当某一页你返回的结果数组长度小于count值时,客户端自动判定这是最后一页,不再触发后续加载请求

常见踩坑

以下错误操作会直接导致分页不生效:

  • 第一页返回的结果条数小于请求传入的queryOptions.count值,哪怕后台还有更多结果,客户端也会直接判定没有下一页
  • 没有处理后续请求的skip参数,每次请求都固定返回前N条第一页数据
  • 自行在响应结构中添加不存在的totalResults、paging等自定义字段,可能导致客户端响应解析异常,直接截断结果展示
  • 把单页返回条数写死为固定值,没有读取请求里的count参数,和客户端期望的单页条数不匹配

DotNet 正确实现示例

// 解析Teams请求中的分页参数
var requestParams = JsonSerializer.Deserialize<JsonElement>(turnContext.Activity.Value.ToString());
var pageSize = requestParams.GetProperty("queryOptions").GetProperty("count").GetInt32();
var skipOffset = requestParams.GetProperty("queryOptions").GetProperty("skip").GetInt32();

// 执行业务搜索逻辑,拿到分页结果
var (pageItems, _) = await yourSearchService.Search(
    keyword: requestParams.GetProperty("queryText").GetString(),
    pageSize: pageSize,
    skip: skipOffset
);

// 构造搜索响应,不需要传总结果数字段
var result = new MessagingExtensionResult
{
    Type = "result",
    AttachmentLayout = "list",
    Attachments = pageItems.Select(item => {
        // 按业务需求构造结果对应的卡片附件即可
        return item.ToAdaptiveCardAttachment();
    }).ToList()
};

await turnContext.SendActivityAsync(new Activity
{
    Value = new MessagingExtensionResponse
    {
        ComposeExtension = result
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:48:19