我正在尝试为Google上的Actions创建一个非常简单的Dialogflow应用。
我想到的是一个非常简单的计时器,但是代理每隔X秒就会告诉用户“还剩X秒”。
我正在使用dialogflow的“实现”部分。我试图做的是一个简单的“ setTimeout”,其中包含另一个agent.add,但是在部署它时Dialogflow似乎忽略了它:
function startTimer(agent)
{
agent.add("Timer started! 20 seconds from now.");
setTimeout(function(){
agent.add("10 seconds left!");
}, 10000);
agent.add("Time out.");
}
let intentMap = new Map();
intentMap.set('timer', startTimer);
agent.handleRequest(intentMap);
助手的响应是一个简单的“计时器已开始”和“超时”,而没有剩余X秒。启动意图后,有什么方法可以添加回复?谢谢!
编辑|按照建议,我尝试使用SSML,但是当助手说出标签时,标签就会显示在屏幕上。
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
function startTimer(agent)
{
agent.add("Something to say");
agent.add(`<speak><seq><media begin="30s"><speak>30 seconds</speak></media><media begin="30s"><speak>1 minute</speak></media></seq></speak>`);
agent.add(new Suggestion(`Quit`));
}
let intentMap = new Map();
intentMap.set('timer-go', startTimer);
agent.handleRequest(intentMap);
});
答案 0 :(得分:3)
操作无法开始对话,履行代码(您的功能)必须在10秒内返回,否则Google助手会在超时警告的情况下关闭操作。
并且您的setTimeout无法正常工作,因为此代码正在云中运行,并且要将其实际发送回给Assistant,您必须发送响应,并且只向其中添加项目,而不返回对象。< / p> DialogFlow文档中的
This page解释了后端实现如何在DialogFlow / Google Assistant上工作。
答案 1 :(得分:1)
您可以在响应中使用SSML并设置响应时间。
例如
<speak>
<seq>
<media begin="0s">
<speak>Timer started! 20 seconds from now</speak>
</media>
<media begin="10.0s">
<speak>10 seconds left!</speak>
</media>
</seq>
</speak>
另外,请check以获取更多信息。