Evasione degli ordini (Dialogflow)

La logica di fulfillment può utilizzare la stringa delle impostazioni internazionali che riceve in ogni richiesta per indirizzare le risposte agli utenti. Questa guida mostra come utilizzare alcuni librerie di localizzazione all'interno di una funzione Cloud Functions per Firebase risposte localizzate.

Librerie di localizzazione

Ecco alcune librerie utili da prendere in considerazione per aiutarti Generare risposte personalizzate per paesi specifici:

  • Uso generico: I18n-node (nostro esempi di snippet di codice che utilizzano questa libreria)
  • Uso generico: format.js
  • Localizzazione di fuso orario/ora: moment.js (nostro esempi di snippet di codice che utilizzano questa libreria)
  • Denaro/valuta: numeral.js

Crea risposte localizzate

Questa sezione mostra come creare file di risorse di tipo stringa localizzata contengono stringhe localizzate e come utilizzare questi file di risorse nel tuo Cloud Funzione per il completamento di Firebase.

Per creare risposte localizzate:

  1. Nella stessa directory dei file package.json e index.js, crea una directory locales per i file di stringa localizzati. Ci riferiremo a questo come <project-dir>/functions/locales.
  2. Crea un file di risorse che contenga stringhe localizzate per ogni lingua che vuoi supportare. Ad esempio, se vuoi supportare en-US, en-GB, e de-DE con messaggi di benvenuto e di data localizzati, i file potrebbe avere il seguente aspetto:

    <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. Nel file package.json, dichiara le librerie i18n-node e moment come delle dipendenze:

    {
     ...
     "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. Nel file index.js, dichiara le dipendenze per i18n-node e moment librerie:

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

  5. Nel file index.js, configura il nodo i18n con le impostazioni internazionali supportate:

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

  6. Imposta le impostazioni internazionali per le librerie utilizzando conv.user.locale dalla libreria client proprietà.

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

  7. Per restituire una risposta localizzata, chiama ask() con una stringa localizzata restituito da i18n. Questo snippet contiene anche una funzione che utilizza per restituire una data localizzata:

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

Ecco un file index.js completo come esempio:

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