等待代理商回复几秒钟

时间:2019-05-08 19:42:11

标签: dialogflow actions-on-google

我正在尝试为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);
});

2 个答案:

答案 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以获取更多信息。