我正在使用Node js构建聊天机器人。

我当前正在将 session 数据存储到Microsoft默认存储中,每个用户 session 的限制为64K。我想使用自己的存储设备来存储 session 数据。 Here是我从Microsoft开发人员那里获得的帮助。

我能够存储在文档数据库和Azure表中。

不过,我还是很困惑。我们将如何实现IStorageClient接口(interface)以存储在自己的数据库中?

每当我设置session.UserData.name=""时,它都应存储在自己的数据库中。

最佳答案

我不确定是否遇到问题;我了解您正在尝试做的事情,似乎您已准备就绪。

首先,您必须实现IStorageClient接口(interface)。在实现中,您编写了将事物存储在数据库中的逻辑。

您可以查看DocumentDBAzure Tables实现,以了解如何实现。

现在,问题是..如果您的自定义存储位于Azure中,那么您也许可以将AzureBotStorage与自定义存储客户端一起使用。您实例化自定义存储客户端,将引用传递给AzureBotStorage并将其设置为bot中的存储

// Azure DocumentDb State Store
var docDbClient = new azure.DocumentDbClient({
    host: process.env.DOCUMENT_DB_HOST,
    masterKey: process.env.DOCUMENT_DB_MASTER_KEY,
    database: process.env.DOCUMENT_DB_DATABASE,
    collection: process.env.DOCUMENT_DB_COLLECTION
});
var botStorage = new azure.AzureBotStorage({ gzipData: false }, docDbClient);

// Set Custom Store
bot.set('storage', botStorage);

如果您的自定义存储位于Azure以外的任何其他位置,则AzureBotStorage可能对您不起作用。请注意,我不确定这一点,您将必须检查代码以进行确认。从我看来,这似乎很通用,因此您可以重用它并只需实现IStorageClient即可。如果不是这种情况,则还必须实现IBotStorage接口(interface)。

最后,AzureBotStorage正在执行此操作。它实现IBotStorage并使用IStorageClient与实际提供者进行交互。

关于node.js - 如何将 session 数据存储到Bot Builder中的自定义存储中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43153824/

10-16 20:49