2017-11-24 2 views
1

Ich verwende Microsoft bot Rahmen einen Bot zu erstellen und direkten Kanal mit in Web zu integrieren, das Gespräch application.During, muss ich Lesezeichen oder wie die Nachricht oder Antwort des bot.Wie man Mitteilung Lesezeichen botframework mit

+0

Können Sie bitte "Lesezeichen" oder "Gefällt mir" klären? Wenn Sie darüber sprechen, das Ergebnis für die spätere Verwendung zu speichern. Jede serialisierbare Eigenschaft, die Sie im selben Dialogfeld haben, bleibt für die gesamte Dialogsitzung erhalten. Wenn nicht serialisierbar, treten Sie wahrscheinlich in einen Laufzeitfehler ein. –

Antwort

1

Bot-Framework nicht über diese functionailty in SDKs implementieren. Sie können die Middleware-Funktion nutzen, um sie selbst zu implementieren.

Allgemeine Idee ist, können Sie alle Aktivität Nachrichtenpaare mit Ihren Benutzern speichern. Und ein global message handlers für mark oder like erstellen oder jede Nachricht in Middleware erkennen Benutzer zu überprüfen, ob die mark oder like. Wenn Sie das Tag mard für die zuletzt gespeicherte Nachricht markieren können.

Für das Beispiel der Middleware-Verwendung, siehe https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/core-Middleware für C# und https://github.com/Microsoft/BotBuilder-Samples/tree/master/Node/capability-middlewareLogging für Node.js.

Alle weiteren Bedenken, bitte zögern Sie nicht, lassen Sie es mich wissen.

0

Umsetzung der IActivityLogger, die im Namensraum Microsoft.Bot.Builder.History gibt es die IMessageActivity Nachricht in einer DB oder einem Cache zu speichern/Lesezeichen.

IActivityLogger wird intercept jede Nachricht von Ihrem Dialog, die IDialog-Schnittstelle implementiert.

Dies ist für jede Nachricht abfängt, die gesendet wird und empfangen zu fro von dem Benutzer und der bietet.

1) Für Dialoge die iDialog Schnittstelle implementiert:

using Microsoft.Bot.Builder.History; 
using Microsoft.Bot.Connector; 
using MongoDB.Bson; 
using MongoDB.Driver; 
using System; 
using System.Threading.Tasks; 

namespace DemoBot.Dialogs 
{ 
    public class Logger : IActivityLogger 
    { 

     private readonly IMongoClient client; 
     private readonly IMongoCollection<BsonDocument> collection; 
     public Logger() 
     { 
      client = new MongoClient(); 
      collection = client.GetDatabase("test").GetCollection<BsonDocument>("botLog"); 
     } 
     public Task LogAsync(IActivity activity) 
     { 
      IMessageActivity msgToBeLogged = activity.AsMessageActivity(); 

      BsonDocument objectToBeLogged = new BsonDocument 
      { 
       { "messageText", new BsonString(msgToBeLogged.Text) }, 
       { "timeStamp", new BsonDateTime(Convert.ToDateTime(msgToBeLogged.Timestamp)) }, 
       { "recipientId", new BsonString(msgToBeLogged.Recipient.Id) }, 
       { "fromId", new BsonString(msgToBeLogged.From.Id) }, 
       { "conversationId", new BsonString(msgToBeLogged.Conversation.Id) }, 
       { "fromName", new BsonString(msgToBeLogged.From.Name) }, 
       { "toName", new BsonString(msgToBeLogged.Recipient.Name) }, 
       { "channnel", new BsonString(msgToBeLogged.ChannelId) }, 
       { "serviceUrl",new BsonString(msgToBeLogged.ServiceUrl) }, 
       { "locale", new BsonString(msgToBeLogged.Locale)} 
      }; 

      return Task.Run(() => 
      { 
       LogIntoDB(objectToBeLogged); 
      }); 
     } 

     public void LogIntoDB(BsonDocument activityDetails) 
     { 
      collection.InsertOne(activityDetails); 
     } 
    } 
} 

2) für Dialoge, die die LuisDialog Klasse erben, die Logging-Code in der DispatchToIntentHandler Methode schreiben, ebenso wie es die eingehende Nachricht wird Pass durch dieses Verfahren in den entsprechenden Handler zu beheben:

using Microsoft.Bot.Builder.Dialogs; 
using Microsoft.Bot.Builder.Luis; 
using Microsoft.Bot.Builder.Luis.Models; 
using Microsoft.Bot.Connector; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 

namespace DemoBot.Dialogs 
{ 
    [Serializable] 
    public class RootDialog : LuisDialog<object> 
    { 
     public Task StartAsync(IDialogContext context) 
     { 
      return Task.Run(() => { context.Wait(MessageReceived); }); 
     } 

     protected override Task DispatchToIntentHandler(IDialogContext context, IAwaitable<IMessageActivity> item, IntentRecommendation bestIntent, LuisResult result) 
     { 
      IMessageActivity msgToBeLogged = context.MakeMessage(); 

      BsonDocument objectToBeLogged = new BsonDocument 
      { 
       { "messageText", new BsonString(msgToBeLogged.Text) }, 
       { "timeStamp", new BsonDateTime(Convert.ToDateTime(msgToBeLogged.Timestamp)) }, 
       { "recipientId", new BsonString(msgToBeLogged.Recipient.Id) }, 
       { "fromId", new BsonString(msgToBeLogged.From.Id) }, 
       { "conversationId", new BsonString(msgToBeLogged.Conversation.Id) }, 
       { "fromName", new BsonString(msgToBeLogged.From.Name) }, 
       { "toName", new BsonString(msgToBeLogged.Recipient.Name) }, 
       { "channnel", new BsonString(msgToBeLogged.ChannelId) }, 
       { "serviceUrl",new BsonString(msgToBeLogged.ServiceUrl) }, 
       { "locale", new BsonString(msgToBeLogged.Locale)} 
      }; 

      Task.Run(() => 
      { 
       LogIntoDB(objectToBeLogged); 
      }); 

      return base.DispatchToIntentHandler(context, item, bestIntent, result); 
     } 

     public void LogIntoDB(BsonDocument activityDetails) 
     { 
      collection.InsertOne(activityDetails); 
     } 


     public Task MessageReceived(IDialogContext context, IAwaitable<IMessageActivity> item) 
     { 
      return Task.Run(() => 
      { 
       context.Wait(MessageReceived); 
      }); 
     } 

    } 
} 

für die Protokollierung ich bin mit MongoDB, aber Sie können auch SQL Server verwenden wenn Sie wünschen.

Und schließlich die Abhängigkeiten in Ihrer global.asax.cs Datei mit Autofac IoC injizieren.

using Autofac; 
using DemoBot.Dialogs; 
using Microsoft.Bot.Builder.Dialogs; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Http; 
using System.Web.Routing; 

namespace DemoBot 
{ 
    public class WebApiApplication : System.Web.HttpApplication 
    { 
     protected void Application_Start() 
     { 
      Conversation.UpdateContainer(builder => 
      { 
       builder.RegisterType<Logger>().AsImplementedInterfaces().InstancePerDependency(); 
      }); 

      GlobalConfiguration.Configure(WebApiConfig.Register); 
     } 
    } 
} 
Verwandte Themen