我想记录我的机器人对话(到文本文件或数据库)。我想捕获机器人的所有输入和输出,包括由FormFlow,Confirms等生成的任何文本。我不需要像卡片这样的图形元素,但是从它们那里获取文本也会很好
在我的应用程序中的每个输入/输出之后添加日志记录语句似乎不切实际,特别是因为我无法轻易确定FormFlow向用户发送了哪些文本。
最好的方法是什么?
答案 0 :(得分:12)
您可以使用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}");
}
}
最后,您必须使用类似的内容(在global.asax中)注册AutoFact:
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();
}
});
答案 1 :(得分:0)
想出来。我可以使用Microsoft.Bot.Builder.History.IActivityLogger接口