מילוי הזמנות (Dialogflow)

לוגיקת מילוי ההזמנות יכולה להשתמש במחרוזת הלוקאל שהיא מקבלת בכל בקשה כדי לתת מענה לתגובות של המשתמשים. במדריך הזה מוסבר איך להשתמש באפליקציות של צדדים שלישיים ספריות לוקליזציה בתוך פונקציה של Cloud Functions שב-Firebase כדי להחזיר אותן מותאמות לשוק המקומי.

ספריות לוקליזציה

הנה כמה ספריות שימושיות שכדאי להיעזר בהן ליצור תשובות מותאמות אישית ללוקאלים ספציפיים:

  • למטרות כלליות: I18n-node (קטעי הקוד לדוגמה שלנו משתמשים בספרייה הזו)
  • מטרה כללית: format.js
  • לוקליזציה של אזור זמן/זמן: moment.js (ה קטעי קוד לדוגמה משתמשים בספרייה הזו)
  • Money/currency: numeral.js

יצירת תשובות מותאמות לשוק המקומי

בקטע הזה מוסבר איך ליצור קובצי משאב מחרוזות שמותאמים לשוק המקומי כוללים מחרוזות שהותאמו לשוק המקומי ואת אופן השימוש בקובצי המשאבים האלה בענן. פונקציה למילוי הזמנות ב-Firebase.

כדי ליצור תשובות מותאמות לשוק המקומי:

  1. באותה ספרייה שבה נמצאים הקבצים package.json ו-index.js, יוצרים ספריית locales לקובצי המחרוזת שהותאמו לשוק המקומי. נתייחס לזה ספרייה בתור <project-dir>/functions/locales.
  2. יוצרים קובץ משאבים שמכיל מחרוזות מותאמות לשוק המקומי לכל לוקאל שבה רוצים לתמוך. לדוגמה, אם רוצים לתמוך ב-en-US, ב-en-GB, ו-de-DE לוקאלים עם הודעות פתיחה ותאריך מקומיות, הקבצים האלה עשוי להיראות כך:

    <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. בקובץ package.json, צריך להצהיר על ספריות ה-i18n-node ועל ספריות הרגע בתור 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. בקובץ index.js, מצהירים על יחסי התלות של צומת ה-i18n ושל הרגע. ספריות:

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

  5. בקובץ index.js, מגדירים את הצומת i18n-node עם הלוקאלים הנתמכים:

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

  6. הגדרת הלוקאל של הספריות באמצעות conv.user.locale מספריית הלקוח לנכס.

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

  7. כדי לקבל תשובה שמותאמת לשוק המקומי, צריך להתקשר למספר ask() עם מחרוזת שמותאמת לשוק המקומי שהוחזר על ידי i18n. קטע הקוד הזה גם מכיל פונקציה שמשתמשת ברגע כדי להחזיר תאריך מותאם לשוק המקומי:

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

לדוגמה, קובץ index.js מלא:

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