#dialogflow-es #dialogflow-es-fulfillment
#dialogflow-ы #dialogflow-es-выполнение
Вопрос:
Я хочу создать веб-хук Dialogflow, который медленно реагирует на пользователя, чтобы было больше ощущения, что кто-то находится на другом конце и для ответа требуется несколько секунд.
Я использую встроенный редактор кода и могу создать обработчик намерений (см. Код), но я просто не знаю, как заставить его отвечать медленнее.
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
function welcome (agent) {
agent.add(`I'm replying too quickly!`);
}
function fallback (agent) {
agent.add(`I didn't understand`);
agent.add(`I'm sorry, can you try again?`);
}
// Run the proper function handler based on the matched Dialogflow intent name
let intentMap = new Map();
intentMap.set('Default Welcome Intent', welcome);
intentMap.set('Default Fallback Intent', fallback);
agent.handleRequest(intentMap);
});
Ответ №1:
Лучший способ справиться с этим — добавить задержку в код пользовательского интерфейса. Оставьте намерение Dialogflow таким, какое оно есть, и как только ответ бота будет получен во внешнем интерфейсе, покажите его с задержкой.
Ниже приведен пример того, как мы обрабатываем это в Kommunicate Ответ Dialogflow приходит без каких-либо задержек, затем в коде Javascript мы показываем анимацию индикатора ввода, добавляем некоторую задержку с помощью Javascript перед ее отображением.
Ответ №2:
Если честно, необходимость отвечать медленнее редко бывает желаемой. Но самый простой способ сделать это — использовать setTimeout()
и немного отложить. (Не откладывайте слишком долго — более 5 или 10 секунд, и Dialogflow отключится.)
Проблема с использованием setTimeout()
, однако, заключается в том, что обработчику нужно будет вернуть обещание. Итак, вам нужно будет обернуть вызов в setTimeout()
и agent.add()
в обработчике обещаний. Функция, которая выполняет это, может выглядеть примерно так:
function respondSlowly( agent, msg, ms ){
return new Promise( resolve => {
setTimeout( () => {
agent.add( msg );
resolve();
}, ms );
});
}
Затем вы бы вызвали это из своего обработчика, указав агент, сообщение и сколько миллисекунд нужно ждать ответа:
function welcome( agent ){
return respondSlowly( agent, `Hi there, slowly`, 2000 ); // Wait 2 seconds to reply
}