我想记录我的机器人对话(到文本文件或数据库)。我想捕获机器人的所有输入和输出,包括由 FormFlow、Confirms 等生成的任何文本。我不需要卡片之类的图形元素,但如果也能从它们中获取文本会很好。
在我的应用程序中的每个输入/输出之后添加日志语句似乎并不实际,特别是因为我无法轻松准确地判断 FormFlow 向用户发送了哪些文本。
最好的方法是什么?
我想记录我的机器人对话(到文本文件或数据库)。我想捕获机器人的所有输入和输出,包括由 FormFlow、Confirms 等生成的任何文本。我不需要卡片之类的图形元素,但如果也能从它们中获取文本会很好。
在我的应用程序中的每个输入/输出之后添加日志语句似乎并不实际,特别是因为我无法轻松准确地判断 FormFlow 向用户发送了哪些文本。
最好的方法是什么?
您可以使用Middleware记录所有消息(来自机器人或用户)。
对于 C# 版本,您必须实现IActivityLogger并在 LogAsync 方法中记录您想要的内容。
例如:
public class DebugActivityLogger : IActivityLogger
{
public async Task LogAsync(IActivity activity)
{
Debug.WriteLine($"From:{activity.From.Id} - To:{activity.Recipient.Id} - Message:{activity.AsMessageActivity()?.Text}");
}
}
最后,您必须在 AutoFact 中注册,如下所示(在 global.asax 中):
var builder = new ContainerBuilder();
builder.RegisterType<DebugActivityLogger>().AsImplementedInterfaces().InstancePerDependency();
builder.Update(Conversation.Container);
如果您使用的是 nodejs 版本,则更简单:
const logUserConversation = (event) => { console.log('message: ' + event.text + ', user: ' + event.address.user.name);
};
// Middleware for logging
bot.use({
receive: function (event, next) {
logUserConversation(event);
next();
},
send: function (event, next) {
logUserConversation(event);
next();
}
});
弄清楚了。我可以使用 Microsoft.Bot.Builder.History.IActivityLogger 接口