2017-04-11 39 views
1

我需要在我的用户和我的机器人之间记录消息。经过一番调查后,我发现sGambolati在这篇文章中解释了如何实现:https://stackoverflow.com/a/42145416无法使用IActivityLogger和C#的Bot生成器记录消息

但是,这种方法似乎并没有为我工作。我甚至尝试了他提供的相同片段,但仍然没有在调试输出窗口中看到日志。

Logger类:

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; 
} 

我错过了什么吗?

回答

2

IActivityLogger实施将记录经过IPostToBot/IBotToUser执行的传入/传出消息。在这种情况下,LogPostToBotLogPostToUser实现负责调用IActivityLogger实现。

所有这些介绍,只是让你知道,如果你使用connector.Conversations.ReplyToActivityAsync你不会碰到IActivityLogger。要点击记录器,您将需要一个接收来自用户消息的IDialog,并且您需要使用context.PostAsync将消息从机器人记录到用户。

看看core-Middleware C#示例,看看这个工作。