รองรับหลายภาษาด้วย Google แปลภาษา

ภาษาใน Business Messages และระบบอัตโนมัติอัจฉริยะของ Google แปลภาษา คุณจะสามารถขยายการเข้าถึงของตัวแทนได้ด้วยการสื่อสารกับผู้ใช้ในภาษาต่างๆ ภาษาที่ต้องการ บทแนะนำนี้จะแนะนำเกี่ยวกับการพิสูจน์แนวคิด การผสานรวม Google แปลภาษาเข้ากับเว็บฮุคของ Business Messages

สิ่งที่ต้องมี

ในการเริ่มต้น คุณจะต้องเตรียมสิ่งต่างๆ ต่อไปนี้

รับโค้ด

บทแนะนำนี้จะแนะนำตัวอย่างโค้ดเว็บฮุคที่ผสานรวมกับ Google แปลภาษา หากต้องการรับโค้ด ให้โคลนที่เก็บจาก GitHub ดังนี้

git clone https://github.com/google-business-communications/bm-nodejs-translation-tutorial

ไปที่ไดเรกทอรีที่โคลนและวางคีย์บัญชีบริการลงในไดเรกทอรีทรัพยากร

cp credentials.json bm-nodejs-translation-sample/resources/bm-agent-service-account-credentials.json

เคล็ดลับ: หากต้องการความช่วยเหลือในการตั้งค่าหรือดาวน์โหลดคีย์บริการ โปรดดู คำแนะนำสำหรับ Google Cloud สำหรับการจัดการบัญชีบริการ

เมื่อดำเนินการเสร็จแล้ว คุณสามารถทำให้โค้ดใช้งานได้:

gcloud app deploy

ส่งข้อความบางอย่างถึงตัวแทนโดยใช้อุปกรณ์เคลื่อนที่ ลองส่ง ข้อความในภาษาต่างๆ และดูว่าจะเกิดอะไรขึ้น

ตั้งค่า Translate API

โค้ดตัวอย่างมาพร้อมกับแพ็กเกจโหนดสำหรับ Translate API แล้ว ติดตั้งไว้แล้ว หากคุณสนใจเกี่ยวกับวิธีติดตั้งแพ็กเกจโหนดหรือวิธีการ ติดตั้ง Translate API ในภาษาโปรแกรมอื่น โปรดดู เอกสาร Cloud Translate API

หากต้องการใช้ Translate API คุณต้องนำเข้าไลบรารีและสร้าง "แปลภาษา" ไคลเอ็นต์ API เปิดไฟล์ routes/index.js บรรทัดที่เกี่ยวข้อง ได้แก่

// Import the Translate API library.
const { Translate } = require("@google-cloud/translate").v2;
// Create a new Translate API client.
const translate = new Translate();

จากนี้ไป คุณจะเข้าถึงเมธอด Translate API ในออบเจ็กต์แปลภาษาได้

ลองดูตัวแปรที่สร้างขึ้นบริเวณด้านบนของไฟล์ ดังนี้

const SERVER_LANGUAGE = "en";
let currentLanguage = SERVER_LANGUAGE;

โค้ดตัวอย่างจัดเก็บภาษาของเซิร์ฟเวอร์เป็นค่าคงที่เนื่องจาก คงที่ แต่ภาษาของการสนทนาอาจเปลี่ยนแปลงได้ ระบบจึงติดตามการสนทนา ในตัวแปร currentLanguage

กำลังตรวจหาภาษาขาเข้า

โค้ดตัวอย่างจะตรวจหาว่าภาษาขาเข้ามีการเปลี่ยนแปลงหรือไม่ หากมี จะแจ้งให้ผู้ใช้เลือกภาษาที่ต้องการใช้ในการสนทนา ลองใช้ฟีเจอร์นี้ในอุปกรณ์เคลื่อนที่ของคุณโดยพิมพ์ข้อความถึงตัวแทนใน ภาษาอื่นนอกเหนือจากภาษาอังกฤษ หากคุณไม่รู้ภาษาอื่นๆ ให้ลองพิมพ์ "โฮลา" (หมายถึง "สวัสดี" ภาษาสเปน)

ตัวแทนตอบกลับพร้อมพรอมต์ที่ถามผู้ใช้ว่าต้องการเปลี่ยนหรือไม่ ภาษา ข้อความแจ้งดังกล่าวจะมีคำตอบที่แนะนำซึ่งผู้ใช้สามารถคลิกเข้าไปได้ สลับเป็นภาษานั้น

ก่อนอื่น มาดูที่ฟีเจอร์การตรวจหาภาษากัน

/**
 * Detects input text language.
 *
 * @param {string} text The text received from the consumer.
 * @param {Context} context The user message request context.
 * @return A Promise with the detected language code.
 */
async function detectLanguage(text, context) {
  return new Promise(function (resolve, reject) {
    translate
      .detect(text)
      .then((result) => {
        if (result && result.length > 0) {
          if (result[0].confidence > CONFIDENCE_THRESHOLD) {
            resolve(result[0].language);
          }
          resolve(bcp47.parse(context.resolvedLocale).language);
        } else {
          reject("No language detected");
        }
      })
      .catch((err) => {
        console.error("ERROR:", err);
        reject(err);
      });
  });
}

เมธอดนี้ใช้เมธอดตรวจจับ ในไคลเอ็นต์แปลภาษา เนื่องจาก Translate API อาจตรวจพบหลายภาษา ที่มีระดับความเชื่อมั่นแตกต่างกัน (และยังสนับสนุน ) วิธีนี้จะแสดงอาร์เรย์ของผลลัพธ์ ตัวอย่างจะใช้ ซึ่งเป็นผลลัพธ์ที่มีความเชื่อมั่นสูงสุด

การใช้ภาษาที่แก้ไขแล้ว

บางครั้ง Translate API ไม่สามารถระบุภาษาของข้อความที่มี ความเชื่อมั่น เช่น ถ้าแมวของคุณพิมพ์ผ่านแป้นพิมพ์และป้อนข้อมูล สตริงที่ไม่มีความหมาย แต่ Translate API ยังคงพยายามตรวจหาภาษา แต่ ภาษาที่ตรวจพบอาจไม่ถูกต้อง (อย่างไรก็ตาม Google แปลภาษา ยังไม่รองรับภาษาแมว) Translate API ระบุสิ่งนี้โดย กำหนดค่าความเชื่อมั่นต่ำในผลลัพธ์ของ translate.detect

ในสถานการณ์นี้ โค้ดตัวอย่างจะกลับไปเป็นภาษาใน ภาษาที่แก้ไขปัญหาของ Business Messages ซึ่งเป็นการคาดเดาภาษาที่ดีที่สุดของ Business Messages API โดยอิงจาก บริบทของข้อความได้ เนื่องจากภาษาที่แปลงแล้วอยู่ในรูปแบบ BCP-47 คุณสามารถใช้ แพ็กเกจ Node.js ที่เกี่ยวข้องกับ แยกวิเคราะห์รหัสภาษาจากภาษา

คุณสามารถทดสอบลักษณะการทำงานนี้ได้โดยพิมพ์สตริงคำที่ไม่มีความหมายยาวๆ ลงใน Agent ใน ส่วนใหญ่คุณจะไม่เห็นข้อความแจ้งให้เปลี่ยนภาษา (เว้นแต่ ภาษาที่แก้ไขแล้วแตกต่างจากภาษาปัจจุบัน) ตัวแทนเพียงแค่พูดว่า มันไม่เข้าใจคำขอของคุณ

การแจ้งให้เปลี่ยนภาษา

หลังจากตรวจพบว่าภาษามีการเปลี่ยนแปลง ตัวแทนจะส่งข้อความแจ้งกลับไปที่ ให้เปลี่ยนภาษา

if (detectedLanguage != currentLanguage) {
        translateText(
          "Which language would you like to use?",
          SERVER_LANGUAGE,
          currentLanguage
        ).then((normalizedTranslationNotice) => {
          sendResponse(
            normalizedTranslationNotice,
            conversationId,
            [
              ...new Set([detectedLanguage, currentLanguage, SERVER_LANGUAGE]),
            ].map((x) => createSuggestedReply(x))
          );
        });
      }

โค้ดจะสร้างพรอมต์และแปลเป็นภาษาปัจจุบัน (ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ ในส่วนการแปลข้อความขาออก) จากนั้นส่งคำตอบด้วย คำตอบที่แนะนำ ผู้ใช้อาจต้องการพูดถึงในส่วนต่อไปนี้ ภาษา:

  • ภาษาขาเข้าที่ตรวจพบ
  • ภาษาปัจจุบันของการสนทนา
  • ภาษาในตัวของเซิร์ฟเวอร์

เนื่องจากทั้ง 3 ภาษานี้อาจทับซ้อนกัน (ตัวอย่างเช่น หาก ภาษาเป็นภาษาของเซิร์ฟเวอร์อยู่แล้ว) เซิร์ฟเวอร์จะใช้อ็อบเจ็กต์ชุดเพื่อนำออก รายการซ้ำ จากนั้นจะสร้างคำตอบที่แนะนำสำหรับแต่ละภาษา ดังนี้

/**
 * Create a suggested reply for a language code.
 * @param {string} languageCode A ISO 6391 language code.
 * @return {Suggestion} The suggestion object for switching to the language.
 */
function createSuggestedReply(languageCode) {
  return {
    reply: {
      text: ISO6391.getNativeName(languageCode),
      postbackData: SWITCH_LANGUAGE_POSTBACK + languageCode,
    },
  };
}

การตอบกลับที่แนะนำจะแสดงชื่อของภาษานั้นในภาษานั้นๆ ตัวอย่างเช่น ภาษาสเปนจะปรากฏเป็น "Español" วิธีรับข้อมูลเกี่ยวกับภาษาจากภาษา รหัสภาษาแบบ 2 หลัก คุณสามารถใช้ไลบรารี ISO-639-1 สำหรับ Node.js ได้

โปรดสังเกตข้อมูลระบบรายงานผล Conversion ซึ่งจะส่งไปยังเซิร์ฟเวอร์เมื่อผู้ใช้คลิก คำแนะนำนี้ ข้อมูลระบบรายงานผล Conversion จะบอกให้เซิร์ฟเวอร์ทราบถึงวิธีตอบสนองและ บริบทเกี่ยวกับคำแนะนำ

เมธอด sendResponse จะแนบรายการเหล่านี้ ออบเจ็กต์คำแนะนำ การตอบกลับ:

let messageObject = {
    …
    suggestions: suggestedReplies,
  };

การเปลี่ยนภาษาของการสนทนา

คราวนี้ให้กลับไปที่อุปกรณ์เคลื่อนที่ และลองคลิกตัวเลือกภาษาใหม่ใน จากข้อความก่อนหน้า เช่น ถ้าคุณพิมพ์ "Hola" ลองคลิก "Español" ใน คำตอบที่แนะนำ

ตัวแทนจะตอบกลับเป็นภาษาใหม่ เราจะพูดถึงวิธีแปลข้อความ ตอบกลับในขั้นตอนถัดไป สำหรับตอนนี้ ให้ดูที่โค้ดที่รับและประมวลผล การตอบกลับที่แนะนำที่คุณคลิก

if (requestBody.suggestionResponse !== undefined) {
    let postbackData = requestBody.suggestionResponse.postbackData;
    if (postbackData.startsWith(SWITCH_LANGUAGE_POSTBACK)) {
      let languageCode = postbackData.substr(SWITCH_LANGUAGE_POSTBACK.length);
      currentLanguage = languageCode;
      translateText(
        "The language was set to " +
          ISO6391.getName(languageCode) +
          ". Please repeat your request.",
        SERVER_LANGUAGE,
        languageCode
      ).then((translationNotice) => {
        sendResponse(translationNotice, conversationId, []);
      });
    }
  }

หากคำขอมีการตอบกลับคำแนะนำ เซิร์ฟเวอร์จะใช้ระบบรายงานผล Conversion เพื่อกำหนดว่าต้องทำอย่างไร ในกรณีทั่วๆ ไปนี้ เซิร์ฟเวอร์จะสนับสนุนเพียง ประเภทระบบรายงานผล Conversion ซึ่งก็คือ SWITCH_LANGUAGE_POSTBACK ซึ่งแสดงให้เห็นว่า การสนทนาควรเปลี่ยนไปเป็นภาษาต่อไปนี้ทันที โค้ด หลังจากแยกวิเคราะห์รหัสภาษานี้ เซิร์ฟเวอร์จะส่งข้อความเพื่อแจ้ง ที่มีการเปลี่ยนภาษา

การแปลข้อความขาเข้า

เมื่อเปลี่ยนภาษาแล้ว คุณจะส่งคำขอไปยังตัวแทนในพื้นที่ดังกล่าวได้ ภาษาบนอุปกรณ์เคลื่อนที่ ลองส่งคำว่า "ความช่วยเหลือ" ใน ภาษา ถ้าคุณเปลี่ยนภาษาเป็นภาษาสเปน ให้พิมพ์ "ayuda" แล้วส่ง

เซิร์ฟเวอร์เข้าใจคำขอของคุณสำหรับความช่วยเหลือและการตอบกลับด้วยเมนูของ ตัวเลือก ลองใช้เครื่องมือเหล่านี้เพื่อดูตัวอย่างคำตอบที่ฮาร์ดโค้ดไว้

โค้ดตัวอย่างใช้วิธีการ translateText เพื่อแปลทั้งข้อมูลขาเข้าและ ข้อความขาออก ลองดูข้อมูลตอนนี้

/**
 * Translates text to a given target language. No translation if source and
 * target language match.
 *
 * @param {string} text the text to translate
 * @param {string} sourceLanguage The language of the source text.
 * @param {string} targetLanguage The target language.
 * @return A Promise with the translated text.
 */
async function translateText(text, sourceLanguage, targetLanguage) {
  if (sourceLanguage === targetLanguage) {
    return new Promise(function (resolve, reject) {
      resolve(text);
    });
  }
  return new Promise(function (resolve, reject) {
    translate
      .translate(text, targetLanguage)
      .then((result) => {
        if (result && result.length > 0) {
          resolve(result[0]);
        } else {
          reject("Could not translate message");
        }
      })
      .catch((err) => {
        console.error("ERROR:", err);
        reject(err);
      });
  });
}

หากภาษาต้นฉบับตรงกับภาษาเป้าหมาย จะไม่มีข้อมูลใด สิ่งที่ควรทำ มิฉะนั้น เซิร์ฟเวอร์จะเรียกฟังก์ชัน แปลเมธอด ในไคลเอ็นต์ Translate API เช่นเดียวกับวิธีตรวจหา วิธีแปลภาษาสามารถ อินพุตหลายรายการ เนื่องจากเซิร์ฟเวอร์จะใส่เพียง 1 อินพุต จึงต้องเลือก ผลลัพธ์แรกจาก Translate API

ดูส่วนของเมธอด Callback ที่ตอบกลับข้อความขาเข้าใน ภาษาปัจจุบัน:

translateText(incomingMessage, currentLanguage, SERVER_LANGUAGE).then(
          (normalizedMessage) => {
            let serverResponse = chooseResponseMessage(normalizedMessage);
            …
          }
        );

เซิร์ฟเวอร์จะใช้เอาต์พุตจาก translateText เพื่อเลือกข้อความตอบกลับ ส่วนถัดไปจะอธิบายกระบวนการเลือกข้อความตอบกลับและ การแปลด้วย

การแปลข้อความขาออก

หลังจากที่เซิร์ฟเวอร์แปลข้อความขาเข้าของคุณเป็นภาษาอังกฤษ เพื่อเลือก แปล และส่งคำตอบที่เหมาะสมต่อคำขอของผู้ใช้ โค้ดตัวอย่างใช้รูปแบบที่เรียบง่ายมากซึ่งแมปคีย์เวิร์ดกับคำตอบ มี ให้ดูที่เมธอด chooseResponseMessage

/**
 * Select a topically appropriate response based on the message
 * content that the user sent to the agent.
 *
 * @param {string} incomingMessage The content of the message that the user typed in.
 * @param {string} conversationId The unique id for this user and agent.
 * @return {string} A response message.
 */
function chooseResponseMessage(incomingMessage) {
  let responseMapping = {
    balance: "Your current balance is $500.",
    deposit: "Please enter your deposit amount.",
    transfer:
      "Please enter the account number where you wish to transfer the funds.",
    withdraw: "Please enter the amount you wish to withdraw.",
    help: "Please choose what you'd like to do: balance, deposit, transfer, or withdraw.",
  };

  for (const [key, value] of Object.entries(responseMapping)) {
    if (incomingMessage.toLowerCase().includes(key)) {
      return value;
    }
  }

  return "I didn't understand your request. Please try again.";
}

รูปแบบนี้สนับสนุนเฉพาะภาษาอังกฤษบนเซิร์ฟเวอร์ ซึ่งหมายความว่าเซิร์ฟเวอร์จะต้อง แปลข้อความขาเข้าและขาออกทั้งหมด ระบบที่ซับซ้อนมากขึ้นอาจ รองรับหลายภาษาและตอบกลับคำขอในภาษาอื่นๆ ได้ทันที เช่น หากตัวแทนของคุณรองรับภาษาสเปน ก็อาจมีคีย์สำหรับ "Ayuda" ในแผนที่คำตอบ ระบบที่ซับซ้อนมากขึ้นอาจต้องอาศัย วิธีการเลือกคำตอบที่เหมาะสม เช่น ML หรือการให้คะแนน อัลกอริทึม หนึ่งวิธีในการสร้างคำตอบที่ชาญฉลาดยิ่งขึ้นด้วย Business Messages ก็คือการผสานรวมกับ Dialogflow

จากนั้นดูที่โค้ดที่ส่งข้อความที่เลือกไว้กลับไปยังผู้ใช้

let serverResponse = chooseResponseMessage(normalizedMessage);
            translateText(
              serverResponse,
              SERVER_LANGUAGE,
              currentLanguage
            ).then((normalizedResponse) => {
              sendResponse(normalizedResponse, conversationId, []);
            });

โค้ดตัวอย่างจะใช้เมธอด translateText ซ้ำเพื่อแปลค่า ตอบกลับไปยังภาษาการสนทนาปัจจุบัน จากนั้นใช้เมธอด sendResponse เริ่มสร้างออบเจ็กต์ข้อความใหม่และส่งไปยังผู้ใช้

สรุป

ในบทแนะนำนี้ คุณได้เรียนรู้วิธีสร้าง การผสานรวมกับ Cloud Translate API อย่างง่ายดาย และใช้ประโยชน์จากฟีเจอร์ภาษาของ Business Messages เพื่อเข้าถึงผู้ใช้ได้มากขึ้น หากคุณ คุณสามารถใช้โค้ดตัวอย่างในบทแนะนำนี้เป็นจุดเริ่มต้นสำหรับ การผสานรวมของตนเอง หรือคุณจะลองอะไรใหม่ๆ ก็ได้ ลองดูแนวคิดบางส่วนกัน

  • ส่งข้อความสองภาษาที่มีทั้งเนื้อหาข้อความต้นฉบับและ เนื้อหาที่แปลโดยอัตโนมัติ
  • แสดงเมนูภาษาที่รองรับทั้งหมดแก่ผู้ใช้เมื่อเริ่มต้น การสนทนา
  • ใช้ฟีเจอร์ขั้นสูงของ Translate API เช่น อภิธานศัพท์ เพื่อแปลคำเฉพาะสำหรับธุรกิจของคุณอย่างน่าเชื่อถือ

เมื่อผสานรวมกับ API ของ Google แปลภาษา คุณจะสามารถใช้ประโยชน์จากแมชชีนคุณภาพสูงได้ เพื่อสื่อสารกับผู้ใช้เพิ่มขึ้นด้วยภาษาที่เข้าใจง่ายที่สุด ตัวแทนของคุณจะสามารถสนทนาได้อย่างมีประสิทธิภาพและประสิทธิผลมากขึ้น ความพึงพอใจของลูกค้าและการทำงานเสร็จ