首页 > 解决方案 > 访问 AzureBotStorage 中的所有用户数据

问题描述

我使用适用于 Node.js 的 Bot Builder SDK 创建了一个聊天机器人。由于这将托管在 Azure 上,因此我botbuilder-azure在托管环境中使用 AzureBotStorage(模块),botbuilder在开发中使用 MemoryBotStorage(模块)。

初始化类似于:

var builder = require('botbuilder');
var azure = require('botbuilder-azure');

var stateStorage = {};

if (process.env.ENVIRONMENT != "DEV") {
    var azureTableClient = new azure.AzureTableClient(process.env.TABLE_NAME, process.env.ACCOUNT_NAME, process.env.ACCOUNT_KEY);
    stateStorage = new azure.AzureBotStorage({ gzipData: false }, azureTableClient);
} else {
    stateStorage = new builder.MemoryBotStorage();
}

这通常很好用——我已经确认(使用存储资源管理器工具)用户对话数据存储在本地和托管环境中。

问题是,我在访问应用程序中的所述存储数据时遇到了问题(我试图作为单独函数的一部分遍历所有用户)。

像这样的东西:

for (userId in stateStorage.userStore)

非常适合访问本地环境存储 ( builder.MemoryBotStorage()),但对于托管环境存储 ( ) 根本不起作用azure.AzureBotStorage()。事实上,我只是找不到访问/查询 AzureBotStorage 数据的方法。

有没有人有访问 AzureBotStorage 数据的经验,如果有,您建议如何遍历所有用户?

谢谢!

标签: node.jsbotframeworkazure-table-storageazure-bot-service

解决方案


我找到了一种使用 访问表的方法buildTableService().queryEntities(),如下所示:

azureTableClient.buildTableService().queryEntities(process.env.TABLE_NAME, null, null, function (error, result, response) {
    for (var i=0; i<result.entries.length; i++) {
        \\ do stuff with result.entries[i]
    }
});

但是,这种方法不是特别干净或有效,所以我暂时不回答这个问题,以防有人有更好的方法。


推荐阅读