【问题标题】:How to add additional payload to botframework messages (DirectLine)如何向 botframework 消息添加额外的有效负载 (DirectLine)
【发布时间】:2017-08-03 18:24:14
【问题描述】:

我正在使用 MS Bot Framework 开发机器人。 我们也有这个机器人的原生移动应用客户端,所以我们唯一的选择是通过套接字使用 DirectLine API。

我想知道是否可以将自定义有效负载添加到机器人发送给客户端的消息中。

假设我想返回一条包含 20 个位置的消息,每个位置都是带有图像、标题、副标题和文本的 ThumbnailCard 附件,我还想添加更多信息,例如 lat, lon, open time, close time etc. 最好的方法是什么,这可能吗?

我正在为我的机器人使用 NodeJS。我的 IDE 告诉我,目前每个 ThumbnailCard 附件只有这些选项可用:

  • 文字
  • 标题
  • 字幕
  • 图片
  • 点击

以前我使用这样的方法: message = new builder.Message(session) .attachments(thumbnails) .attachmentLayout('carousel') .entities([ { name: 'Location 1', lat: 10.11, lon: 10.11 }, { name: 'Mitul', lat: 10.11, lon: 10.11 } ]) .text('Select Location');

但后来我发现,如果我在实体中提供 1 或 2 个项目,那么我会在我的应用程序中收到它,但如果有 5-10 个具有 10-30 个属性的对象,那么我根本看不到客户端中的实体.我想我在这里使用了entities 错误。

向我的机器人消息添加自定义数据的最佳方法是什么?是否有任何大小限制,例如我可以传递多少对象?

【问题讨论】:

  • 我相信entities 是为人工智能返回的实体设计的。您或许可以改用channelData
  • @stuartd 谢谢我能够将我的数据作为 channelData 发送,但后来我检查了 Azure 中的 Log Stream 并发现了这条消息Message.setChannelData() is deprecated. Use Message.sourceEvent() instead.

标签: botframework direct-line-botframework


【解决方案1】:

您可以尝试使用消息的sourceEvent 属性。它通常用于发送特定于/本机的有效负载。

在 Direct Line v3.0 之前,不支持附件,因此 Direct Line 示例使用 sourceEvent 属性发送它们。您可以在此code snapshot 中看到这一点。

【讨论】:

  • 这种方法有效,谢谢!我能够发送大约 49 个对象作为有效负载,如果我发送更多对象,我会收到 500 个服务器错误。我将我的对象转换为 JSON 字符串,它的长度是:149 597,所以当转换为 JSON 时限制大约是 150K 符号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 2020-08-15
  • 2013-09-16
  • 2019-06-08
  • 2020-06-20
  • 2021-04-29
  • 1970-01-01
相关资源
最近更新 更多