Je crée un assistant pour un restaurant italien en utilisant DialogFlow.
Est-il possible de le changer?
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 >
3 Réponses :
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 En regardant le JavaScript Date objet, nous semblons avoir une méthode dessus appelé Cela peut prendre quelques tests pour bien fonctionner. Je commencerais par enregistrer 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
. 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)}`);
agent.locale
comme test pour m'assurer qu'il a la valeur que nous attendons / espérons.
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.
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));
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"
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.