我正在使用节点js和Microsoft Bot builder sdk来编写BOT。目前,我正在保存数据包(conversationData,userData等)中的所有内容,并使用CosmosDb来存储状态。我按照这篇文章来配置CosmosDB&根据nodejs进行了更改。 https://azure.microsoft.com/en-in/blog/bot-conversation-history-with-azure-cosmos-db/
这种方法很少受到关注,
理想情况下,我们希望保留所有内容。
是否有更好的方法来保存聊天记录和conversationData,userData MS BOT中的数据库?
答案 0 :(得分:1)
所有存储实现只是编写getData和saveData,它们内部有一个键:值存储,其中key通常是userId + conversationId,但只要你可以从传递给{的参数中可靠地获取它,你就可以随意使用它。 {1}}和getData
。
查看redis https://github.com/suttna/botbuilder-redis-storage - https://github.com/suttna/botbuilder-redis-storage/blob/master/src/storage.ts中的示例,了解一个非常容易理解的示例存储实现。
您可以使用像这样的自定义实现
setData
// Create new storage with redis client
var storage = new YourStorage()
// this is just here for the sake of initializing a `bot`
var connector = new builder.ChatConnector()
var bot = new builder.UniversalBot(connector)
// Configure bot to use YourStorage
bot.set('storage', storage)
bot.set('persistConversationData', true);
只是一个实现
storage
我完全从链接的redis模块中复制了这些签名,但它们在默认存储的BotBuilder源中是相同的 - https://github.com/Microsoft/BotBuilder/blob/5cf71c742f27d89e9dbc4076f850122bd6edac11/Node/calling/src/storage/BotStorage.ts
样本是打字稿。如果您不熟悉,请在public saveData(context: IBotStorageContext, data: IBotStorageData, callback?: (err: Error) => void)
public getData(context: IBotStorageContext, callback: (err: Error, data: IBotStorageData) => void)
之后立即忽略指示事物类型的位。