Параметр составного объекта Dialogflow не определен, если он не должен быть - PullRequest
0 голосов
/ 04 июля 2018

Короче говоря, я создаю чат-агента для агента по недвижимости и только что внедрил фильтр, позволяющий пользователю осуществлять поиск по диапазону чисел (например, по крайней мере, одна спальня, стоимостью менее 2500 долларов США). Чтобы сделать это, я создал составную сущность entity_range, состоящую из типа диапазона (например, самое большее, точно) и самого объекта (валюта за единицу по цене, а также некоторые пользовательские сущности, такие как количество спален). До создания entity_range сами объекты работали нормально. Но теперь кажется, что часть объекта entity_range не определена. Смотрите образец моего кода ниже:

function get_count(req, res) {
  console.log("price: " + req.queryResult.parameters["entity_range"]["unit-currency"])
  var price, beds, baths, num_filter_funct
  if(req.queryResult.parameters["entity_range"]["unit-currency"] != undefined) {
    price = req.queryResult.parameters["entity_range"]
    console.log("price: " + price)
  } else {
    console.log("could not find parameter")
  }

Перед созданием entity_range мой код выглядел точно так же, за исключением отсутствия ["entity_range"] между параметрами и ["unit-currency"]. Во всяком случае, этот код журнала:

price: undefined
could not find parameter

после ввода «Сколько за 2500 долларов» со следующей диагностической информацией:

...
"queryResult": {
    "queryText": "how many for $2500",
    "parameters": {
      "entity_range": [
        {
          "unit-currency": {
            "amount": 2500,
            "currency": "USD"
          }
        }
      ]
    }...

Таким образом, сущность "единица валюты" распознается Dialogflow, но не моей программой. entity_range позволяет пользователям не указывать диапазон, так что это не проблема: см. Скриншот здесь .

Буду очень признателен за любые советы!

1 Ответ

0 голосов
/ 05 июля 2018

JSON показывает, что entity_range - это массив, а не объект. объект.

parameters.entity_range [0] [«unit-currency»] должно работать. Обратите внимание на [0]. Вы также хотите добавить некоторые проверки перед этим, чтобы убедиться, что enitiy_range существует и его длина> 0.

И эта часть является лишь предположением, но, возможно, вы ошибочно нажали поле «Список» для этого параметра в диалоговом потоке? Я проверяю, что это, вероятно, сделает его объектом, а не массивом, и ваш существующий код будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...