I would like to log my bot conversations (to a text file or DB). I want to capture all of the input and output from the bot, including any text generated by FormFlow, Confirms, etc. I don't need the graphical elements like cards, but it would be nice to have the text from them too.
It doesn't seem practical to add logging statements after each input/output in my app, particularly since I can't easily tell exactly what text was sent to the user by FormFlow.
What's the best way to do this?
You can log all messages (from bot or from user) using Middleware.
For C# version you must implement the IActivityLogger and log what you want in the LogAsync method.
For Example:
public class DebugActivityLogger : IActivityLogger
{
public async Task LogAsync(IActivity activity)
{
Debug.WriteLine($"From:{activity.From.Id} - To:{activity.Recipient.Id} - Message:{activity.AsMessageActivity()?.Text}");
}
}
Finally, you must register in AutoFact with something like this (in global.asax):
var builder = new ContainerBuilder();
builder.RegisterType<DebugActivityLogger>().AsImplementedInterfaces().InstancePerDependency();
builder.Update(Conversation.Container);
If you're using the nodejs version, its more straightforward:
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();
}
});
Figured it out. I can use the Microsoft.Bot.Builder.History.IActivityLogger Interface
来源:https://stackoverflow.com/questions/41309532/how-to-log-a-chat-conversation-with-bot-framework-c-sharp-bot-builder