web-dev-qa-db-fra.com

Comment gérer le délai de réponse de 5 secondes dans Dialogflow / Api.ai?

J'utilise Dialogflow pour créer un agent/bot qui répond à différents types de requêtes des utilisateurs avec des éléments d'action comme "J'ai besoin d'obtenir une lettre des RH pour la preuve d'adresse". Cela nécessite que le bot récupère certaines informations de la base de données de l'entreprise et génère un document/lettre en remplissant les informations récupérées dans un fichier de modèle de lettre fourni par les ressources humaines. La logique pour effectuer cette action est déjà écrite dans un fichier python. L'intégration de la base de données se fait à l'aide de Webhooks.

Le problème est que ce processus complet d'interprétation de la demande de l'utilisateur, d'ouverture de la base de données et de récupération des informations requises prend plus de 5 secondes, ce qui s'avère être la limite de délai de réponse pour les agents Dialogflow. J'ai fait quelques recherches à ce sujet et découvert que nous ne pouvons pas augmenter cette limite, mais nous pouvons garder la session en vie via des appels asynchrones. Je ne suis pas en mesure de trouver la bonne ressource qui fournit la réponse.

Donc, mes questions sont-

Pouvons-nous faire des appels asynchrones dans dialogflow?

Si oui, comment envoyer des données asynchrones via json à l'agent Dailogflow?

Existe-t-il un autre moyen de résoudre ce délai de réponse de 5 secondes?

Merci d'avance!

6
Shashank

Je viens de vérifier les pages Actions sur la documentation Google et Documentation d'accomplissement , et il y a en effet un délai de 5 secondes.

Ce n'est peut-être pas la meilleure solution et peut ne pas correspondre à votre cas, mais compte tenu de la fenêtre stricte de 5 secondes (nous voulons assurer une conversation dynamique sans risquer que l'utilisateur n'attende trop longtemps)

Vous démarrez le calcul avec votre première intention de manière asynchrone et revenez vers l'utilisateur et lui dites de demander les résultats en quelques secondes, en attendant que le calcul soit terminé. Il sera enregistré dans un espace privé pour l'utilisateur, auquel cas l'utilisateur déclenchera une seconde intention qui demandera les résultats qui, dans l'intervalle, auront été pré-calculés, de sorte que vous pouvez simplement les récupérer et les renvoyer.

7
Amanda Cavallaro

Vous pouvez prolonger la limite d'intention de 5 secondes jusqu'à 15 secondes en configurant plusieurs événements de suivi. Actuellement, vous ne pouvez configurer que 3 événements de suivi les uns après les autres (ce qui peut prolonger le délai d'attente jusqu'à 15 secondes).

Voici un exemple de la façon dont vous pouvez le faire dans le centre de traitement des commandes:

  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);

Pour en savoir plus sur les événements personnalisés, veuillez visiter cette page: https://dialogflow.com/docs/events/custom-events

3
Igor Nefedov