7

我想记录我的机器人对话(到文本文件或数据库)。我想捕获机器人的所有输入和输出,包括由 FormFlow、Confirms 等生成的任何文本。我不需要卡片之类的图形元素,但如果也能从它们中获取文本会很好。

在我的应用程序中的每个输入/输出之后添加日志语句似乎并不实际,特别是因为我无法轻松准确地判断 FormFlow 向用户发送了哪些文本。

最好的方法是什么?

4

2 回答 2

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}");
    }
}

最后,您必须在 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();
    }
});
于 2017-02-09T19:40:01.540 回答
-1

弄清楚了。我可以使用 Microsoft.Bot.Builder.History.IActivityLogger 接口

https://docs.botframework.com/en-us/csharp/builder/sdkreference/dc/dc6/namespace_microsoft_1_1_bot_1_1_builder_1_1_history.html

于 2016-12-25T01:52:22.913 回答