首页 > 解决方案 > 如何使用机器人作曲家动态配置 HTTP 请求的正文部分

问题描述

我正在使用 Bot Composer 发布我的第一个聊天机器人。我需要构建聊天机器人来发送 HTTP POST 请求以从远程网站获取外部资源。正如 composer 接口所指定的,我可以在 HTTP POST 请求的正文中嵌入 JSON、表单数据或字符串。我不需要对 POST 请求的正文部分进行硬编码,而是需要传入一个或多个属性(聊天机器人的变量)来动态生成 HTTP POST 的正文。以下是我的问题:

(1) 我可以将变量传递给HTTP REQUEST(如POST)的正文部分吗?我可以在 HTTP POST 正文中嵌入诸如 $(user.name) 的属性吗?

例如,我可以在字符串或表单数据中嵌入诸如 $(user.name) 的属性(如 fname=$(user.name) 来构造 HTTP POST REQUEST 的正文部分吗?

(2) 文档规定有一个预构建函数JSON来序列化数据。如果我理解正确,我无法将变量(例如 $(user.name) 传递给 JSON 预构建函数。因此,我可能需要在正文中嵌入一个表达式来传递变量。然而,我找不到任何详细信息。有没有什么地方可以找到一个很好的例子来展示如何在 HTTP REQUEST 的正文部分中编写表达式

感谢您提供任何信息/帮助。

标签: botframeworkchatbotazure-bot-service

解决方案


是的,你可以这样做。最简单的方法是将正文设置为Object然后放入结构化的 json,类似于:

{
  "userinfo": {
    "username": "${user.username}",
    "name": "${user.personalname}",
    "favoritecolor": "${user.favcolor}",
    "profileupdated":"${dialog.userprofileuptodate}"
  }
}

我试图弄清楚如何在 LG 的自适应表达式中设置它,然后能够用类似的东西来引用它:

# APIBodyTemplate()
-```
{
  "userinfo": {
    "username": "${user.username}",
    "name": "${user.personalname}",
    "favoritecolor": "${user.favcolor}",
    "profileupdated":"${dialog.userprofileuptodate}"
  }
}
```

然后在 body 字段的表达式中使用类似以下的内容: =json(APIBodyTemplate()),但这还不太有效。可能是一个错误。当我有更多信息时,我会更新。


推荐阅读