【问题标题】:How do I send a value from a Microsoft Bot to Javascript?如何将值从 Microsoft Bot 发送到 Javascript?
【发布时间】:2018-03-28 10:51:30
【问题描述】:

我需要将一个字符串从 Microsoft Framework Bot 中的 MessagesController 发送到用 JS 编写的脚本。该字符串包含我们托管的不活动(未使用)的机器人的秘密值。有没有办法从 Azure 托管的机器人发送字符串?

编辑:我试图创建一个返回字符串但无法通过 url (sitename.azurewebsites.net/api/messages/methodname) 检索它的方法,我无法使用 Jsonresult 或 Actionresult,因为该机器人不是 MVC .

更多信息:我们设置了 5 个机器人,它们将自己设置为活跃(在聊天会话中)或不活跃(不在聊天会话中)。我们通过数据库中设置的值知道机器人是否处于活动状态。数据库中有一个存储过程,它为不活动的机器人返回一个直接的线路秘密。我想做的是把这个秘密(字符串)从数据库发送到 JavaScript,这样我们就可以动态生成一个机器人。问题是,我们不想从前端的 JS 连接到数据库,而是想从机器人(任何机器人)那里获取秘密。因此,我想从 azure 上的托管机器人将 MessagesController 中的字符串值转换为 JavaScript。

谢谢

编辑2:

 public IHttpActionResult GetString()
        {
            return Ok("it worked");
        }

returns BotAuthenticator failed to authenticate incoming request!

【问题讨论】:

  • 你试过标准的method吗?
  • 抱歉,该机器人是用 .NET 编写的,并通过网站上的纯 JavaScript 调用

标签: javascript c# botframework


【解决方案1】:

您可以实现以下目标:

我需要从 Microsoft 的 MessagesController 发送一个字符串 Framework Bot 到一个用 JS 编写的脚本。

通过使用网络聊天频道的反向频道功能。根据您的查询,我假设您在此处使用此频道。

要获取有关反向通道的更多信息,请查看here。 这个想法是从您的机器人代码中发送一个事件,该事件将由客户端的 JS 接收:

客户端 JavaScript 还会侦听来自机器人的特定事件。在他们的示例中,他们展示了根据机器人发送的事件在客户端更改颜色的能力:

botConnection.activity$
    .filter(activity => activity.type === "event" && activity.name === "changeBackground")
    .subscribe(activity => changeBackgroundColor(activity.value))

您可以使用以下方式发送您需要的秘密并激活正确的机器人。

【讨论】:

  • 感谢您的回复,尼古拉斯。我在这个建议上取得了不错的进展,但是我无法通过反向渠道返回活动。该事件已很好地发布到 MessagesController 中的 Post 方法,但是我正在努力寻找一种方法将带有值的活动返回给侦听器,有什么建议吗?您提供的链接上的反向通道示例位于 node.js 中。谢谢!
  • 这里是我目前使用的代码的 sn-p,它不是从机器人发送的:if (activity.Type == ActivityTypes.Event) { Activity Secret = activity.CreateReply(); Secret.Type = ActivityTypes.Event; Secret.Name = "changeSecret"; Secret.Value = GetInactiveBotSecret(); var connector = new ConnectorClient(new Uri(activity.ServiceUrl)); await connector.Conversations.SendToConversationAsync(Secret); // rootDialog.EndConnection(); }
  • 啊哈!我找到了,发送事件的行是rootDialog.PostEvent(Secret);。该事件已被 JavaScript 拾取,我已成功检索到该值。感谢您的帮助,我会将此标记为答案。
  • "您提供的链接上的反向通道示例在 node.js 中。"不是,它是处理从客户端 JS 到机器人的事件的示例。在您这边,您只需发送一个 Event 类型的 Activity,其中包含 Secret 值,就像您评论的那样。我错过了您的更多实施以提供更好的完整答案
  • 抱歉,我的意思是“提供的反向通道示例需要一个可以发送和接收特定事件活动的机器人。按照此处的说明部署这样的机器人。”的链接,你是对的,你发送的位是从客户端 JS 到机器人。再次感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
相关资源
最近更新 更多