Повторите предложение в Dialogflow для VUI без внешних библиотек (multivocal / VoiceRepeater) - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь заставить мой VUI повторить свое последнее предложение, когда будет предложено это сделать (например, когда пользователь говорит: «Извините, я вас не слышал). Я пытался сделать это, используя библиотеки Multivocal и VoiceRepeater, но это не работает для меня, поэтому я хочу реализовать его в соответствии с этим руководством: https://developers.google.com/assistant/conversational/tips

Я уже взял следующие шаги:

  1. Создано намерение под названием «Повторить».
  2. Добавлены обучающие фразы для намерения
  3. Включен вызов webhook для этого намерения
  4. В Node.js добавлен следующий код:

// 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 });

function repeat(agent) {
    const REPEAT_PREFIX = [
      'Sorry, Ik zei ',
      'Laat me het herhalen: ',
      'Wat ik zei is'
    ];

      const reply = (agent, inputPrompt, noInputPrompts) => {
        agent.data.lastPrompt = inputPrompt;
        agent.data.lastNoInputPrompts = noInputPrompts;
        agent.ask(inputPrompt, noInputPrompts);
      };

    // Intent handlers
    const normalIntent = (agent) => {
      reply(agent, 'Hey this is a question', 'Ik zie niks');
    };

    let repeatPrefix = promptFetch.getRepeatPrefix(); // randomly chooses from REPEAT_PREFIX
      // Move SSML start tags over
      if (agent.data.lastPrompt.startsWith(promptFetch.getSSMLPrefix())) {
        agent.data.lastPrompt =
            agent.data.lastPrompt.slice(promptFetch.getSSMLPrefix().length);
        repeatPrefix = promptFetch.getSSMLPrefix() + repeatPrefix;
      }
      agent.add(repeatPrefix + agent.data.lastPrompt,
          agent.data.lastNoInputPrompts);  
  }

  // Run the proper function handler based on the matched Dialogflow intent name
  let intentMap = new Map();
  intentMap.set('Repeat', repeat); 

  agent.handleRequest(intentMap);
});

К сожалению, это не работает для меня, одна ошибка, я получаю это, что он говорит: «FetchPrompt не определен», что я не делаю Понимаю. Я знаю, что с настройкой все в порядке, потому что этот код возвращает: «это ответ от webhook», если я запрашиваю VUI для повторения его предложения:


// 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 });

function repeat(agent) {
    agent.add('this is a response from the webhook'); 
  }

  // Run the proper function handler based on the matched Dialogflow intent name
  let intentMap = new Map();
  intentMap.set('Repeat', repeat); 

  agent.handleRequest(intentMap);
});

1 Ответ

0 голосов
/ 09 февраля 2020

Как указывает @Prisoner, ваш код предназначен для работы только с dialogflow-fulfillment, но вы основали его на примере действий на Google. В этом причина ошибок кода.

Некоторые действия, которые вы хотите сделать, доступны только для действий в Google, например, объект conv содержит функции, которые работают только при выполнении в Google Assistant, и это суть проблемы.

Даже если вы исправите код, пример , которому вы следуете , использует conv.data в качестве временного хранилища для последнего ответа агента во время разговора; однако функциональность conv.data недоступна за пределами платформ Google Assistant, и в настоящий момент в Dialogflow нет простого подхода для получения последнего ответа агента.

Если вы не хотите интегрироваться с Google Помощник, тогда вам нужно найти подходящий обходной путь, чтобы сохранить ваш агент последний ответ. Вот вопрос , где обсуждалась эта проблема с временным хранилищем, возможно, вы можете использовать его в качестве справочного материала.

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

...