簡體   English   中英

我們如何在Microsoft bot框架中將用戶消息和bot消息都記錄到comos db

[英]How can we log both user and bot messages to comos db in microsoft bot framework

我已經使用Microsoft bot框架v4 sdk創建了聊天機器人。 我想將機器人用戶和機器人消息記錄到cosmos db。

我只能使用下面的博客https://docs.microsoft.com/zh-cn/azure/bot-service/bot-builder-howto-v4-storage?view=azure-bot-service-4.0記錄用戶消息&tabs = csharp#using-cosmos-db

我希望同時記錄用戶和漫游器的響應。

幸運的是,因為ItranscriptLoggerTranscriptLoggerMiddleware已經存在,所以這非常容易。

創建您的TranscriptStore類(新的類文件)

using Microsoft.Bot.Builder;
using Microsoft.Bot.Builder.Azure;
using Microsoft.Bot.Schema;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace QuickTestBot_CSharp
{
    public class CosmosTranscriptStore : ITranscriptLogger
    {
        private CosmosDbStorage _storage;

        public CosmosTranscriptStore(CosmosDbStorageOptions config)
        {
            _storage = new CosmosDbStorage(config);
        }
        public async Task LogActivityAsync(IActivity activity)
        {
            // activity only contains Text if this is a message
            var isMessage = activity.AsMessageActivity() != null ? true : false;
            if (isMessage)
            {
                // Customize this to save whatever data you want
                var data = new
                {
                    From = activity.From,
                    To = activity.Recipient,
                    Text = activity.AsMessageActivity().Text,
                };
                var document = new Dictionary<string, object>();
                // activity.Id is being used as the Cosmos Document Id
                document.Add(activity.Id, data);
                await _storage.WriteAsync(document, new CancellationToken());
            }
        }
    }
}

創建和添加中間件(在Startup.cs中)

[...]
var config = new CosmosDbStorageOptions
{
    AuthKey = "<YourAuthKey>",
    CollectionId = "<whateverYouWant>",
    CosmosDBEndpoint = new Uri("https://<YourEndpoint>.documents.azure.com:443"),
    DatabaseId = "<whateverYouWant>",
};

var transcriptMiddleware = new TranscriptLoggerMiddleware(new CosmosTranscriptStore(config));

var middleware = options.Middleware;
middleware.Add(transcriptMiddleware);
[...]

結果:

在此處輸入圖片說明

在此處輸入圖片說明

注意:

這可能是最簡單/最佳的方法。 但是,您還可以使用turnContext.OnSendActivities()OnTurnAsync()下捕獲傳出活動,然后將傳出活動也寫入存儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM