在Watson Assistant中处理来自IBM Cloud Function的多个答案

时间:2019-05-15 11:33:18

标签: ibm-cloud ibm-watson watson-assistant ibm-cloud-functions

我需要在Watson Assistant对话节点中显示未知数量的按钮。按钮的数据来自IBM Cloud Function。

如果我在节点中手动设置响应类型“选项”答案,则JSON对象如下所示:

{
  "output": {
    "generic": [
      {
        "title": "Välj mötestyp",
        "options": [
          {
            "label": "Rådgivning familjerätt 30 min",
            "value": {
              "input": {
                "text": "447472"
              }
            }
          },
          {
            "label": "Rådgivning familjerätt 60 min",
            "value": {
              "input": {
                "text": "448032"
              }
            }
          }
        ],
        "description": "Välj typ av möte du vill boka",
        "response_type": "option",
        "preference": "dropdown"
      }
    ]
  }
}

我的云函数可以使用x个选项创建此JSON。但是如何在助手中使用这些数据?

最简单的方法是让云函数生成完整的JSON,然后像这样输出返回的JSON:

{
  $context.output"
}

..但这是不允许的。

从我的函数生成的输出对象:

[{"serviceId":447472,"serviceName":"Rådgivning Familjerätt 30 min"},{"serviceId":448032,"serviceName":"Rådgivning Familjerätt 60 min"}]

有关如何执行此操作的任何建议?

1 个答案:

答案 0 :(得分:0)

我看不到生成整个输出和选项的简单方法。您可以做的是这样:

  1. 生成选项标签和值
  2. 将它们传递到具有针对1,2,3等选项的预定义结构的通用输出节点。根据上下文变量的数组大小检查要填充的预定义响应结构。

我测试了以下内容:

  {
  "context": {"my": [ {
            "label": "First option",
            "value": "one" 
          },
          {
            "label": "Second",
            "value": "two" }]},


  "output": {
    "generic": [
      {
        "title": "This is a test",
        "options": [{"label": "<? $my[0].label ?>", 
                     "value": {
              "input": {
                "text": "my[0].value"
              }
            }
},{"label": "<? $my[1].label ?>",             "value": {
              "input": {
                "text": "<? $my[1].value ?>"
              }
            }
}],
        "response_type": "option"
      }
    ]
  }
}

它使用选项定义了上下文变量,类似于选项结构。在输出中访问标签和值,然后修改,以证明它们已被使用并且可以修改。