DialogFlow - установить все обязательные параметры, присутствующие в webhook? - PullRequest
0 голосов
/ 15 февраля 2019

Я использую облачную функцию для ответа на веб-хуки, как описано в документации .На DialogFlow я сделал все параметры необязательными, и вместо этого я хочу контролировать, какие параметры требуются динамически.Можно ли динамически установить allRequiredParamsPresent?Во-вторых, как мы можем сместить следующий ввод / ответ для заполнения определенного параметра?

Пользователь может ввести дату или диапазон дат, оба из которых являются разными параметрами.Требуется одно или другое, но не оба.

К сожалению, в консоли, если я установил оба значения как обязательные, диалог не заканчивается (именно поэтому я хотел переопределить, когда он заканчивается), и если я не делаю их обязательными, диалог заканчивается безвсе необходимые параметры присутствуют.

Более того, в зависимости от дополнительного вопроса, который агент задает через веб-хук, я хочу сместить следующий ответ пользователя, чтобы заполнить определенный параметр @sys.any, так как он продолжает заполнять неправильные параметры.

1 Ответ

0 голосов
/ 19 февраля 2019

Я бы посоветовал вам использовать намерения для каждого параметра, который вам требуется, вместо использования сущностей.Это решит две проблемы:

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

Предположим, вам требуются 3 параметра для покупки часов: цвет, дата / дата-время, стоимость
Ваш агент будет иметь следующие намерения:

  • buy_watch -> input_context = Нет, output_context = buy_watch
    Я хочу купить часы
    Я хочу купить часы черного цвета
    ...
  • get_color -> input_context = color, output_context = buy_watch
    Black
    Я хочу его в черном
    ...
  • get_date -> input_context = date, output_context = buy_watch
    я хочу это завтра
    я хочу это на следующей неделе
    (которое будет захватывать как дату, так и диапазон дат и ни для чего другого, вы можете иметь логику для назначениязначение для параметра, если вы получаете любой из них)
  • гet_cost -> input_context = cost, output_context = buy_watch
    около 10000
    бюджет составляет 15k
  • got_all_details -> event = e_got_all_details

Для каждого намерения у вас будут необязательные все 3 параметра.
Кроме того, вам необходимо установить значение параметра по умолчанию равным $entity для собственного намерения и #context.entity для других параметров.
Например, в намерении get_color у вас будут следующие параметры и значения по умолчанию:

color = $color  
date = #buy_watch.date  
cost = #buy_watch.cost  

Наконец, вам придется вызывать webhook для всех вышеуказанных намерений.
В webhook выПридется проверить параметры входящего намерения и установить output_context + response_message в соответствии с отсутствующим параметром.

params =  intent_request["query_result"]["parameters"]  
case 1 --> if not params["color"]:  set output_context = color and response = what color do you want  
case 2 --> if not params["date"]:  set output_context = date and response = when do you want to buy  
case 3 --> if not params["cost"]:  set output_context = cost and response = what is your budget    
case 4 --> if you get all params: call event e_got_all_details  

Intent got_all_details будет вызываться через событие, когда вы получите все параметры, независимо от того, в каком порядке вы их получите.

В зависимости от output_context ответа и input_context , которые вы настроили в своем намерении, будет инициировано правильное намерение, и вы сможете получить правильные значения.

У меня была похожая проблема, и, на мой взгляд, это был наиболее эффективный способ ее решения для проверки параметров и обработки, когда вы получаете неожиданные значения (с использованием намеренных резервных намерений).

Редактировать 1: Там будет одна дополнительная логика для присвоения значения дате, в зависимости от того, получили ли вы его из даты или объекта диапазона дат.

if params["date"] or params["date-range"]:
    date = params["date"] if params["date"] else params["date-range"]  

Все намерения будут иметь обучающие фразы, которые будут пытаться захватить параметры без какого-либо порядка, но не отмечать их как обязательные.
Итак, если пользователь говорит , я хочу купитьсмотреть завтра , buy_watch намерение будет запущено с параметром даты.Код проверит цвет и стоимость, пропущенные и предложит это после установки соответствующего output_context.

Надеюсь, это поможет.

...