Я хочу получить значение параметра предыдущего намерения в диалоговом потоке

avatar
lakshmi
8 августа 2021 в 18:43
88
3
0

У меня есть бот диалогового потока, который запрашивает имя, фамилию, день рождения, месяц рождения, год рождения отдельно от пользователя (поэтому у меня есть 5 намерений в DF и 5 отдельных файлов намерения.js для каждого поля в веб-перехватчике).
Я хочу проверить доб таким образом, чтобы, когда пользователь указывает месяц, бот должен проверять, вводит ли пользователь дни в правильном формате. Это должно быть в Nodejs

пример:

Бот: Привет, пожалуйста, введите ваше имя
Пользователь:Джон
Бот:ваша фамилия
пользователь: Салли
Бот: твой месяц рождения?
Пользователь:02
Бот: твой рабочий день?
Пользователь:31
Бот: извините, это неверный доб

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

До сих пор: Я проверил дату месяца рождения, полученную от пользователя. Я новичок в Javascript и node js.

enter image description here

enter image description here

Источник

Ответы (3)

avatar
Mizar Contasti
8 августа 2021 в 20:24
1

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

lakshmi
9 августа 2021 в 03:48
0

Я использовал getcontext и попробовал это тоже. Это также работает для меня. Большое спасибо.

avatar
Mizar Contasti
9 августа 2021 в 15:11
0

Сначала я рекомендую вам получить переменную из Dialogflow без бэкенда, затем прочитать ее из диагностической информации, если информация просматривается, вы можете получить из ответа бэкенда.

avatar
Ricco D
9 августа 2021 в 03:01
1

Чтобы добавить к ответу @MizarConstanti, вы можете использовать для своих сущностей следующее:

  • Для даты можно использовать объект @sys.date
  • Для имени @sys.given-name
  • Для фамилии @sys.last-name

ПРИМЕЧАНИЕ. Для объектов с именем и фамилией эти объекты могли распознавать только общие имена (ссылка).

Альтернативой для получения дат и имен является создание обучающих фраз таким образом и извлечение информации с использованием определенных объектов.

Намерение-> намерение теста

enter image description here

enter image description here

Намерение -> getName enter image description here enter image description here

Если вы используете библиотеку dialogflow-fulfillment во встроенном редакторе Dialogflow, эти объекты можно вызывать с помощью этого кода:

'use strict';

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

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

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });


function yourFunctionHandler(agent) {
    // initial value of agent.parameters.date is 1994-07-29T12:00:00+08:00
    // thus the splitting done below
    const date = agent.parameters.date.split('T')[0];
    const year = agent.parameters.date.split('-')[0];
    const month = agent.parameters.date.split('-')[1];
    const day = agent.parameters.date.split('-')[2].split('T')[0];
    agent.add(`year: ${year}, month:${month}, day:${day}`);
  }

function getName(agent) {
    const lastName = agent.parameters.lastName;
    const firstName= agent.parameters.givenName;
    agent.add(`first: ${firstName}, last: ${lastName}`);
}  
  
  // Run the proper function handler based on the matched Dialogflow intent name
  let intentMap = new Map();
  intentMap.set('test intent', yourFunctionHandler);
  intentMap.set('getName', getName);
  agent.handleRequest(intentMap);
});

Проверить намерение даты и имени: enter image description here