当前位置: 首页 > 知识库问答 >
问题:

在微软bot框架中,我们如何将用户和bot消息记录到comos数据库

燕涵容
2023-03-14

我已经使用微软bot框架v4 sdk创建了一个聊天机器人。我想将bot用户和bot消息记录到cosmos db。

我只能使用下面的博客记录用户消息https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-v4-storage?view=azure-bot-service-4.0

我希望记录用户和机器人的响应。

共有1个答案

谭山
2023-03-14

谢天谢地,这很容易,因为ItransptLogger和TranscriptLoggerMiddleware已经存在。

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());
            }
        }
    }
}
[...]
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在OnTurnAsync()下捕获传出活动。OnSendActivities(),然后将传出活动也写入存储器。

 类似资料:
  • 我正在开发一个基于微软bot框架的多渠道bot(专注于web和电报)(https://docs.microsoft.com/en-us/azure/bot-service/?view=azure-bot-service-4.0) 我被用户收到的最初消息所困扰。我的机器人基于Microsoft发布的复杂机器人:https://github.com/Microsoft/BotFramework-Sam

  • 问题内容: 我是Microsoft Bot框架的新手。现在,我正在模拟器上测试代码。我想在您连接后立即发送Hello消息。以下是我的代码。 上面的代码在用户发起对话时发送Hello消息。我想在用户连接后立即发送此消息。 问题答案: 钩住事件并检查何时添加了漫游器。之后,您可以发布一条消息或开始一个新对话框(如下面从ContosoFlowers Node.js示例中 提取的代码所示,尽管还有许多其他

  • 我使用Directline api进行网络聊天。 生成令牌后,连同标头中的令牌和正文中的活动对象,我请求发送到此url: https://directline.botframework.com/v3/directline/conversations/{conversationID}/活动 我得到404页未找到响应: 这是我的活动对象: {类型:消息,文本:测试Directline API,对话:{

  • 我正在python3(discord.py 1.3.3,discord 1.0.1)中开发一个discord机器人,我需要删除一条用户消息,但我不知道如何正确调用协同程序。 我查看了一些其他线程,并尝试查看文档(以及discord.py文档),但我一直没有找到答案。 以下是我正在测试的内容: 运行该命令会返回带有ID号的控制台调试消息,但不会删除该消息。如果我添加一个调试打印行后它不会返回。所以这

  • 我有2条s(特别是2条s),我希望bot发送第一条,然后单击按钮将其编辑到第二条。 机器人将发送消息(one.build())。队列(),然后它将向嵌入添加一个按钮(在我的情况下),如果用户单击该按钮,嵌入将被编辑为两个。 我已经阅读了文档,但没有得到太多信息,所以我认为堆栈溢出会有所帮助。

  • 我正在为我的Discord服务器创建一个bot。 我的服务器中有一个新的用户通道。当新用户加入时,我想向这个频道发送欢迎消息。但是,我不知道如何才能访问新用户的渠道。