Доступ к предыдущим параметрам намерения в диалоге - PullRequest
0 голосов
/ 05 ноября 2018

Я использую код диалогового потока по умолчанию, предоставленный во встроенном редакторе, основанный на диалоге-заполнении ^ 0.5.0, чтобы сопоставить все параметры, заданные в нескольких последующих намерениях. У меня есть настройка, при которой последующие намерения задают вопросы, в результате чего получается окончательное намерение, в котором заданы все вопросы.

Для извлечения данных из предыдущих намерений внутри консоли диалогового потока для включения в ответ просто используйте i.e. #order-cream-followup.chocolate-type для получения параметра из предыдущего намерения или $quantity для получения параметра из текущего намерения. Но в то время как agent.parameters['quantity'] работает как $quantity, я не могу найти способ сделать эквивалент #order-cream-followup.chocolate-type в диалоге-выполнении

Извиняюсь, если это очевидный ответ, я теряюсь в различной документации по dialigflow и действиям в Google в целом.

Мой код: (в настоящее время просто вход в консоль перед добавлением кода для обработки выталкивания этих данных)

// See https://github.com/dialogflow/dialogflow-fulfillment-nodejs
// for Dialogflow fulfillment library docs, samples, and to report issues
'use strict';

const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

  function placeOrder(agent) {
    console.log('placing order:');
    console.log(agent.context.get('order-cream-followup').parameters['choctype']);
    agent.add('Thanks ' + agent.parameters['name'] + ', please collect your order from the window.');
  }

  // Run the proper function handler based on the matched Dialogflow intent name
  let intentMap = new Map();
  intentMap.set('order - cream - marshmallow - check - yes - name - submit', placeOrder);
  agent.handleRequest(intentMap);
});

1 Ответ

0 голосов
/ 05 ноября 2018

Чтобы получить контекст, который все еще активен (то есть - его lifespanCount не достиг 0), вы можете использовать agent.context.get(). Итак, ваш пример будет выглядеть примерно так:

agent.context.get('order-cream-followup').params['chocolate-type']

(Это было введено в версии 0.6.0 библиотеки.)

Однако ... это требует, чтобы контекст оставался действительным. Если вы используете Followup Intents (что может привести к беспорядку), срок жизни изначально установлен только на 2, поэтому срок его действия истек.

Есть две вещи, которые вы должны сделать:

  1. Не используйте Followup Intents. Несмотря на то, что в некоторых случаях они полезны, они могут слишком сузить варианты ответа и могут вести очень громкие разговоры.

  2. Используйте контекст, которым вы управляете, с большой продолжительностью жизни, чтобы собрать результаты как часть веб-крючка. Поэтому после каждого намерения, когда вы собрали новую информацию, вы сохраняете ее в контексте с именем, например, «заказ», срок службы которого вы сбрасываете на 99 после каждого обновления.

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