Entrega (Dialogflow)

Tu lógica de entrega puede usar la cadena de configuración regional que recibe en cada solicitud para brindan respuestas a los usuarios. En esta guía, se muestra cómo usar herramientas las bibliotecas de localización en una Cloud Function para Firebase para crear respuestas localizadas.

Bibliotecas de localización

Estas son algunas bibliotecas útiles que debes tener en cuenta para ayudarte Genera respuestas personalizadas para configuraciones regionales específicas:

  • De uso general: I18n-node (nuestro ejemplos de fragmentos de código usan esta biblioteca)
  • Uso general: format.js
  • Zona horaria/localización de la hora: moment.js (nuestro ejemplos de fragmentos de código usan esta biblioteca)
  • Dinero y moneda: numeral.js

Crea respuestas localizadas

En esta sección, se muestra cómo crear archivos de recursos de cadenas localizados contienen cadenas localizadas y cómo usar estos archivos de recursos en tu Es la función para la entrega de Firebase.

Para crear respuestas localizadas, sigue estos pasos:

  1. En el mismo directorio que tus archivos package.json y index.js, crea un directorio locales para tus archivos de cadenas localizadas. Nos referiremos a esto como <project-dir>/functions/locales.
  2. Crea un archivo de recursos que contenga cadenas localizadas para cada configuración regional que que deseas admitir. Por ejemplo, si quieres admitir en-US, en-GB, y de-DE configuraciones regionales con mensajes de fecha y bienvenida localizados, esos archivos podría verse así:

    <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. En el archivo package.json, declara las bibliotecas i18n-node y moment como dependencies:

    {
     ...
     "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. En el archivo index.js, declara las dependencias para el nodo i18n y el momento bibliotecas:

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

  5. En el archivo index.js, configura el nodo i18n con tus configuraciones regionales compatibles:

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

  6. Establece la configuración regional de las bibliotecas con conv.user.locale de la biblioteca cliente propiedad.

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

  7. Para mostrar una respuesta localizada, llama a ask() con una cadena localizada que devuelve i18n. Este fragmento también contiene una función que usa para mostrar una fecha localizada:

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

A continuación, se muestra un archivo index.js completo a modo de ejemplo:

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