2
votes

Changer la langue du jour / du mois dans le bot DialogFlow

Je crée un assistant pour un restaurant italien en utilisant DialogFlow.

Est-il possible de le changer? entrez la description de l'image ici

Voici le code qui génère la réponse particulière ci-dessus à un processus de réservation de table:

function createBooking(agent) {
    let guests = agent.parameters.comensales;
    let time = new Date(agent.parameters.time);
    let date = new Date(agent.parameters.date);
    let bookingDate = new Date(date);
    var numeroReserva = Math.random().toString(16).slice(2, 8).toUpperCase();
    bookingDate.setHours(time.getHours());
    bookingDate.setMinutes(time.getMinutes());
    let now = new Date();

    if (guests < 1){
        agent.add('You need to reserve a table for at least one person. Please try again!');
    } else if (bookingDate < now){
        agent.add(`No puedes reservar una fecha pasada. Por favor, inténtalo de nuevo!`);
    } else if (bookingDate.getFullYear() > now.getFullYear()) {
        agent.add(`No puedes hacer una reserva para ${bookingDate.getFullYear()} todavía. Por favor, elige una fecha en ${now.getFullYear()}.`);
    } else {
        let timezone = parseInt(agent.parameters.time.toString().slice(19,22));
        bookingDate.setHours(bookingDate.getHours() + timezone);
        agent.add(`Perfecto. He reservado una mesa para ${guests} el ${bookingDate.toString().slice(0,21)}`);
        agent.add(`Tu código de reserva es: ${numeroReserva}`);
        agent.add('Nos vemos pronto!');
        agent.add('Buon appetito!');
    }
  }

p >


2 commentaires

Comment remplissez-vous la réponse? S'agit-il d'un webhook ou d'un autre mécanisme? Si vous pouviez expliquer comment la réponse est élaborée, je pense que cela aiderait.


@Kolban Vous avez raison, j'aurais dû élaborer. Im utilisant Fulfillment et utilisant la fonction js que je viens de joindre à la question.


3 Réponses :


1
votes

Le code exécutant le traitement s'exécute au sein de l'infrastructure de calcul de Google dont les paramètres régionaux / langue par défaut sont l'anglais américain. Lorsqu'une demande de traitement complet arrive à partir du flux de dialogue, cette demande porte avec elle la langue que nous devons utiliser pour répondre. Consultez le languageCode dans la Webhook Request JSON a >. Lorsque nous utilisons les API dans Node.js, il semble que ces données sont disponibles dans la propriété agent.locale .

En regardant le JavaScript Date objet, nous semblons avoir une méthode dessus appelé toLocaleString () qui convertit une date / heure en une chaîne mais fournit en plus la langue (locale) à utiliser pour créer le contenu et le format spécifiques à la langue. Si nous mettons tout cela ensemble, nous pourrions trouver que la ligne de code suivante peut fonctionner:

agent.add(`Perfecto. He reservado una mesa para ${guests} el ${bookingDate.toLocalString(agent.locale).slice(0,21)}`);

Cela peut prendre quelques tests pour bien fonctionner. Je commencerais par enregistrer agent.locale comme test pour m'assurer qu'il a la valeur que nous attendons / espérons.


5 commentaires

Merci pour l'explication et la réponse. J'essaie de nombreuses combinaisons avec la méthode toLocaleString, mais tout ce qu'elle fait, c'est la changer au format `` européen '' (exemple, aujourd'hui est: 2019-5-8) mais cela ne convertit pas la date en jour de semaine / mois. J'ai aussi essayé ceci: bookingDate.toLocaleString ('es', 'ES') mais même résultat


Pouvez-vous publier un exemple de ce que vous avez codé, de ce que vous voyez exactement et de ce que vous espérez voir exactement? Lisez aussi ceci en détail ... développeur. mozilla.org/en-US/docs/Web/JavaScript/Reference/… il semble qu'il existe de nombreuses options possibles.


Ma sortie souhaitée serait la première sortie de l'exemple que vous avez joint. Dans l'image du message, vous avez la sortie que j'obtenais à l'origine, ce qui était également souhaité, mais en changeant simplement le jour de la semaine et le mois en espagnol. bookingDate.toLocaleDateString ('es-ES', options) .slice (0,21) avec cette ligne (étant les mêmes options que dans votre exemple) im obtenant ceci: Perfecto. He reservado una mesa para 5 el 2019 M05 9, Thu


Il est possible que nous sortions de DialogFlow et que nous passions à JavaScript natif. Imaginez que DialogFlow ne soit pas impliqué et que vous vouliez mettre en forme une date dans un format de votre choix ... pouvons-nous faire cela? Il semble que les packages tels que momentjs.com semblent pouvoir vous aider.


Cette bibliothèque a l'air vraiment intéressante, merci. L'éditeur DialogFlow autorise-t-il les importations de bibliothèques? Le fait est, oublions le format, disons que je suis tout content du format de l'image de publication originale. Le principal problème serait de traduire le jour de la semaine / mois en espagnol, c'est ce que je ne sais pas comment faire.



1
votes

Il est tard mais pour ceux qui sont confrontés à ce problème. Vous savez que vous pouvez le faire comme ceci:

let options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', 
                hour12: false, hour: 'numeric', minute: 'numeric' };
var curr_date = new Date();
agent.add(`Sono le ` + curr_date.toLocaleString('it-IT', options));


0 commentaires

1
votes

Si quelqu'un aime utiliser moment.js

, vous pouvez ajouter une bibliothèque à votre projet à partir de l'éditeur en ligne de traitement. Allez dans Fulfillment, cliquez sur "package.json"

ajoutez les lignes suivantes dans les dépendances

if(agent.locale === 'en'){
         moment.locale('en-US');
         agent.add(`Now is ` + moment().tz(your_time_zone).format('LLLL'));
       }
       else if(agent.locale === 'it-IT' || agent.locale === 'it'){
         moment.locale('it');
         agent.add(`Sono le ` + moment().tz(your_time_zone).format('LLLL'));
       }

Puis revenez à index.js et ajoutez la ligne suivante pour l'importer

const moment = require ('moment-timezone');

et ensuite vous pouvez gérer comme ça dans votre fonction

"moment": "^2.24.0",
"moment-timezone": "^0.5.31"


0 commentaires