Я пытаюсь заставить мой VUI повторить свое последнее предложение, когда будет предложено это сделать (например, когда пользователь говорит: «Извините, я вас не слышал). Я пытался сделать это, используя библиотеки Multivocal и VoiceRepeater, но это не работает для меня, поэтому я хочу реализовать его в соответствии с этим руководством: https://developers.google.com/assistant/conversational/tips
Я уже взял следующие шаги:
- Создано намерение под названием «Повторить».
- Добавлены обучающие фразы для намерения
- Включен вызов webhook для этого намерения
- В 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);
});