Atendimento dos pedidos (Dialogflow)

A lógica de fulfillment pode usar a string de localidade recebida em cada solicitação para para fornecer respostas aos usuários. Neste guia, mostramos como usar algumas bibliotecas de localização de terceiros em uma Função do Cloud para Firebase e retornar respostas localizadas.

Bibliotecas de localização

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

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

Criar respostas localizadas

Esta seção mostra como criar arquivos de recursos de string localizados que contêm strings localizadas e como usar esses arquivos de recursos no Função para fulfillment do Firebase.

Para criar respostas localizadas:

  1. No mesmo diretório dos arquivos package.json e index.js, crie um diretório locales para os arquivos de string localizados. Vamos nos referir a isso como <project-dir>/functions/locales.
  2. Criar um arquivo de recurso que contenha strings localizadas para cada localidade que você quer apoiar. Por exemplo, se você quiser oferecer suporte a en-US, en-GB, e de-DE com mensagens localizadas de data e boas-vindas, esses arquivos pode 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 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. No arquivo index.js, declare as dependências do i18n-node e momento bibliotecas:

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

  5. No arquivo index.js, configure o i18n-node 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 retornados por i18n. Esse snippet também contém uma função que usa moment. 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 arquivo index.js completo como exemplo:

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