是否可以像来自用户一样向 Bot Framework 发送消息?

2024-02-26

我正在使用 Direct Line 3.0 和 Microsoft Bot Framework,并要求网页将一些表单字段发送到机器人,就像用户发送它们一样。例如,当用户按下“提交”时,电子邮件、电话等字段将被发送到机器人,就像用户这样发送它们:电子邮件、电话等。 这是因为机器人根据值来重定向用户。该机器人采用 C# 语言编写,托管在 Azure 上。提交信息的逻辑应使用 JavaScript。

Bot 的启动方式如下:

<div id="chat" style="background-color:white;   
   width:250px;height:600px;"><div id="bot" />
<script src="https://cdn.botframework.com/botframework-
webchat/latest/botchat.js"></script></div></div>

并通过 DirectLine 脚本:

<script>
    const botConnection = new BotChat.DirectLine({
        secret: 'secret',
    });

    BotChat.App({
        user: { id: 'You' },
        bot: { id: 'myId' },
        resize: 'detect',
        botConnection: botConnection
    }, document.getElementById("bot"));

</script>

我所需要的只是发送一个字符串,就像用户发送它一样。我似乎无法通过 HTML 操作来做到这一点。

感谢任何人为我指出正确的方向!


使用网络聊天的“反向通道”功能可以“像用户一样”向机器人发送消息。

Github 网络聊天页面上的自述文件中有一个很好的使用示例:https://github.com/Microsoft/BotFramework-WebChat#the-backchannel https://github.com/Microsoft/BotFramework-WebChat#the-backchannel.

你必须使用你的botConnection之前创建的发送活动如下所示:

botConnection.postActivity({
    from: { id: 'me' },
    name: 'buttonClicked',
    type: 'event',
    value: ''
});

然后在您的机器人代码中捕获此内容,但检查活动类型,该类型将是Event在这种情况下。

您可以查看他们如何通过单击提供的示例中的按钮来抛出此 postActivity:此处的示例:https://github.com/Microsoft/BotFramework-WebChat/blob/master/samples/backchannel/index.html https://github.com/Microsoft/BotFramework-WebChat/blob/master/samples/backchannel/index.html

或者在这个其他sample https://github.com/nrobert/Bot-Language-Demo/tree/master/Bot.Language.Demo我制作的(可在 Github 上找到,包括客户端网页和机器人代码):机器人的控制器如下所示:

[BotAuthentication]
public class MessagesController : ApiController
{
    /// <summary>
    /// POST: api/Messages
    /// Receive a message from a user and reply to it
    /// </summary>
    public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
    {
        // Process each activity
        if (activity.Type == ActivityTypes.Message)
        {
            await Conversation.SendAsync(activity, () => new Dialogs.RootDialog());
        }
        // Webchat: getting an "event" activity for our js code
        else if (activity.Type == ActivityTypes.Event && activity.ChannelId == "webchat")
        {
            var receivedEvent = activity.AsEventActivity();

            if ("localeSelectionEvent".Equals(receivedEvent.Name, StringComparison.InvariantCultureIgnoreCase))
            {
                await EchoLocaleAsync(activity, activity.Locale);
            }
        }
        // Sample for Skype: locale is provided in ContactRelationUpdate event
        else if (activity.Type == ActivityTypes.ContactRelationUpdate && activity.ChannelId == "skype")
        {
            await EchoLocaleAsync(activity, activity.Entities[0].Properties["locale"].ToString());
        }

        var response = Request.CreateResponse(HttpStatusCode.OK);
        return response;
    }

    private async Task EchoLocaleAsync(Activity activity, string inputLocale)
    {
        Activity reply = activity.CreateReply($"User locale is {inputLocale}, you should use this language for further treatment");
        var connector = new ConnectorClient(new Uri(activity.ServiceUrl));
        await connector.Conversations.SendToConversationAsync(reply);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以像来自用户一样向 Bot Framework 发送消息? 的相关文章

  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • Gmail 和 Google Chrome 12+ 中的“从剪贴板粘贴图像”功能如何工作?

    我注意到一个来自 Google 的博文 http gmailblog blogspot com 2011 06 pasting images into messages just got html其中提到 如果您使用的是最新版本的 Chro
  • 如何使用 jest 通过 Promise.all 设置多次提取测试

    我在测试中使用 jest 我正在使用 React 和 Redux 并且执行以下操作 function getData id notify return dispatch gt dispatch anotherFunction Promise
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • Onblur 事件在另一个 div 的 onclick 之前触发

    如上所述 我有一个按钮 单击该按钮将打开子菜单 对于子菜单中的每个选项 都有三个元素 我认为实际上还有更多元素 但为了简单起见 将其保留为 3 我将焦点放在子菜单的主 div 白色 框架 上 Onblur 这个 div 然后我隐藏子菜单 这
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • JavaScript 中的最短路径

    几周来我一直在寻找一种在 JavaScript 中计算最短路径的方法 我一直在玩书数据结构和算法作者 格罗纳 Groner 名字恰如其分 https github com loiane javascript datastructs algo
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • 如何随着分辨率的变化自动调整大小和调整表单控件

    我注意到某些应用程序会更改控件的位置以尽可能适应当前的分辨率 例如 如果窗口最大化 则控件的设置方式应使整个 GUI 看起来平衡 是否可以使用 C 在 Visual studio 2010 中制作或实现此功能 Use Dock http m
  • 适用于多应用项目的 Grunt 和 requirejs 优化器

    我在让 Grunt 对具有以下结构的项目执行 requirejs 优化时遇到问题 static js apps app js dash js news js many more app files build collections lib
  • Socket.io 与服务器离线连接

    如何检测服务器是否离线或由于其他原因无法连接 我的代码看起来像这样 this socket io connect connectionInfo reconnect false 它不会抛出任何错误 因此 try catch 子句不起作用 Us
  • Angular 停止 Enter 键提交

    I am trying to stop the Enter from submitting my button and rather make it point to another function I tried trapping th
  • 为什么要在 C++ 中使用 typedef?

    可以说我有 set
  • 在firefox上用js改变表单方法

    我需要使用 javascript jQuery 或纯 更改表单的方法属性 我的表单有 method post 我尝试用以下方法更改它 submit button click function var url input id url val
  • ASP.NET JQuery AJAX POST 返回数据,但在 401 响应内

    我的应用程序中有一个网页 需要调用我设置的 Web 服务来返回对象列表 这个调用是这样设置的 document ready function var response ajax type POST contentType applicati
  • 有没有办法从画布上清除一个元素而不消除其他元素?

    我正在使用画布构建页面加载器 并使用 es6 类 虽然目前我无法使其正常工作 原因之一是我找不到清除画布的方法进展 到目前为止 这是我的代码 class Loader constructor width height this width
  • 初始化 LPCTSTR /LPCWSTR [重复]

    这个问题在这里已经有答案了 我很难理解并使其正常工作 基本上归结为我无法成功初始化这种类型的变量 它需要有说的内容7 2E25DC9D 0 USB003 有人可以解释 展示这种类型的正确初始化和类似的值吗 我已查看此站点上的所有帮助 将项目
  • 为什么文件更新时“如果较新则复制”不复制文件?

    我在 Visual Studio Express 中有一个解决方案 如下所示 The LogicSchemaC 中的类 将在运行时解析指定的 XML 文件 以下是在main的方法Program cs LogicSchema ls new L
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne

随机推荐

  • 如何使用 tcc 和 tc 在 Dos 提示符下编译 C 程序

    我想在 dos 提示符下使用 tcc 和 tc 编译 c 程序 而不使用 c 编辑器 请给出完整的程序 我会查看 TCC 文档 特别是快速入门指南 http bellard org tcc tcc doc html SEC3 在 TCC 网
  • 在 Windows 上使用与 Rtools 和 Rcpp 附带的不同的 gcc 版本

    在我开始更新 gcc 之前 是否有人真正尝试过这一点 他们能否确认需要从源代码构建 R 来更新用于使用 Rcpp 编译 c 代码的 gcc 版本 即不一定用于包创作 当然也不适用于 CRAN 有效 包 请参阅德克对此问题的回答 以及原发帖者
  • ValueError:num 必须为 1 <= num <= 2,而不是 3

    我有以下内容dataframe我使用生成的pivot table 我正在使用以下代码boxplot多列 fig plt figure for i in range 0 25 ax plt subplot 1 2 i 1 toPlot1 bo
  • 升级到 IntelliJ 14 后出现 Java 和 Scala ClassNotFoundException

    我最近升级到IntelliJ 14 然后添加Scala支持 我的主文件停止运行 例如 GUI 文件 它没有错误并且完全独立hello world测试此错误的样式 Exception in thread main java lang Clas
  • 如何让 div 到达页面顶部后随页面向下滚动?

    我知道标题有点令人困惑 D 但基本上我想要做的事情已经在这个网站上清楚地展示了http 9gag com http 9gag com向下滚动并注意侧边栏 有 2 个广告 一旦第二个广告到达页面顶部 它就会开始向下滚动页面 我想知道如何做到这
  • 用于在基于着色器的游戏中进行渲染的 OO 架构

    在构建游戏引擎时 我一直遇到这个问题 我的类希望看起来像这样 interface Entity draw class World draw for e in entities e draw 这只是伪代码 大致展示了绘图是如何发生的 每个实体
  • 错误:无法使用 Google Cloud Function 和 Express 处理请求

    这是我的代码 为什么当我访问云函数的 url 时 我收到此消息 错误 无法处理请求 但没有看到 Hello World 谢谢 exports simple req res gt var express require express var
  • 如何使用新语法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 C++ 在 Windows 上创建具有 UNICODE 路径的文件

    我想知道哪个 Win32 API 调用正在创建具有 UNICODE 路径的文件 只是为了确保 我在这里谈论的不是内容 而是文件路径 如果有人能用 MSDN 网址打我 我将不胜感激 这次我的 google fu 失败了 预先感谢一百万 See
  • R CRAN 检查中的注意事项 -- * 检查顶级文件... 注意 如果未安装“pandoc”,则无法检查文件 README.md

    我正在检查我的 R 包是否有 CRAN 提交 但有一个注释我无法删除 我用谷歌搜索了它 但似乎这个注释并不常见 因此我没有找到太多有用的信息 任何人都可以为我提供解决方案吗 以下是输出的一部分R CMD check as cran usin
  • 异常后重置 Cuda 上下文

    我有一个使用 Cuda C 的工作应用程序 但有时 由于内存泄漏 会引发异常 我需要能够实时重置 GPU 我的应用程序是服务器 因此它必须保持可用 我尝试过类似的方法 但似乎不起作用 try do process using GPU cat
  • ifstream 相当于 FILE * 的倒回方法

    我的任务是将一些 C 代码更新为 C 并且很好奇 ifstream 中 C FILE 的倒带方法的等效方法或实现是什么 那将是seekg http en cppreference com w cpp io basic istream see
  • 通过另一个列表过滤一个列表 C#

    我有以下业务对象 public class ItemCategoryBO public string ItemCategory get set public string Title get set public class ItemBO
  • 填充 std::tuple

    我有一个重载函数 如下所示 template
  • Javascript 获取 Flask json

    所以我试图将 Flask 服务器连接到前端创建反应应用程序 现在我只想验证我是否可以在两者之间发送 json 下面是每个错误的代码以及更多关于错误的描述 创建 React App 获取 import React Component from
  • 使用 Networkx 绘制带边的图

    我一直被一件很简单的事情所困扰 我正在尝试绘制并显示一个具有 2 个节点和 1 个边的图 但我收到这个错误 Traceback most recent call last File
  • 安装 MySQL-python

    我在尝试在我的 Ubuntu Linux Box 上安装 MySQL python 时遇到以下失败 从下面来看 问题似乎是sh mysql config not found有人可以建议我该怎么做吗 rmicro ubuntu pip ins
  • CSS 类定义在 元素内不起作用

    你们能告诉我为什么 css 类定义在下面的示例中不起作用吗 我正在使用 GWT 2 4 Chrome 17
  • 历史推送状态和滚动位置

    当用户使用 HTML5 popstate 处理程序导航回浏览器历史记录时 我尝试检索滚动位置 这是我所拥有的 document ready function window on popstate PopStateHandler link c
  • 是否可以像来自用户一样向 Bot Framework 发送消息?

    我正在使用 Direct Line 3 0 和 Microsoft Bot Framework 并要求网页将一些表单字段发送到机器人 就像用户发送它们一样 例如 当用户按下 提交 时 电子邮件 电话等字段将被发送到机器人 就像用户这样发送它