C# Bot框架记录聊天历史记录(带有ReplyToActivityAsync-isTyping指示符)

C# Bot框架记录聊天历史记录(带有ReplyToActivityAsync-isTyping指示符),c#,botframework,C#,Botframework,如何正确地将用户的聊天对话保存到bot?是的,我看到过关于这方面的例子,但它不起作用。我也没有使用builder.Update(),因为它已经过时了。然而,我似乎已经将它从一个bot应用到另一个用户(相同的实现)。问题是,在我记录了从一个用户到另一个机器人的聊天之后,这个机器人就停止了响应(完全没有响应),这会让我感到厌烦,因为如果我从一个机器人到另一个用户的聊天记录,代码仍然在连续工作 代码如下: 用户到机器人 public class UserToBotLoggerService : IP

如何正确地将用户的聊天对话保存到bot?是的,我看到过关于这方面的例子,但它不起作用。我也没有使用
builder.Update()
,因为它已经过时了。然而,我似乎已经将它从一个bot应用到另一个用户(相同的实现)。问题是,在我记录了从一个用户到另一个机器人的聊天之后,这个机器人就停止了响应(完全没有响应),这会让我感到厌烦,因为如果我从一个机器人到另一个用户的聊天记录,代码仍然在连续工作

代码如下: 用户到机器人

 public class UserToBotLoggerService : IPostToBot
{
    private readonly IConnectorClient _client;
    private readonly IMessageActivity _FromUser;
    public UserToBotLoggerService(IMessageActivity fromUser, IConnectorClient client)
    {
        SetField.NotNull(out _FromUser, nameof(fromUser), fromUser);
        SetField.NotNull(out _client, nameof(client), client);
    }
    public async Task PostAsync(IActivity activity, CancellationToken token)
    {
        var conversation = "";
        var convActivity = "";
        conversation = $"From: {activity.From.Name} \n\n To: {activity.Recipient.Name} \n\n Message: {activity.AsMessageActivity()?.Text}";
        convActivity = convActivity + conversation;

        await _client.Conversations.ReplyToActivityAsync((Activity)activity, token);
    }
}
MessageController

public MessagesController()
    {
        //var builder = new ContainerBuilder();
        Conversation.UpdateContainer(
            builder =>
            {
                builder.RegisterType<UserToBotLoggerService>()
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();    
            });


    }
谢谢!PS:我仍然无法在用户线程中插入评论,因为我需要至少50%的声誉。所以请原谅,如果我的问题有重复的地方,我可能已经看到并尝试过他们的解决方案了

Edit1:我发现了我的bug,似乎我的isTyping activity指示器是阻止
IActivityLogger
的指示器,因为它使用了
ReplyActivityAsync
,如所示!所以我现在的问题是输入活动指示器

Edit2:还修复了我的iType活动指示器


我将更新我的答案。

我继承了
IActivityLogger
并实现了它的功能,所以我最终得到了这个

        public async Task LogAsync(IActivity activity)
        {
            var conversation = "";
            var convActivity = "";
            conversation = $"From: {activity.From.Name} \n\n To: {activity.Recipient.Name} \n\n Message: {activity.AsMessageActivity()?.Text}";
            convActivity = convActivity + conversation;
        }
是的,关于如何记录聊天历史记录的其他问题与此完全相同,但是,我发现我的问题出在我的
connector.Conversations.ReplyToActivityAsync(message)上这不允许点击
IActivityLogger
ReplyToActivityAsync
,所以我所做的,可能在不久的将来对任何人都有帮助

public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
    {
        if (activity.Type == ActivityTypes.Message)
        {
            Activity isTypingReply = activity.CreateReply();
            isTypingReply.Type = ActivityTypes.Typing;
            HandleSystemMessage(isTypingReply); //I passed the activity type to the HandleSystemMessage and let it handle the typingActivity;
            await Conversation.SendAsync(activity, () => new YourDialog());
        }  
        else
        {
            HandleSystemMessage(activity);
        }
        var response = Request.CreateResponse(HttpStatusCode.OK);
        return response;
    }

HandleSystemMessage
是一个处理
ReplyToActivityAsync
的工具,我奇迹般地发现它绕过了
IActivityLogger
的限制,就像它有自己的世界一样。

可能是@EzequielJadib的重复。
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
    {
        if (activity.Type == ActivityTypes.Message)
        {
            Activity isTypingReply = activity.CreateReply();
            isTypingReply.Type = ActivityTypes.Typing;
            HandleSystemMessage(isTypingReply); //I passed the activity type to the HandleSystemMessage and let it handle the typingActivity;
            await Conversation.SendAsync(activity, () => new YourDialog());
        }  
        else
        {
            HandleSystemMessage(activity);
        }
        var response = Request.CreateResponse(HttpStatusCode.OK);
        return response;
    }
else if (message.Type == ActivityTypes.Typing)
        {
            ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl));
            connector.Conversations.ReplyToActivityAsync(message);
        }