2016-08-08 6 views
2

Haben Sie eine Idee, wie alle ausgehenden/eingehenden Nachrichten zu protokollieren? Ich bin mir nicht sicher, wie ich ausgehende Nachrichten erfassen kann.Botframe wie Log Geschichte

Ich benutze Ketten und Formen. Zum Beispiel

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

UND

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

Darüber hinaus, wie jeder Sie dies technisch tun, denken Sie daran, Ihre Benutzer, welche Art von Informationen offen zu legen Sie speichern und wie Sie können es löschen lassen. –

+0

Danke. Ich brauche eine vollständige Konversation. Konversation löschen ist der nächste einfache Schritt .. –

Antwort

2

fand ich bessere Lösung

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

In dem Controller

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

Große Antwort. Kleinere Lösung im Konstruktor 'builder.Register (c => neuer BotToUserTextWriter (c.Resolve (), Console.Out))' – jcmontx

+0

Wie wäre es mit Benutzer zu Bot Nachrichten? Irgendeine Idee, wie man IPostToBot registriert? – miraco

0

Sein schauen, wie ich Ansage einloggen kann nicht.

Ich habe den SDK-Quellcode geändert.

Add Ereignis in Conversations.cs

Zum Beispiel wie folgt aus.

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

Und fügen Sie in jeder schicken .... HttpMessagesAsync Methode diese MessageSended?.Invoke(this, activity, conversationId);

seine nicht große Lösung. Aber seine Arbeit