Подождите несколько секунд, прежде чем агент ответит - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь создать очень простое приложение Dialogflow для Actions в Google.

Я имел в виду очень простой таймер, но каждые X секунд агент будет сообщать пользователю "X секунд осталось".

Я использую раздел Fulfillment в диалоге.Я попытался сделать простой 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 ]

3 голосов
/ 09 мая 2019

Невозможно, чтобы действие начало разговор, код выполнения (ваша функция) должен вернуться в течение 10 секунд, или помощник Google закроет действие с предупреждением об истечении времени ожидания.

И ваш setTimeoutне работает, потому что этот код работает в облаке, и чтобы фактически отправить его обратно помощнику, вы должны отправить ответ, и вы только добавляете в него элементы, но не возвращаете объект.

Эта страница из документации DialogFlow объясняет, как работает внутреннее выполнение в DialogFlow / Google Assistant.

1 голос
/ 16 мая 2019

Вы можете использовать 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>

Кроме того, проверьте для получения дополнительной информации.

...