Bot框架获取内嵌聊天控制页面的ServiceUrl

2023-12-19

我想将聊天控件嵌入到许多网站,并且我想获取已嵌入网站的 Url,以便我的机器人可以获得与网站 URL 匹配的数据。但是,当我嵌入从 WebChat 生成的 iframe 时,我总是得到相同的 ServiceUrl,这就是https://webchat.botframework.com/ https://webchat.botframework.com/,它不是网站的 Url,那么我如何将聊天控件嵌入到任何网站,并且我的机器人可以获取网站 Url,而不是 WebChat 或 DirectLine 的 Url。

这是我尝试过的:直线聊天控制 https://codepaste.net/umd5gv

Here's the result I've tested with my published bot: Result

我注意到,当我使用 Bot Framework Emulator 测试我的机器人时,它总是返回发件人的确切 Url(在本地测试的情况下,它将返回http://本地主机:XXXX/ http://localhost:XXXX/)。那么我们怎样才能这样做呢?


我认为实现这一目标的一种方法是使用 BackChannel,它增加了机器人与通过 WebChat 嵌入机器人的页面进行通信的能力。它将允许您:

  • 将事件发送到托管 WebChat 实例的页面
  • 监听来自托管 WebChat 实例的页面的事件

当然,第一部分是 HTML 页面,其中包含您组合的内容,以及发送/侦听事件的逻辑。具有基本逻辑的示例页面可以找到here https://github.com/Microsoft/BotFramework-WebChat/blob/master/samples/backchannel/index.html下面是带有事件相关代码的图像。

现在,您需要准备您的机器人来侦听和发送事件。有一个sample https://github.com/ryanvolum/backChannelBot/blob/master/app.js in Node.js,这展示了如何做到这一点。

将其移植到C#,就像监听和发送事件类型的活动一样简单。示例代码(使用前面提到的 HTML 页面的事件):

public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
    if (activity.Type == ActivityTypes.Event &&
        string.Equals(activity.Name, "buttonClicked", StringComparison.InvariantCultureIgnoreCase))
    {
        ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));

        // return our reply to the user
        Activity reply = activity.CreateReply("I see that you just pushed that button");
        await connector.Conversations.ReplyToActivityAsync(reply);
    }

    if (activity.Type == ActivityTypes.Message)
    {
        ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));

        // return our reply to the user
        var reply = activity.CreateReply();
        reply.Type = ActivityTypes.Event;
        reply.Name = "changeBackground";
        reply.Value = activity.Text;
        await connector.Conversations.ReplyToActivityAsync(reply);
    }
    else
    {
        HandleSystemMessage(activity);
    }
    var response = Request.CreateResponse(HttpStatusCode.OK);
    return response;
}

最重要的是,在 HTML 页面中,您必须向机器人发送一个带有页面 URL 的事件,机器人必须监听该事件才能获取值

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

Bot框架获取内嵌聊天控制页面的ServiceUrl 的相关文章

  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • *.tlb 文件在运行时使用过吗?

    我正在开发一个通过 COM 互操作公开一些 NET API 的产品 作为构建的一部分 我们为所有此类程序集生成 tlb 文件 并将它们作为单独 SDK 包的一部分提供 我们的客户可以在我们的产品之上安装 SDK 并创建使用我们的 COM A
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器

随机推荐

  • 使用具有按钮属性的不同命令按钮触发相同的宏

    正如主题所建议的 我已经构建了一个需要变量输入的宏 Sub GetFile Account as String 目前我正在设置多个子程序来调用脚本并将它们分配给不同的命令按钮 Sub AC1 File Call GetFile Accoun
  • 无法从 Django sqlite3 数据库中删除项目,出现错误“外键约束失败”

    有一些项目无法从我的 Django sqlite3 数据库中删除或编辑 当尝试删除这些项目时 我得到integrity error foreign key constraint failed 令人沮丧的是 我的数据库中的大多数项目并非如此
  • 如何直接从 VSCode 运行和调试 React 应用程序?

    我希望能够直接从 VSCode 编译和运行 React 应用程序 然后进入调试模式 无论它是 javascript 还是 Typescript React 应用程序 都可以执行此操作 预期的步骤是 Run npm start 在浏览器中启动
  • 如何在点击WPF按钮时禁用它的边框?

    如何在单击 WPF 按钮时禁用其边框 我有如下创建按钮 除了单击该按钮外 一切正常
  • 将变量钳位在范围内

    给定两个值x and b 我想要一个函数来钳位x落入 b b 尤其 If x小于或等于 b 然后函数返回 b If x大于 b并且小于b 然后函数返回x If x大于或等于b 然后函数返回b 在 R 中我写了以下函数truncfn 此功能仅
  • 我可以将 unsigned char 转换为 char ,反之亦然吗?

    我想使用一个需要这样数据的函数 void process char data in int data len 所以它实际上只是处理一些字节 但当涉及到原始字节时 我更喜欢使用 unsigned char 不知何故 感觉 只处理正的 0 到
  • 获取元素的实际浮点宽度

    我正在使用 jQuery v1 7 1 并且需要获取元素的绝对浮点宽度 但 jQuery 的所有宽度方法似乎都会对宽度值进行四舍五入 例如 如果元素的实际宽度是20 333333px jQuery的width方法返回20 即忽略小数值 你可
  • Shared_ptr 自定义删除器

    我需要为shared ptr 做自定义删除器 我知道这可以通过类似的方式完成 std shared ptr
  • 如何让 python 打印 1 而不是 1.0

    我正在制作一个数学求解程序 它不断将整数打印为小数 就像1是1 0 5是5 0 我的代码是 print Type in the cooridinates of the two points print print print First p
  • C# 中构造函数的返回类型是什么?

    我在 Java 上问过这个问题this https stackoverflow com q 8868117 350601 link 我在 java 中得到了一些答案 现在我想在 C 中知道它 正如我们所知 我们不必向 C 构造函数添加任何返
  • 构建 cordova-wp8 进行调试时,MSBuild 无法创建 .xap

    我正在构建一个 cordova 应用程序并尝试在 cmd 提示符中运行 cordova build wp8 但这似乎出错了 Your environment has been set up for using Node js 0 10 25
  • 代码生成器或 T4 模板,它们真的很邪恶吗?

    我听人们说不应使用代码生成器和 T4 模板 其背后的逻辑是 如果您使用生成器生成代码 那么有一种更好更有效的方法通过泛型和模板来构建代码 虽然我稍微同意上面的这一说法 但我还没有真正找到有效的方法来构建可以实例化自身的模板 换句话说 我永远
  • 无法存储mysql中执行语句的返回值

    使用 MySQL 我尝试创建一个存储过程来检索任何给定表中 varchar 列的最大值 我想将该列的值增加 1 然后用它来存储其他字段 我不希望该列为 int 且自动递增 我现在拥有的存储过程是 分隔符 use gounicartdb DR
  • 在 ViewScript 中显示 Zend_Form 表单错误

    我正在尝试使用 ViewScript 在表单之前显示所有表单错误 这是我当前尝试在 ViewScript 中使用的代码 div class errors div 此调用给我一条错误消息 警告 htmlspecialchars 期望参数 1
  • 获取 Pandas DataFrame 中行匹配条件的第一列值

    假设我有一个 pandas 数据框 如下所示 color number 0 red 3 1 blue 4 2 green 2 3 blue 2 我想从颜色列具有值的数字列中获取第一个值 blue 在这种情况下会返回4 我知道这可以使用loc
  • Android中一些Paint常量的含义

    Android 中有一些 Paint 常量 我找不到太多信息 谁能帮我解释一下这些标志 LINEAR TEXT FLAG SUBPIXEL TEXT FLAG FILTER BITMAP FLAG 子像素 模式是否接近 ClearType
  • 如何在 PostgreSQL 中进行数据透视

    我是 PostgreSQL 新手 假设我有一个如下表 colorname Hexa rgb rgbvalue Violet 8B00FF r 139 Violet 8B00FF g 0 Violet 8B00FF b 255 Indigo
  • 将相同的值转发给两个或多个函数

    当使用转发引用时 转发引用是一个坏主意吗 多个函数具有相同的值 考虑下面的代码 template
  • 如何在golang中测试io.writer?

    最近希望为golang写一个单元测试 其功能如下 func s containerStats Display w io Writer error fmt Fprintf w s s n hello world return nil 那么如何
  • Bot框架获取内嵌聊天控制页面的ServiceUrl

    我想将聊天控件嵌入到许多网站 并且我想获取已嵌入网站的 Url 以便我的机器人可以获得与网站 URL 匹配的数据 但是 当我嵌入从 WebChat 生成的 iframe 时 我总是得到相同的 ServiceUrl 这就是https webc