Traitement (Dialogflow)

Votre logique de traitement peut utiliser la chaîne de paramètres régionaux qu'elle reçoit dans chaque requête pour répondre aux utilisateurs. Ce guide explique comment utiliser des bibliothèques de localisation tierces dans une fonction Cloud pour Firebase pour renvoyer des réponses localisées.

Bibliothèques de localisation

Voici quelques bibliothèques utiles à prendre en compte pour vous aider à générer des réponses personnalisées pour des paramètres régionaux spécifiques:

  • Usage général: I18n-node (nos exemples d'extraits de code utilisent cette bibliothèque)
  • Usage général: format.js
  • Localisation du fuseau horaire/de l'heure: moment.js (nos exemples d'extraits de code utilisent cette bibliothèque)
  • Devise/devise: numeral.js

Créer des réponses localisées

Cette section explique comment créer des fichiers de ressources de chaîne localisées contenant des chaînes localisées et comment utiliser ces fichiers de ressources dans votre traitement Cloud Functions for Firebase.

Pour créer des réponses localisées:

  1. Dans le même répertoire que vos fichiers package.json et index.js, créez un répertoire locales pour vos fichiers de chaînes localisées. Nous appellerons ce répertoire <project-dir>/functions/locales.
  2. Créez un fichier de ressources contenant des chaînes localisées pour chaque paramètre régional que vous souhaitez prendre en charge. Par exemple, si vous souhaitez prendre en charge les paramètres régionaux en-US, en-GB et de-DE avec des messages d'accueil et de date localisés, ces fichiers peuvent se présenter comme suit:

    <project-dir>/functions/locales/en-US.json

    {
       "WELCOME_BASIC": "Hello, welcome!",
       "DATE": "The date is %s"
    }
    

    <project-dir>/functions/locales/en-GB.json

    {
       "WELCOME_BASIC": "Hello, welcome!",
       "DATE": "The date is %s"
    }
    

    <project-dir>/functions/locales/de-DE.json

    {
       "WELCOME_BASIC": "Hallo und willkommen!",
       "DATE": "Das Datum ist %s"
    }
    
  3. Dans le fichier package.json, déclarez les bibliothèques i18n-node et Moment en tant que dépendances:

    {
     ...
     "dependencies": {
       "actions-on-google": "^2.7.0",
       "firebase-admin": "^7.2.1",
       "firebase-functions": "^2.2.1",
       "i18n": "^0.8.3",
       "moment": "^2.22.1"
     }
    }
    
  4. Dans le fichier index.js, déclarez les dépendances pour les bibliothèques i18n-node et Moment :

    const i18n = require('i18n');
    const moment = require('moment');

  5. Dans le fichier index.js, configurez le nœud i18n avec les paramètres régionaux pris en charge :

    i18n.configure({
      locales: ['en-US', 'en-GB', 'de-DE'],
      directory: __dirname + '/locales',
      defaultLocale: 'en-US'
    });
    .

  6. Définissez les paramètres régionaux des bibliothèques à l'aide de conv.user.locale à partir de la propriété de la bibliothèque cliente.

    app.middleware((conv) => {
      i18n.setLocale(conv.user.locale);
      moment.locale(conv.user.locale);
    });

  7. Pour renvoyer une réponse localisée, appelez ask() avec une chaîne localisée renvoyée par i18n. Cet extrait contient également une fonction qui utilise moment pour renvoyer une date localisée :

    app.intent('Default Welcome Intent', (conv) => { // must not be async for i18n
      conv.ask(i18n.__('WELCOME_BASIC'));
    });
    
    app.intent('date', (conv) => { // must not be async for i18n
      conv.ask(i18n.__('DATE', moment().format('LL')));
    });

Voici un exemple de fichier index.js complet :

'use strict';
const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');
const i18n = require('i18n');
const moment = require('moment');

i18n.configure({
  locales: ['en-US', 'en-GB', 'de-DE'],
  directory: __dirname + '/locales',
  defaultLocale: 'en-US'
});

const app = dialogflow({debug: true});

app.middleware((conv) => {
  i18n.setLocale(conv.user.locale);
  moment.locale(conv.user.locale);
});

app.intent('Default Welcome Intent', (conv) => { // must not be async for i18n
  conv.ask(i18n.__('WELCOME_BASIC'));
});

app.intent('date', (conv) => { // must not be async for i18n
  conv.ask(i18n.__('DATE', moment().format('LL')));
});

exports.demoAction = functions.https.onRequest(app);