首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Botframework如何记录历史

Botframework如何记录历史
EN

Stack Overflow用户
提问于 2016-08-08 23:10:50
回答 2查看 339关注 0票数 2

您是否知道如何记录所有传出/传入的消息?我不确定如何捕获传出消息。

我使用链条和表单。例如

代码语言:javascript
复制
await Conversation.SendAsync(activity, rootDialog.BuildChain);

代码语言:javascript
复制
activity.CreateReply(.....);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-26 22:41:03

我找到了更好的解决方案

代码语言:javascript
复制
    public class BotToUserLogger : IBotToUser
{
    private readonly IMessageActivity _toBot;
    private readonly IConnectorClient _client;

    public BotToUserLogger(IMessageActivity toBot, IConnectorClient client)
    {
        SetField.NotNull(out _toBot, nameof(toBot), toBot);
        SetField.NotNull(out _client, nameof(client), client);
    }

    public IMessageActivity MakeMessage()
    {
        var toBotActivity = (Activity)_toBot;
        return toBotActivity.CreateReply();
    }

    public async Task PostAsync(IMessageActivity message, CancellationToken cancellationToken = default(CancellationToken))
    {
        await _client.Conversations.ReplyToActivityAsync((Activity)message, cancellationToken);
    }
}

public class BotToUserDatabaseWriter : IBotToUser
{
    private readonly IBotToUser _inner;
    public BotToUserDatabaseWriter(IBotToUser inner)
    {
        SetField.NotNull(out _inner, nameof(inner), inner);
    }
    public IMessageActivity MakeMessage()
    {
        return _inner.MakeMessage();
    }

    public async Task PostAsync(IMessageActivity message, CancellationToken cancellationToken = default(CancellationToken))
    {
        // loging outgoing message
        Debug.WriteLine(message.Text);

        //TODO log message for example into DB

        await _inner.PostAsync(message, cancellationToken);
    }

在控制器使用中

代码语言:javascript
复制
 public MessagesController()
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<BotToUserLogger>()
            .AsSelf()
            .InstancePerLifetimeScope();

        builder.Register(c => new BotToUserTextWriter(c.Resolve<BotToUserLogger>()))
            .AsImplementedInterfaces()
            .InstancePerLifetimeScope();
        builder.Update(Microsoft.Bot.Builder.Dialogs.Conversation.Container);
    }
票数 2
EN

Stack Overflow用户

发布于 2016-08-15 21:21:58

看起来我不能记录传出的消息。

我更改了SDK源代码。

在Conversations.cs中添加事件

例如,像这样。

代码语言:javascript
复制
  public delegate void MessageSendedEventHandler(object sender, Activity activity, string conversationId);
    public static event MessageSendedEventHandler MessageSended;

并将此MessageSended?.Invoke(this, activity, conversationId);添加到每个Send....HttpMessagesAsync方法中

这不是很好的解决方案。但它是有效的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38832778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档