Hỗ trợ nhiều ngôn ngữ bằng Google Dịch

Sử dụng ngôn ngữ của Business Messages và các tính năng thông minh, tự động của Google Dịch bản dịch, bạn có thể mở rộng phạm vi tiếp cận của nhân viên hỗ trợ bằng cách giao tiếp với người dùng ở ngôn ngữ họ ưa dùng. Hướng dẫn này sẽ trình bày về tính năng Proof of Concept (Bằng chứng về khái niệm) tích hợp Google Dịch với webhook của Business Messages.

Bạn cần có

Để bắt đầu, bạn sẽ cần chuẩn bị một số thứ sau đây:

Lấy mã

Hướng dẫn này sẽ chỉ cho bạn mã webhook mẫu tích hợp với Google Dịch. Để lấy mã, hãy sao chép kho lưu trữ từ GitHub:

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

Chuyển đến thư mục đã sao chép rồi đặt khoá tài khoản dịch vụ vào thư mục tài nguyên:

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

MẸO: Nếu bạn cần trợ giúp về việc thiết lập hoặc tải khoá dịch vụ xuống, hãy xem Hướng dẫn của Google Cloud về việc quản lý tài khoản dịch vụ.

Sau khi hoàn tất bước này, bạn có thể triển khai mã:

gcloud app deploy

Gửi một vài tin nhắn cho nhân viên hỗ trợ trên thiết bị di động của bạn. Hãy thử gửi thông báo bằng các ngôn ngữ khác nhau và xem điều gì sẽ xảy ra.

Thiết lập Translate API

Mã mẫu đi kèm với gói Nút cho Translate API đã có . Nếu bạn muốn biết cách cài đặt gói Nút hoặc cách cài đặt Translate API bằng ngôn ngữ lập trình khác, hãy xem Tài liệu về API Cloud Translate.

Để sử dụng Translate API, bạn cần nhập thư viện và tạo Translate Ứng dụng API. Mở tệp routes/index.js. Các dòng có liên quan là:

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

Từ giờ trở đi, bạn có thể truy cập vào các phương thức của Translate API trên đối tượng dịch.

Hãy xem các biến được tạo ở gần đầu tệp:

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

Mã mẫu lưu trữ ngôn ngữ máy chủ dưới dạng hằng số vì việc này tương đối đã được khắc phục. Tuy nhiên, ngôn ngữ hiện tại của cuộc trò chuyện có thể thay đổi, vì vậy cuộc trò chuyện được theo dõi trong biến currentLanguage.

Phát hiện ngôn ngữ đến

Mã mẫu phát hiện xem ngôn ngữ đến có thay đổi hay không và nếu có, nhắc người dùng chọn ngôn ngữ họ muốn sử dụng trong cuộc trò chuyện. Hãy dùng thử tính năng này trên thiết bị di động của bạn bằng cách nhập tin nhắn cho nhân viên hỗ trợ trong ngôn ngữ bên cạnh tiếng Anh. Nếu bạn không biết ngôn ngữ nào khác, hãy thử nhập "Hola" (nghĩa là "Xin chào" trong tiếng Tây Ban Nha!).

Nhân viên hỗ trợ sẽ phản hồi bằng lời nhắc hỏi xem người dùng có muốn chuyển đổi không ngôn ngữ. Lời nhắc bao gồm các câu trả lời đề xuất mà người dùng có thể nhấp vào để chuyển sang ngôn ngữ đó.

Trước tiên, hãy cùng tìm hiểu tính năng phát hiện ngôn ngữ.

/**
 * 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);
      });
  });
}

Phương pháp này sử dụng phương pháp phát hiện trên ứng dụng dịch. Vì API Dịch có thể phát hiện nhiều ngôn ngữ với các mức độ tin cậy khác nhau (và cũng vì vì công cụ này hỗ trợ nhiều đầu vào), phương thức này sẽ trả về một mảng kết quả. Mẫu này lấy giá trị đầu tiên Đây là kết quả có độ tin cậy cao nhất.

Sử dụng ngôn ngữ đã phân giải

Đôi khi, Translate API không thể xác định ngôn ngữ của thông báo với sự tự tin. Ví dụ: nếu con mèo của bạn chạy ngang qua bàn phím và nhập một chuỗi vô nghĩa, API Dịch vẫn cố phát hiện ngôn ngữ, nhưng ngôn ngữ được phát hiện có thể không chính xác. (Sau cùng, Google Dịch chưa hỗ trợ ngôn ngữ từ mèo!) Translate API cho biết điều này bằng cách đặt giá trị độ tin cậy thấp trong kết quả của translate.detect.

Trong trường hợp này, mã mẫu quay lại ngôn ngữ trong Ngôn ngữ đã phân giải của Business Messages, đó là dự đoán tốt nhất của API Business Messages về ngôn ngữ dựa trên ngữ cảnh của thư. Vì ngôn ngữ được phân giải có định dạng BCP-47, nên bạn có thể sử dụng gói Node.js tương ứng với phân tích cú pháp mã ngôn ngữ trong ngôn ngữ.

Bạn có thể kiểm tra hành vi này bằng cách nhập một chuỗi dài vô nghĩa cho tác nhân. Trong hầu hết các trường hợp, bạn sẽ không thấy lời nhắc thay đổi ngôn ngữ (trừ phi ngôn ngữ đã phân giải khác với ngôn ngữ hiện tại). Nhân viên hỗ trợ chỉ nói ứng dụng không hiểu yêu cầu của bạn.

Nhắc thay đổi ngôn ngữ

Sau khi phát hiện thấy ngôn ngữ đã thay đổi, nhân viên hỗ trợ sẽ gửi lại lời nhắc đến thay đổi ngôn ngữ.

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

Đoạn mã này sẽ tạo một câu lệnh và dịch sang ngôn ngữ hiện tại (xem thêm thông tin về câu lệnh này trong phần Dịch thư đi), sau đó gửi phản hồi kèm theo câu trả lời đề xuất. Người dùng nên nói về bất kỳ câu nào sau đây ngôn ngữ:

  • Ngôn ngữ đến được phát hiện.
  • Ngôn ngữ hiện tại của cuộc trò chuyện.
  • Ngôn ngữ tích hợp của máy chủ.

Do có thể có sự trùng lặp trong ba ngôn ngữ này (ví dụ: nếu ngôn ngữ ngôn ngữ đã là ngôn ngữ máy chủ), máy chủ sử dụng một đối tượng đã đặt để xoá trùng lặp. Sau đó, Bard sẽ tạo một câu trả lời đề xuất cho từng ngôn ngữ:

/**
 * 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,
    },
  };
}

Câu trả lời đề xuất hiển thị tên của ngôn ngữ đó bằng ngôn ngữ của chính ngôn ngữ đó. Ví dụ: Tiếng Tây Ban Nha xuất hiện dưới dạng "Español". Để nhận thông tin về một ngôn ngữ từ mã ngôn ngữ hai chữ số, bạn có thể dùng thư viện ISO-639-1 cho Node.js.

Hãy lưu ý dữ liệu đăng lại, dữ liệu này sẽ được gửi đến máy chủ khi người dùng nhấp vào đề xuất này. Dữ liệu đăng lại cho máy chủ biết cách phản hồi và cung cấp ngữ cảnh của nội dung đề xuất.

Phương thức sendResponse đính kèm các giá trị này đối tượng đề xuất cho câu trả lời:

let messageObject = {
    …
    suggestions: suggestedReplies,
  };

Thay đổi ngôn ngữ của cuộc trò chuyện

Giờ hãy quay lại thiết bị di động của bạn và thử nhấp vào một tùy chọn ngôn ngữ mới trong từ trước. Ví dụ: nếu bạn nhập "Hola", hãy thử nhấp vào "Tây Ban Nha" inch các câu trả lời đề xuất.

Nhân viên hỗ trợ trả lời bằng ngôn ngữ mới. Chúng tôi sẽ đề cập đến cách dịch trả lời ở bước sau. Bây giờ, hãy xem mã nhận được và xử lý câu trả lời đề xuất mà bạn đã nhấp vào.

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, []);
      });
    }
  }

Nếu yêu cầu chứa câu trả lời cho một đề xuất, máy chủ sẽ sử dụng hệ thống đăng lại để xác định việc cần làm. Trong trường hợp đơn giản này, máy chủ chỉ hỗ trợ một loại dữ liệu đăng lại, SWITCH_LANGUAGE_POSTBACK, cho thấy rằng cuộc trò chuyện phải chuyển sang ngôn ngữ ở ngôn ngữ ngay sau đó . Sau khi phân tích cú pháp mã ngôn ngữ này, máy chủ sẽ gửi thông báo để thông báo cho người dùng rằng ngôn ngữ đã thay đổi.

Dịch thư đến

Vì ngôn ngữ hiện đã thay đổi nên bạn có thể gửi yêu cầu đến nhân viên hỗ trợ bằng ngôn ngữ đó ngôn ngữ trên thiết bị di động của bạn. Thử gửi từ "trợ giúp" trong phiên bản mới ngôn ngữ. Nếu bạn đã thay đổi ngôn ngữ thành tiếng Tây Ban Nha, hãy nhập "ayuda" rồi gửi .

Máy chủ hiểu yêu cầu trợ giúp và trả lời của bạn thông qua trình đơn . Hãy thử bất kỳ cách nào trong số các cách này để xem phản hồi mẫu được mã hoá cứng.

Mã mẫu sử dụng phương thức translateText để dịch cả thư đến và tin nhắn đi. Bây giờ, hãy xem qua:

/**
 * 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);
      });
  });
}

Nếu ngôn ngữ nguồn giống với ngôn ngữ đích, thì bạn không cần làm gì làm. Nếu không, máy chủ sẽ gọi hàm phương pháp dịch trên ứng dụng API Dịch. Giống như phương pháp phát hiện, phương pháp dịch có thể lấy nhiều thông tin đầu vào. Vì máy chủ chỉ cung cấp một đầu vào nên sẽ lấy giá trị kết quả đầu tiên từ Translate API.

Hãy xem mục của phương thức gọi lại phản hồi các tin nhắn đến trong ngôn ngữ hiện tại:

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

Máy chủ sử dụng dữ liệu đầu ra của translateText để chọn một thông báo phản hồi. Phần tiếp theo sẽ tìm hiểu sâu hơn về quy trình chọn thông báo phản hồi và dịch nội dung đó.

Dịch thư đi

Sau khi máy chủ dịch thư đến của bạn sang tiếng Anh bản địa, để chọn, dịch và gửi phản hồi thích hợp cho yêu cầu của người dùng. Mã mẫu sử dụng một giản đồ rất đơn giản để ánh xạ từ khoá với câu trả lời. Có hãy xem phương thức 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.";
}

Lược đồ này chỉ hỗ trợ tiếng Anh trên máy chủ, tức là máy chủ phải dịch tất cả thư đến và đi. Một hệ thống tinh vi hơn có thể hỗ trợ nhiều ngôn ngữ và phản hồi nguyên gốc với các yêu cầu bằng các ngôn ngữ khác. Ví dụ: nếu nhân viên hỗ trợ của bạn hỗ trợ tiếng Tây Ban Nha, thì có thể nhân viên hỗ trợ đó đã có khoá cho "ayuda" trong bản đồ phản hồi. Các hệ thống tinh vi hơn cũng có thể dựa vào Các phương pháp để chọn câu trả lời thích hợp, chẳng hạn như công nghệ học máy hoặc tính điểm các thuật toán. Một cách để tạo câu trả lời thông minh hơn bằng tính năng Business Messages là tích hợp với Dialogflow.

Bây giờ, hãy xem mã sẽ gửi lại thông báo đã chọn cho người dùng.

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

Mã mẫu sử dụng lại phương thức translateText để dịch phương thức đã chọn sang ngôn ngữ của cuộc trò chuyện hiện tại. Khi đó, phương thức sendResponse quan tâm đến việc tạo đối tượng Tin nhắn mới và gửi đối tượng đó cho người dùng.

Tóm tắt

Trong hướng dẫn này, bạn đã tìm hiểu cách tạo việc tích hợp đơn giản với Cloud Translate API và tận dụng các tính năng ngôn ngữ của Business Messages để tiếp cận thêm nhiều người dùng. Nếu bạn chẳng hạn như, bạn có thể sử dụng mã mẫu trong hướng dẫn này làm điểm bắt đầu cho của riêng bạn, hoặc bạn có thể thử một công cụ mới! Dưới đây là một số ý tưởng:

  • Gửi thư song ngữ chứa cả nội dung thư gốc và nội dung được dịch tự động.
  • Hiển thị cho người dùng trình đơn đầy đủ các ngôn ngữ được hỗ trợ khi họ bắt đầu cuộc trò chuyện.
  • Sử dụng các tính năng nâng cao của API Dịch như bảng thuật ngữ để dịch các từ cụ thể cho doanh nghiệp của bạn một cách đáng tin cậy.

Bằng cách tích hợp với API của Dịch, bạn có thể tận dụng công nghệ máy chất lượng cao để giao tiếp với nhiều người dùng hơn bằng ngôn ngữ thoải mái nhất của họ. Nhân viên hỗ trợ của bạn có thể trò chuyện hiệu quả và hiệu quả hơn, sự hài lòng của khách hàng và hoàn thành công việc.