2016-08-08 3 views
2

발신/수신 메시지를 모두 기록하는 방법에 대해 알고 계십니까? 나가는 메시지를 포착하는 방법을 모르겠습니다.Botframework 로그 기록 방법

나는 체인과 양식을 사용합니다. 내가 보내는 메시지를 기록하지 못할처럼 예를 들어

await Conversation.SendAsync(activity, rootDialog.BuildChain); 

activity.CreateReply(.....); 
+0

에서 더 나은 솔루션

public class BotToUserLogger : IBotToUser { private readonly IMessageActivity _toBot; private readonly IConnectorClient _client; public BotToUserLogger(IMessageActivity toBot, IConnectorClient client) { SetField.NotNull(out _toBot, nameof(toBot), toBot); SetField.NotNull(out _client, nameof(client), client); } public IMessageActivity MakeMessage() { var toBotActivity = (Activity)_toBot; return toBotActivity.CreateReply(); } public async Task PostAsync(IMessageActivity message, CancellationToken cancellationToken = default(CancellationToken)) { await _client.Conversations.ReplyToActivityAsync((Activity)message, cancellationToken); } } public class BotToUserDatabaseWriter : IBotToUser { private readonly IBotToUser _inner; public BotToUserDatabaseWriter(IBotToUser inner) { SetField.NotNull(out _inner, nameof(inner), inner); } public IMessageActivity MakeMessage() { return _inner.MakeMessage(); } public async Task PostAsync(IMessageActivity message, CancellationToken cancellationToken = default(CancellationToken)) { // loging outgoing message Debug.WriteLine(message.Text); //TODO log message for example into DB await _inner.PostAsync(message, cancellationToken); } 

발견 그들은 그것을 삭제할 수 있습니다. –

+0

감사합니다. 나는 완전한 대화가 필요하다. 대화를 삭제하는 것은 다음 간단한 단계입니다 .. –

답변

2

작업 난 당신이 저장하고 어떻게되는 정보의 종류를 사용자에게 공개 할 기술적으로이 작업을 수행 할 때마다이 기억하는 방법을 넘어 컨트롤러를 사용

public MessagesController() 
    { 
     var builder = new ContainerBuilder(); 
     builder.RegisterType<BotToUserLogger>() 
      .AsSelf() 
      .InstancePerLifetimeScope(); 

     builder.Register(c => new BotToUserTextWriter(c.Resolve<BotToUserLogger>())) 
      .AsImplementedInterfaces() 
      .InstancePerLifetimeScope(); 
     builder.Update(Microsoft.Bot.Builder.Dialogs.Conversation.Container); 
    } 
+1

위대한 대답. 생성자의 사소한 수정 'builder.Register (c => 새로운 BotToUserTextWriter (c.Resolve (), Console.Out))' – jcmontx

+0

사용자를 bot 메시지로 보내는 것은 어떻습니까? 어떤 생각 IPostToBot을 등록하는 방법? – miraco

0

그것은 보인다.

SDK 소스 코드가 변경되었습니다. 이 같은 예를 들어

Conversations.cs

에서

추가 이벤트입니다.

public delegate void MessageSendedEventHandler(object sender, Activity activity, string conversationId); 
    public static event MessageSendedEventHandler MessageSended; 

그리고 모든 보내기 .... HttpMessagesAsync을 방법 이 MessageSended?.Invoke(this, activity, conversationId);

가장 큰되지 솔루션에 추가 할 수 있습니다. 그러나 그것의