намерения вызова, созданные в консоли dialogFlow - PullRequest
0 голосов
/ 05 июня 2018

Поскольку я новичок в кодировании dialogFlow, у меня есть несколько вопросов, связанных с намерениями, созданными в консоли DialogFlow.

1) Если я создаю одно намерение «intent1» в консоли dialogFlow, можно ли вызвать это намерениев функциях Firebase? Если да, то как это сделать?

2) Как заставить пользователя выбирать параметры вместо ввода?Что я должен использовать для этого?

3) Как настроить намерения, которые будут вызываться всякий раз, когда пользователь вводит номер?

4) Какова цель сущности, событий, действия и параметров?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Вы можете вызвать одно намерение напрямую через События, или вы можете отправить запрос через API и разрешить автоматическое сопоставление намерения.Следуйте инструкциям на документации SDK здесь .Но, по сути, вы делаете следующее:

const dialogflow = require('dialogflow');
const sessionClient = new dialogflow.SessionsClient();
// Define session path
const sessionPath = sessionClient.sessionPath(projectId, sessionId);

const r_text = "What's the weather like in Rio de Janeiro?"

// The text query request.
const request = {
  "session": sessionPath,
  "queryParams": {
    "payload": payload
  },
  "queryInput": {
    "text": {
      "text": r_text,
      "languageCode": languageCode,
    },
  },
};

return sessionClient
.detectIntent(request)
.then(responses => {
  console.log('Detected intent');
  const result = responses[0].queryResult;
  ...do stuff with responses...
  return Promise.resolve('Resolved intent');
})
if (result.intent) {
  console.log(`  Intent: ${result.intent.displayName}`);
  return Promise.resolve('Resolved intent');
} else {
  console.log(`  No intent matched.`);
  return Promise.resolve('Not resolved intent');
}

Кроме того, при определении вашей полезной нагрузки следует учитывать небольшую досадную ошибку (которая стоила мне пару дней) и конвертировать JSON в структуру, которую APIожидайте получения:

const payload = structjson.jsonToStructProto({
  "user": userId,
  "location": r_location,
  "timestamp": r_timestamp,
  "sender": r_sender
})

Вы можете найти библиотеку structjson в репозитории Google.

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

Я до сих пор немного новичок в Программе действий в Google, но вот мое понимание.

Диалоговый поток позволяет вам определять намерения.Затем вы можете определить код для реализации этих намерений.Консоль предоставляет встроенный редактор JavaScript для Google Cloud Functions.Вы можете перейти в консоль облачных функций Google и увидеть там код.Или вы можете переключить его на «веб-выполнение», если хотите развернуть более сложный код (например, разбить JavaScript на несколько файлов - встроенный редактор работает только с одним файлом index.js).

ИтакДиалог потока принимает человеческий вклад (фраза, которую они говорят), просматривает обучающий набор фраз для различных целей и выбирает тот, который он считает правильным.Затем он вызывает код выполнения этого намерения (где код хранится в firebase).Поэтому, когда вы спрашиваете: «Можно ли вызвать это намерение в функциях Firebase», это выглядит как бы задом наперед.Намерения - это связующее звено между пользователем, который что-то говорит и вызывает функцию firebase (через HTTP).Сами по себе сущности не являются кодом, который можно вызывать.

Если вы хотите, чтобы пользователь выбирал параметры, вы можете создать объект с именами параметров (например, «один», «два», «три» и т. Д.).), или создайте намерения для каждого имени параметра.Было бы намерение «один», инициируемое, когда пользователь говорит «один».Код вашего приложения должен знать, где находится пользователь в структуре просмотра меню, чтобы знать, что означает «один».(Вы также можете использовать предложения на устройствах с экранами, чтобы показать им опции, на которые они должны нажать.) В идеале вы должны позволить пользователю произносить фразы или цифры, чтобы обеспечить большую гибкость.

Итак, ваш третий вопрос (какчтобы настроить намерения, которые будут вызываться всякий раз, когда пользователь вводит число), ваше приложение может сделать что-то вроде запуска с намерением по умолчанию «приветствие» (отправная точка).Вы могли бы устно сказать, что выбор меню "скажем один для товаров для дома, два для одежды, три для обуви, ...".Затем вы запоминаете положение пользователя в меню.Затем вы подключаете «один» как намерение, и в облачной функции оно проверяет, к какому меню подключился пользователь, и будет знать «сразу после приветственного намерения,« один »означает домашние программы».Затем приложение может задать второй вопрос типа «скажем, один для мебели, два для ваз, три для диско-шаров, ...».Если они снова скажут «один», это приведет к тому же самому намерению, но ваше приложение сохранит переменную, отслеживающую, где пользователь находится в дереве меню.

Объекты позволяют вам определять словарьусловий.Например, "Я хочу купить $ {color} $ {вещь}".Вы можете определить цветовой объект со значениями «красный», «зеленый», «синий» и т. Д. Вы можете определить вторую вещь: «платье», «шляпа», «обувь» и т. Д.хочу купить красное платье ".Диалоговому потоку можно сказать «красный» в том, что обучающее предложение - это «цветная» сущность, а «платье» - это «вещь».Затем эти значения передаются в качестве параметров веб-службе, поддерживающей реализацию, т. Е. Ваше намерение «купить» получит параметр «цвет» и «вещь».

События - это сгенерированные системой триггеры вместо ввода пользователятриггеры.Например, «долгожданное» намерение запустить ваше приложение - это событие генерации системы.Другое событие используется, когда приложение перемещается с одного устройства на другое.Существуют и другие системные события, если вы запрашиваете разрешение на использование push-уведомлений.Это способ запустить ваш код, если что-то происходит (а не только когда пользователь что-то говорит).

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

...