首页 > 解决方案 > 如何使用 Node.js 在 MS Bot Framework v4 中将对话数据记录到本地存储中

问题描述

我正在使用 Microsoft bot 开发框架,使用其 v4 node.js sdk 并在模拟器中对其进行测试。我一直在寻找一种将对话的所有消息保存在本地机器/存储本身中的方法。我设置persistConversationData为真。我对 Bot 框架完全陌生,请帮助我存储对话数据的代码部分

标签: node.jsbotframework

解决方案


这里有两个部分,具体取决于您是要严格测试还是要在常规使用期间记录。

如果您使用 v4 模拟器,您将看到一个“将脚本另存为”按钮,该按钮允许您保存当前对话的副本以供以后在模拟器中使用和重播。

如果您想创建自己的日志记录中间件,则有一个名为的内置类TranscriptLoggerMiddleware

为了设置它,您可以执行以下操作(ConsoleTranscriptLogger在这种情况下使用内置的完成子类,但如果需要,您可以实现内置接口TranscriptLogger以创建自定义版本以保存副本)

通过以下方式在您的 require 语句中导入中间件类:

const { BotFrameworkAdapter, MemoryStorage, ConversationState, TranscriptLoggerMiddleware, ConsoleTranscriptLogger } = require('botbuilder');

然后初始化该记录器类的一个实例:

const logger = new TranscriptLoggerMiddleware(new ConsoleTranscriptLogger());

最后在整个中间件堆栈中包含该中间件:

// Create conversation state with in-memory storage provider.
const conversationState = new ConversationState(memoryStorage);

// Create the main dialog.
const myBot = new MyBot(conversationState);

adapter.use(logger); // initialize middleware after your usual setup steps

在这种情况下,完成这些步骤后ConsoleTranscriptLogger会将收到的数据打印到您的控制台。包含保存的自定义日志的完整实现涉及更多,但可以通过创建一个实现TranscriptLogger并简单保存状态而不是输出到控制台的类来完成,如ConsoleTranscriptLogger

自定义日志记录这个 repo中,我也设置了自定义日志记录。这需要添加两个文件。在这种情况下

CustomLogger.d.ts包含实现TranscriptLogger接口的导入和设置

CustomLogger.js包含处理传入活动的逻辑


推荐阅读