Atendimento dos pedidos (Dialogflow)

Sua lógica de fulfillment pode usar a string de localidade recebida em cada solicitação para atender às respostas dos usuários. Neste guia, mostramos como usar algumas bibliotecas de localização de terceiros em uma função do Cloud para Firebase para retornar respostas localizadas.

Bibliotecas de localização

Veja algumas bibliotecas úteis para ajudar você a gerar respostas personalizadas para localidades específicas:

  • Uso geral: I18n-node (nossos snippets de código de exemplo usam essa biblioteca).
  • Uso geral: format.js
  • Localização de fuso horário/horário: moment.js (nossos snippets de código de exemplo usam essa biblioteca).
  • Dinheiro/moeda: numeral.js

Criar respostas localizadas

Nesta seção, mostramos como criar arquivos de recursos de string localizados que contêm strings localizadas e como usar esses arquivos de recursos no fulfillment do Cloud Functions para Firebase.

Para criar respostas localizadas:

  1. No mesmo diretório que os arquivos package.json e index.js, crie um diretório locales para os arquivos de string localizados. Chamaremos esse diretório de <project-dir>/functions/locales.
  2. Crie um arquivo de recursos que contenha strings localizadas para cada localidade a que você quer oferecer suporte. Por exemplo, se você quiser oferecer suporte às localidades en-US, en-GB e de-DE com mensagens de boas-vindas e de data localizadas, esses arquivos podem ter esta aparência:

    <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. No arquivo package.json, declare as bibliotecas i18n-node e momento como dependências:

    {
     ...
     "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. No arquivo index.js, declare as dependências das bibliotecas i18n-node e momento:

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

  5. No arquivo index.js, configure o nó i18n com as localidades compatíveis:

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

  6. Defina a localidade das bibliotecas usando conv.user.locale da propriedade da biblioteca de cliente.

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

  7. Para retornar uma resposta localizada, chame ask() com uma string localizada retornada por i18n. Este snippet também contém uma função que usa o momento para retornar uma data 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')));
    });

Confira um exemplo de arquivo index.js completo:

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