การดำเนินการตามคำสั่งซื้อ (Dialogflow)

ตรรกะ Fulfillment อาจใช้สตริงภาษาที่ได้รับในคำขอทุกรายการเพื่อตอบสนองผู้ใช้ คู่มือนี้จะแสดงวิธีใช้ไลบรารีการแปลของบุคคลที่สามบางรายการภายใน Cloud Function สำหรับ Firebase เพื่อแสดงผลการตอบกลับที่แปลแล้ว

ไลบรารีการแปล

ต่อไปนี้คือไลบรารีที่มีประโยชน์บางส่วนซึ่งควรพิจารณา เพื่อช่วยคุณสร้างคำตอบที่กำหนดเองสำหรับภาษาเฉพาะ

  • จุดประสงค์ทั่วไป: I18n-node (ข้อมูลโค้ดตัวอย่างของเราใช้ไลบรารีนี้)
  • จุดประสงค์ทั่วไป: format.js
  • เขตเวลา/การแปลเขตเวลา: moment.js (ข้อมูลโค้ดตัวอย่างของเราใช้ไลบรารีนี้)
  • เงิน/สกุลเงิน: numeral.js

สร้างคำตอบที่แปลแล้ว

ส่วนนี้จะแสดงวิธีสร้างไฟล์ทรัพยากรสตริงที่แปลแล้วซึ่งมีสตริงที่แปลแล้ว และวิธีใช้ไฟล์ทรัพยากรเหล่านี้ใน Function ของ Cloud Function สำหรับ 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 และ Moments เป็นทรัพยากร Dependency ดังนี้

    {
     ...
     "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 ให้ประกาศทรัพยากร Dependency สำหรับไลบรารี i18n-node และโมเมนต์ต่อไปนี้

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

  5. ในไฟล์ index.js ให้กำหนดค่าโหนด i18n ด้วยภาษาที่รองรับของคุณ ดังนี้

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