Google 翻譯支援多種語言

運用 Business Messages 的語言代碼,以及 Google 翻譯的智慧和自動化功能 不妨與 他們偏好的語言本教學課程將逐步說明概念驗證 整合 Google 翻譯與 Business Messages Webhook

軟硬體需求

開始之前,請備妥以下項目:

取得程式碼

本教學課程將逐步介紹可與 Google 整合的 Webhook 程式碼範例 翻譯功能:如要取得程式碼,請從 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 適用的 Node 套件 已安裝。如想瞭解如何安裝 Node 套件 改用其他程式設計語言安裝 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 物件上使用 Translate API 方法。

查看檔案頂端附近建立的變數:

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

程式碼範例會將伺服器語言儲存為常數 通常也會自動修復但會改變對話目前的語言,因此系統會追蹤對話內容 currentLanguage 變數中。

偵測收到的語言

程式碼範例會偵測傳入的語言是否有所變更,如果有,請 會提示使用者選擇要在對話中使用的語言。 在行動裝置上試用這項功能,輸入訊息給服務專員, 提供英文以外的語言如果你不知道其他語言,請嘗試輸入 「你好」(這是西班牙文的「Hello」!)。

服務專員會回覆提示,詢問使用者是否要切換 語言。這個提示包含使用者可以點選的建議回覆 並切換至該語言。

首先來看看語言偵測功能。

/**
 * 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 可以偵測多種語言 而且信賴水準不同 (此外,系統也支援多種方法) 就會傳回結果陣列。本範例採用的 也就是可信度最高的結果

使用已解析的語言代碼

有時候,Google 翻譯 API 無法判斷訊息的語言 並採用可靠的專業技術舉例來說,假設您的貓咪在鍵盤上奔跑,然後輸入 不合常規的字串,則 Translate API 仍會嘗試偵測語言,但 偵測到的語言可能不正確。(畢竟,Google 翻譯 但是尚不支援貓咪語言!)Translate API 表示 設定 translate.detect 結果的可信度值偏低。

在此情況下,程式碼範例會改回使用 Business Messages 已解析語言代碼, Business Messages API 是根據所用語言 訊息內文解析的語言代碼採用 BCP-47 格式,因此您可以使用 對應的 Node.js 套件 從語言代碼剖析語言代碼。

您可以在代理程式中輸入一長串無意義的字串,來測試這個行為。於 大部分的情況下,系統應該不會顯示變更語言的提示 (除非 解析的語言代碼與目前的語言不同)。服務專員會說: 其他人無法理解您的要求。

提示變更語言

偵測到語言已變更後,代理程式會傳回提示到 變更語言。

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

程式碼會建立提示,並翻譯成目前語言 , 建議回覆。使用者可能會想進行下列對話 語言:

  • 偵測到的傳入語言。
  • 目前的對話語言。
  • 伺服器內建語言。

這三種語言可能有重疊 (比方說 就是伺服器語言,伺服器就會使用 set 物件來移除 個重複的項目。接著,系統會為各個語言建立建議的回覆:

/**
 * 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」。為了從 您可以使用 Node.js 適用的 ISO-639-1 程式庫

請注意,當使用者點選 這個建議。回傳資料可告知伺服器如何回應並提供 建議。

sendResponse 方法會附加 建議物件 回覆:

let messageObject = {
    …
    suggestions: suggestedReplies,
  };

變更對話的語言

現在請返回行動裝置,嘗試在 輸出提示舉例來說,如果您輸入「Hola」請嘗試點選「Español」英吋 建議的回覆內容。

代理程式會以新語言回應。我們會說明如何翻譯外部 IP 位址 回覆。現在,請查看接收及處理 您點選的建議回覆。

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

如果要求內含建議回覆,伺服器會使用回傳 資料來判斷該做些什麼。在這個簡易情況下,伺服器僅支援 是回傳資料類型的 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);
      });
  });
}

如果原文語言與目標語言相同,就代表沒有意義 信任關係如果沒有,伺服器會呼叫 翻譯方法 翻譯 API 用戶端就像偵測方法一樣 會接收多項輸入內容伺服器只提供一個輸入內容,因此會接收 第一個結果顯示翻譯。

請查看回呼方法中會回應傳入訊息的部分。 目前語言:

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」。更複雜的系統也可能仰賴其他 選擇適當回應 (如機器學習或評分) 演算法。用 Business Messages 打造更智慧回覆的方式 就是與 Dialogflow 整合

現在,請查看將所選訊息傳回給使用者的程式碼。

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

程式碼範例會重複使用 translateText 方法翻譯所選屬性 回覆目前對話語言接著,sendResponse 方法 負責建立新的 Message 物件,並將其傳送給使用者。

摘要

在本教學課程中,您已學到如何建立 與 Cloud Translate API 相互整合 並利用 Business Messages 語言代碼功能,觸及更多使用者。如果發生以下情況: 您可以使用本教學課程中的程式碼範例,為 或者您也可以試試新的!不妨參考下列建議:

  • 傳送包含原始郵件內容和雙語訊息的雙語訊息, 自動翻譯的內容
  • 在使用者開始對話時,提供完整的支援語言選單 對話。
  • 使用進階 Translate API 功能 例如詞彙表,可靠地翻譯與您業務相關的字詞

整合 Translate API 後,您就能運用優質機器 以便使用慣用的語言與更多使用者溝通 服務專員可以提升溝通效率及更有效率地進行對話, 客戶滿意度和工作完成度