我们如何将用户和机器人消息记录到微软机器人框架中的cosmos db

2023-12-15

我使用 microsoft bot Framework v4 sdk 创建了一个聊天机器人。我想将机器人用户和机器人消息记录到 cosmos db。

我只能使用下面的博客记录用户消息 .

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


值得庆幸的是,这很容易,因为记录器 and TranscriptLogger中间件已经存在。

创建您的 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);
[...]

Result:

enter image description here

enter image description here

Note:

这可能是最简单/最好的方法。但是,您也可以在下面捕获传出活动OnTurnAsync() using turnContext.OnSendActivities()然后将传出活动也写入存储。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们如何将用户和机器人消息记录到微软机器人框架中的cosmos db 的相关文章

随机推荐

  • 单击坐标而不识别元素

    作为我的 Selenium 登录功能测试的一部分 我想通过识别按钮的坐标并指示 Selenium 单击这些坐标来单击按钮 这可以在不识别元素本身的情况下完成 通过 id xpath 等 我知道还有其他更有效的方法来运行单击命令 但我希望专门
  • 即使浏览器关闭,CodeIgniter 如何保留会话数据?

    我想知道 CodeIgniter 中的会话是如何工作的 当浏览器关闭时 会话不是应该自动终止吗 默认情况下 CodeIgniter 不会在浏览器关闭时销毁会话 config sess expire on close FALSE 相反 我们可
  • Chart.js 工具提示模板不起作用

    因此 我正在 Chart js 中使用条形图 并且尝试让自定义工具提示正常工作 环顾四周 似乎在这种情况下要做的事情是添加 tooltipTemplate test 到我的选项部分 这将在结果工具提示中的数据值后面显示单词 test 然而
  • 在 SQL 中存储用户定义数据的正确方法

    我想构建一个类似于 wufoo 的在线表单生成器 允许用户创建和发布自己的 Web 表单 每个提交内容都应保存到数据库中 用户稍后可以在数据库中检索提交内容 因为这些形式将是动态的 即 用户可以完全控制表单字段的数量和类型我正在尝试考虑一个
  • PHP - 当变量放入 url 时,include() 文件不起作用?

    在 PHP 中 我构建了一个网页 它使用 include 来加载网站的某些部分 然而 我现在遇到了一个类似的问题 当我使用如下网址时 data openov storingen php type actueel它给了我这个错误 Warnin
  • 如何通过 tasytpie API 将产品放入购物车?

    假设我们有这些模型 原始项目有所不同 但这将是常见任务 class Cart models Model owner models ForeignKey User products models ManyToManyField Product
  • excel vba - 多条件索引匹配

    我正在尝试在 vba 中执行多条件索引匹配函数 但我似乎无法得到结果 我使用的代码如下 wsDest Range wsDest Cells i X wsDest Cells i X Application WorksheetFunction
  • 如何使用 while 循环和拆分来汇总逗号和换行符分隔的 CSV 文件中的数据?

    Perl 脚本必须加载 CSV 数据文件并对文件中的所有数字求和 文件中只有数字 以逗号和换行符分隔 我已经完成了大部分代码 但我没有得到正确的总数 我可能会忽略某些事情或对一两个概念有根本性的误解 任何帮助将不胜感激 全部汇总的 CSV
  • 如何在 TForm 以外的控件中捕获 WM_DEVICECHANGE?

    直到今天我一直在使用以下代码来捕获WM DEVICECHANGE应用程序主窗体中的消息并且它运行良好 但是 如果我尝试在自定义控件中使用它 我不会收到有关设备插入或删除的通知 怎么了 TDriveBar class TCustomPanel
  • 将闪亮与 Quantstrat 回测相结合

    我正在尝试制作一个网络应用程序 目的是使用 quantstrat 然而 我在整合两者方面遇到了一些困难 没有这方面的文档 所以很难找到一个开始的地方 这是我现在的代码 如果您能让我知道我做错了什么 我将不胜感激 谢谢 library shi
  • 将新值插入数组

    我目前有不同长度的列向量 我想在原始数组的各个点插入另一个列向量 即 我想将新数组添加到旧数组的开头 跳过 10 个位置 再次添加新数组 再跳过 10 个空格 再次添加新数组 依此类推 直到数组末尾 我可以使用以下方法来做到这一点 Offs
  • onTouch() 连续播放声音

    我想通过onTouch连续播放枪声 我这样做是为了自动枪的声音 所以我有声音循环延迟的问题 它不会给出真正的自动枪声音效果 我的主要观点是 声音一次又一次播放时不应有延迟 我的代码是 public boolean onTouch View
  • Mysqli 准备好的 Stmt 返回 0 num_rows [重复]

    这个问题在这里已经有答案了 帮助 我得到 0 num rows 但如果我在控制台中执行查询我会得到结果 我对准备好的 stmts 有点陌生 这是我的代码 数据库连接类 class DbConnection const HOST localh
  • Delphi中如何发送广播消息

    我想在我的局域网中发送广播UDP消息 应用程序是客户端 服务器 我希望更新用户界面 这样任何计算机都会发送消息来更新其他计算机 我可以使用UDPServer indy吗 如何使用 谢谢 创建两个应用程序 一个代表发送者 另一个代表接收者 S
  • 使用DBCC CHECKIDENT重新启动Identity列计数后是否可以回滚到原始状态?

    目前 在某些操作中 我必须删除旧数据并插入新数据 但我注意到 尽管删除了数据 但身份列并未重置并从其最后一个最大值继续 因此 我使用 DBCC CheckIdent 来实现相同的目的 所有这些都在事务中发生 我可以将事务回滚到初始状态吗 D
  • Django 在 save() 方法之后插入新对象而不是更新

    当试图update现有的 Django 模型对象 带有save 方法 一个new而是插入行 例如 gt gt gt import datetime gt gt gt from data lib models import Meal gt g
  • 如何配置 Poltergeist 或 PhantomJS 不遵循重定向?

    我有一些测试要求 JS 驱动程序不遵循重定向 是否可以配置 Poltergeist 来执行此操作 我注意到可以使用以下命令将命令传递给 PhantomJS命令行界面 所以也许这是另一种方法 我对Poltergeist不熟悉 所以我只回答Ph
  • 在Python中使用中文构建字典

    这是我第一次来这里 而且我对 Python 世界还是个新手 我也在学习中文 我想创建一个程序来使用字典复习中文词汇 这是我通常使用的代码 usr bin python coding utf 8 dictionary Hello 你好 Sim
  • 从 Flask 中的数据库中删除元素

    我想确保我在这里遵循最佳实践 我有一个从数据库中提取的数据表 在最后一列中 我有用于编辑或删除该行的链接 我觉得我总是被告知永远不要使用 GET 请求修改服务器上的数据 除了 GET 请求之外 我将如何处理删除此数据行 数据表的代码如下 t
  • 我们如何将用户和机器人消息记录到微软机器人框架中的cosmos db

    我使用 microsoft bot Framework v4 sdk 创建了一个聊天机器人 我想将机器人用户和机器人消息记录到 cosmos db 我只能使用下面的博客记录用户消息 我希望记录用户和机器人的响应 值得庆幸的是 这很容易 因为