有什么方法可以对团队消息传递扩展搜索查询启用分页吗?

Is there any way to enable pagination on teams messaging extension search queries?

我正在使用基于 MS 团队搜索的消息传递扩展程序,有什么方法可以捕获机器人中的滚动事件。

因此,当用户查询一个关键字时,counter=1,响应将有前10个匹配结果。 向下滚动后,我想用 counter=2 对同一关键字进行另一个查询,以 return 接下来的 10 个匹配结果。

使用 queryOption 数组可以启用分页。

分页参数:

skip:此查询的跳过计数

count:到return的元素个数。

请浏览 documentation 了解更多信息。

编辑:刚意识到你问的是消息扩展,但我认为这可能仍然适用,所以把它留在这里。

我能够实施不依赖于 TeamsActivityHandler(我未使用)的解决方案。在我的例子中,我创建了一个单独的对话框 (paginateDialog),它在开始对话框调用的选项中有一个数据数组和当前页面值。数据数组包含卡片定义,我将其显示为轮播。我下面的代码是针对这种情况的,所以如果您要发送不同类型的消息,您可能需要修改一些内容。

var paginate = require('array-paginate');

    async displayItems (step) {

        // Display the first page
        var items = paginate(step._info.options.lineData, step._info.options.currentPage, PAGE_SIZE);
        await step.context.sendActivity(MessageFactory.carousel(items.docs));

        // If there are more items, prompt to continue and increment
        if (items.hasNextPage == true) {
            return await step.prompt(CHOICE_PROMPT, {
                prompt: `I can only show you ${PAGE_SIZE} items at a time. Please select Next to continue or Done to return to the main dialog.`,
                choices: [
                    {value: `Next ${PAGE_SIZE}`},
                    {value: 'Done'}
                ]
            });
        } else {
            return await step.next();
        }
    }

    async loopStep (step) {
        if (step.result && step.result.value == `Next ${PAGE_SIZE}`) {
            step._info.options.currentPage++;
            return await step.replaceDialog(WATERFALL_DIALOG, step._info.options);
        } else {
            return await step.endDialog();
        }
    }

请注意,这可能不是很有效,尤其是当您有一个非常大的数组时,因为我每次都从整个数组重新创建分页。不过,如果需要,这允许您向前和向后遍历页面。我的功能只前进,但您可以创建前进和后退按钮,这些按钮可以根据 hasNextPage 和 hasPreviousPage 值 return 由 array-paginate 模块动态显示,然后根据适用的 increment/decrement 当前页面显示。

另一个注意事项,这是通过 return await step.beginDialog('PAGINATE_DIALOG', options); 调用的,这意味着当您结束该对话时,您将 return 到下一步的被调用方,无论您在该步骤的哪个位置调用对话(就像任何其他对话调用一样)。因此,请了解在 beginDialog 之后是否有任何提示或其他任何提示,您需要在 return 进入上一个对话框之前考虑 pagniateDialog 步骤中的那些。