IBM Watson Conversation и IBM Cloud Functions: ввод параметров пользователем

Я уже создал функцию в IBM Cloud Functions, но как мне реализовать параметры из пользовательского ввода?

Я пытаюсь сделать

  • Например: когда пользователь вводит «Мне нужен продукт» / «Купить продукт сейчас» / Показать мне продукты. Вход product используется как параметр и реализует его в моей облачной функции, которая отображает все продукты, для которых product используется в качестве ключевого слова.
  • The response text would get info from the Cloud Function return output (which is a JSON array)
    • (res.body.items[?].name)

Пример макета от IBM:

{
    "context": {
      "variable_name" : "variable_value"
    },
    "actions": [
      {
        "name":"getProducts",
        "type":"client | server",
        "parameters": {
          "<parameter_name>":"<parameter_value>"
        },
        "result_variable": "<result_variable_name>",
        "credentials": "<reference_to_credentials>"
      }
    ],
    "output": {
      "text": "response text"
    }
  }

person John C    schedule 16.07.2018    source источник


Ответы (1)


Существует написанное мной полное руководство, доступное в документации IBM Cloud с функциями IBM Cloud Functions и серверной базой данных. Код размещен на GitHub в этом репозитории: https://github.com/IBM-Cloud/slack-chatbot-database-watson/.

Вот соответствующая часть из рабочей области файл, который показывает, как параметр может быть передан в функцию:

{
      "type": "response_condition",
      "title": null,
      "output": {
        "text": {
          "values": []
        }
      },
      "actions": [
        {
          "name": "_/slackdemo/fetchEventByShortname",
          "type": "server",
          "parameters": {
            "eventname": [
              "<? $eventName.substring(1,$eventName.length()-1) ?>"
            ]
          },
          "credentials": "$private.icfcreds",
          "result_variable": "events"
        }
      ],
      "context": {
        "private": {}
      },

В дальнейшем результат представлен, например, таким образом:

"output": {
        "text": {
          "values": [
            "ok. Here is what I got:\n ```<? $events['result'] ?>```",
            "Data:\n ``` <? $events['data'] ?> ```"
          ],
          "selection_policy": "sequential"
        },
        "deleted": "<? context.remove('eventDateBegin') ?><? context.remove('eventDateEnd') ?> <? context.remove('queryPredicate') ?>"
      },

Разумеется, можно выполнить более изящное форматирование, перебирая результат. Здесь можно найти некоторые уловки. В коде также показано, как использовать дочерний узел для обработки результата и очистки переменных контекста.

Чтобы получить параметр, в вашем случае название или тип продукта, вам потребуется доступ к строка ввода и найдите часть после" product ". Другой способ - использовать бета-функцию «contextual entity ", который предназначен для таких случаев.

person data_henrik    schedule 16.07.2018
comment
Прямо сейчас моя облачная функция уже дает нужный мне продукт, когда имя продукта передается в параметры. Есть ли простой способ просто получить ввод пользователя сразу после использования намерения? Например: (Мне нужно product / Buy product) Намерение было бы: «Мне нужно или купить», и Watson Conversation получает строку, которая находится сразу после этого Intent? - person John C; 16.07.2018
comment
Я добавил к ответу еще кое-что. - person data_henrik; 16.07.2018