Search code examples
javascriptdialogflow-es

How to make dialogflow going while waiting for a process that takes more than the time limit?


I have created an API that takes user input and process it. However, the process takes more than 5 seconds (dialogflow limit).

How can I continue with other processes until this certain process is finished?

Or is it possible to return to the user any messages like "Please hold on a bit..." so it can restart the time.

var message = "hi"; //test purpose
async function GetCertain_info(agent) {

  await uiFx(); 
  agent.add("Here are the information on " + message);
}

async function uiFx() {

  var {
    ui
  } = require('./uia.js');

  return new Promise(function(resolve, reject) {

    ui().then((msg) => {
      console.log("Destination Message :  " + msg)
      message = msg;
      resolve(message);

    }).catch((msg) => {
      console.log(msg)
      message = msg;
      reject(message);
    })
  });
}

Appreciate your help


Solution

    • Yes, it is possible to return to the user any messages like "Please hold on a bit…" by setting up a FollowupEvent.
    • You can extend the 5 seconds Intent limit up to 15 seconds by setting up multiple follow-up events. Currently, you can only set up 3 follow-up events one after another (which can extend the timeout up to 15 seconds).

    Here's an example of how you can do it in the fulfillment:

    function function1(agent){
          //This function handles your intent fulfillment
          //you can initialize your db query here.
          //When data is found, store it in a separate table for quick search
          
          //get current date
          var currentTime = new Date().getTime(); 
          
          while (currentTime + 4500 >= new Date().getTime()) {
            /*waits for 4.5 seconds
              You can check every second if data is available in the database
              if not, call the next follow up event and do the 
              same while loop in the next follow-up event 
              (up to 3 follow up events)
            */
            
             /* 
             if(date.found){
                agent.add('your data here');//Returns response to user
             }
              */
            
          } 
          
          //add a follow-up event
          agent.setFollowupEvent('customEvent1'); 
          
          //add a default response (in case there's a problem with the follow-up event)
          agent.add("This is function1");
      }
    
    
      let intentMap = new Map();
      intentMap.set('Your intent name here', function1);;
      agent.handleRequest(intentMap);