2017-04-11 1 views
1

내 사용자와 내 봇간에 메시지를 기록해야합니다. 몇 가지 연구를 한 후 sGambolati가이 방법을 설명하는이 게시물을 발견했습니다 : https://stackoverflow.com/a/42145416.IActivityLogger 및 Bot Builder를 사용하여 메시지를 기록 할 수 없습니다. C#

그러나이 접근법은 나를 위해 작동하지 않는 것 같습니다. 나는 그가 제공 한 것과 동일한 스 니펫을 시도해 보았지만 여전히 디버그 출력 창에 로그가 표시되지 않습니다.

로거 클래스 :

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# 샘플을보십시오.

관련 문제