我需要在用户和机器人之间记录消息。经过一些研究后,我发现sGambolati的这篇文章解释了如何实现这一目标:https://stackoverflow.com/a/42145416。
然而,这种方法对我来说似乎并不适用。我甚至尝试了他提供的相同片段,但我仍然没有在调试输出窗口中看到日志。
以下是根据其实施的代码:
记录器类:
public class DebugActivityLogger : IActivityLogger
{
public async Task LogAsync(IActivity activity)
{
Debug.WriteLine($"From:{activity.From.Id} - To:{activity.Recipient.Id} - Message:{activity.AsMessageActivity()?.Text}");
}
}
我的Global.asax:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
var builder = new ContainerBuilder();
builder.RegisterType<DebugActivityLogger>()
.AsImplementedInterfaces()
.InstancePerDependency();
builder.Update(Conversation.Container);
}
}
控制器中的标准回波样本:
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
int length = (activity.Text ?? string.Empty).Length;
Activity reply = activity.CreateReply($"You sent {activity.Text} which was {length} characters");
await connector.Conversations.ReplyToActivityAsync(reply);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
我错过了什么吗?
答案 0 :(得分:2)
IActivityLogger
实施将记录通过IPostToBot
/ IBotToUser
实施的传入/传出消息。在这种情况下,LogPostToBot和LogPostToUser实现负责调用IActivityLogger
实现。
所有这些介绍,只是为了让您知道,如果您使用connector.Conversations.ReplyToActivityAsync
,则无法点击IActivityLogger
。要点击记录器,您需要一个IDialog
来接收来自用户的消息,您需要使用context.PostAsync
将来自机器人的消息记录到用户。
查看core-Middleware C#示例,看看这是否有效。