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