Диалоговое окно: не понимаю, как я могу получить контекст путем кодирования

У меня есть то, что мне не удается понять.

Вот ситуация, которую я хотел бы сделать:

Бот: Здравствуйте, что вы хотите сделать?

Пользователь: Поиск товара

Бот: Какой продукт вы ищете?

Пользователь: Apple

Bot -> список продуктов с яблоком

Вот фрагмент кода:

  function searchProduct() {
    agent.add('Which product are you looking for ?');
    // receive the product answer 
    //-> then research the matched product in DB
  }

  const intentMap = new Map();
  intentMap.set('I want a product', searchProduct);
  agent.handleRequest(intentMap);

В этом коде я прошу пользователя продукт, который он ищет. Но когда он ответил "Apple", как я могу получить ответ пользователя в той же функции, чтобы продолжить мой процесс?

Я знаю, что есть концепция "контекста", но чтобы продолжить процесс "поиска продукта", мне нужно вернуться в функцию.

Сейчас я использую диалог-выполнение. И я пытаюсь понять эту документацию, чтобы найти решение: https://github.com/dialogflow/dialogflow-fulfillment-nodejs/blob/master/docs/WebhookClient.md

1 ответ

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

  1. Определите, что сказал пользователь, что важно для нас.
  2. Вычислить что-нибудь на основе того, что они сказали.
  3. Отправьте ответ пользователю на основе (1) и (2).

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

Контексты используются для того, чтобы мы знали, на какой стадии общего разговора мы находимся. Как часть нашего ответа (шаг 3 выше), мы можем установить Контекст, который поможет Dialogflow определить, какое намерение должно быть инициировано (и, следовательно, какая функция должна быть призван обработать то, что мы знаем до сих пор). Контексты также могут хранить информацию о предыдущих поворотах разговора.

Имейте в виду, что намерения не о том, что мы говорим, а о том, что говорит пользователь. Ответ, который мы отправляем, основан на том, что нам нужно, и тогда мы будем использовать одно намерение для захвата каждой части. Функция, которая обрабатывает это намерение, будет хранить ответ в контексте и определять следующую часть вопроса.

Другие вопросы по тегам