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 bibliotecas de localização em uma função do Cloud para Firebase a fim de 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 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 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. Definir a localidade das bibliotecas usando conv.user.locale 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);