Mendukung beberapa bahasa dengan Google Terjemahan

Dengan lokalitas Business Messages dan Google Terjemahan yang cerdas, otomatis terjemahan, Anda dapat memperluas jangkauan agen dengan berkomunikasi dengan pengguna di bahasa pilihan mereka. Tutorial ini memandu Anda melalui Bukti Konsep (Proof of Concept) integrasi Google Terjemahan dengan webhook Business Messages.

Yang Anda butuhkan

Untuk memulai, Anda perlu menyiapkan beberapa hal berikut:

Mendapatkan kode

Tutorial ini memandu Anda melalui contoh kode webhook yang terintegrasi dengan Google Terjemahkan. Untuk mendapatkan kode, clone repositori dari GitHub:

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

Buka direktori yang di-clone dan tempatkan kunci akun layanan Anda ke dalam direktori resource:

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

TIPS: Jika Anda memerlukan bantuan untuk menyiapkan atau mendownload kunci layanan, lihat Panduan Google Cloud untuk mengelola akun layanan.

Setelah selesai, Anda dapat men-deploy kode:

gcloud app deploy

Kirim beberapa pesan ke agen menggunakan perangkat seluler. Coba kirimkan dalam berbagai bahasa dan melihat apa yang terjadi.

Menyiapkan Translate API

Kode contoh sudah termasuk paket Node untuk Translate API terinstal. Jika Anda tertarik dengan cara menginstal paket Node, atau cara menginstal Translate API dalam bahasa pemrograman yang berbeda, lihat Dokumen Cloud Translate API.

Untuk menggunakan Translate API, Anda perlu mengimpor library dan membuat Terjemahan klien API. Buka file routes/index.js. Baris yang relevan adalah:

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

Mulai sekarang, Anda dapat mengakses metode Translate API di objek terjemahan.

Lihat variabel yang dibuat di dekat bagian atas file:

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

Kode contoh menyimpan bahasa server sebagai konstanta karena relatif diperbaiki. Namun, bahasa percakapan saat ini dapat berubah, sehingga percakapan akan dilacak dalam variabel currentLanguage.

Mendeteksi bahasa yang masuk

Kode contoh mendeteksi apakah bahasa yang masuk telah berubah, dan jika sudah berubah, meminta pengguna untuk memilih bahasa yang akan digunakan dalam percakapan. Coba fitur ini di perangkat seluler Anda dengan mengetik pesan kepada agen dalam selain bahasa Inggris. Jika Anda tidak mengetahui bahasa lain, coba ketik "Hola" (itu bahasa Spanyol untuk "Hello"!).

Agen merespons dengan perintah yang menanyakan apakah pengguna ingin beralih bahasa. Perintah ini menyertakan balasan yang disarankan yang dapat diklik pengguna mengganti ke bahasa tersebut.

Mari kita lihat fitur deteksi bahasa.

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

Metode ini menggunakan metode deteksi pada klien terjemahan. Karena Translate API dapat mendeteksi beberapa bahasa dengan tingkat kepercayaan yang berbeda (dan juga karena mendukung banyak ), metode ini akan mengembalikan array hasil. Sampel ini mengambil hasil, yang merupakan hasil dengan kepercayaan tertinggi.

Menggunakan lokalitas yang di-resolve

Terkadang Translate API tidak dapat menentukan bahasa pesan dengan kepercayaan diri. Misalnya, jika kucing Anda berlari melintasi {i>keyboard<i} Anda dan memasukkan yang tidak masuk akal, Translate API akan tetap mencoba mendeteksi bahasa, namun bahasa yang terdeteksi mungkin salah. (Lagi pula, Google Terjemahan masih belum mendukung bahasa kucing!) Translate API menunjukkan hal ini dengan menetapkan nilai keyakinan rendah dalam hasil translate.detect.

Dalam skenario ini, kode contoh kembali ke bahasa pada Lokal yang diselesaikan Business Messages, yang merupakan tebakan terbaik Business Messages API dalam bahasa tersebut berdasarkan sesuai konteks pesan. Karena lokalitas yang di-resolve menggunakan format BCP-47, Anda dapat menggunakan paket Node.js yang sesuai untuk mengurai kode bahasa dari lokalitas.

Anda dapat menguji perilaku ini dengan mengetikkan string panjang nonsens ke agen. Di beberapa kebanyakan kasus, Anda tidak akan melihat perintah untuk mengubah bahasa (kecuali lokal yang diselesaikan berbeda dengan bahasa saat ini). Agen hanya mengatakan {i>cloud<i} tidak memahami permintaan Anda.

Meminta untuk mengubah bahasa

Setelah mendeteksi bahwa bahasa telah berubah, agen akan mengirimkan kembali prompt ke mengubah bahasa.

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

Kode ini membuat prompt, menerjemahkannya ke bahasa saat ini (lebih lanjut tentang di bagian Terjemahan pesan keluar), lalu mengirimkan respons dengan saran balasan. Pengguna mungkin ingin berbicara dengan salah satu bahasa:

  • Bahasa masuk yang terdeteksi.
  • Bahasa percakapan saat ini.
  • Bahasa bawaan server.

Karena mungkin ada tumpang tindih dalam ketiga bahasa tersebut (misalnya, jika bahasa bahasa sudah menjadi bahasa server), server menggunakan objek yang ditetapkan untuk menghapus duplikasi. Kemudian, balasan yang disarankan akan dibuat untuk setiap bahasa:

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

Balasan yang disarankan akan menampilkan nama bahasa dalam bahasanya sendiri. Misalnya, Bahasa Spanyol muncul sebagai "Español". Untuk mendapatkan informasi tentang suatu bahasa dari kode bahasa dua digit, Anda dapat menggunakan library ISO-639-1 untuk Node.js.

Perhatikan data postback, yang dikirim ke server saat pengguna mengklik saran ini. Data {i> postback <i}memberitahu server bagaimana merespons dan memberikan konteks tambahan terkait saran ini.

Metode sendResponse melampirkannya objek saran untuk membalas:

let messageObject = {
    …
    suggestions: suggestedReplies,
  };

Mengubah bahasa percakapan

Sekarang kembali ke perangkat seluler Anda dan coba klik opsi bahasa baru di prompt yang sama dari sebelumnya. Misalnya, jika Anda mengetik "Hola", coba klik "Spanyol" inci saran balasan.

Agen merespons dalam bahasa baru. Kami akan membahas cara menerjemahkan balasan di langkah selanjutnya. Untuk saat ini, lihat kode yang menerima dan memproses saran balasan yang Anda klik.

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

Jika permintaan berisi balasan untuk saran, server akan menggunakan postback data untuk menentukan apa yang harus dilakukan. Dalam kasus sederhana ini, server hanya mendukung satu jenis data postback, SWITCH_LANGUAGE_POSTBACK, yang menandakan bahwa percakapan harus diubah ke bahasa dalam bahasa yang mengikuti pada kode sumber. Setelah mengurai kode bahasa ini, server akan mengirimkan pesan untuk memberi tahu pengguna bahwa bahasa telah berubah.

Terjemahan pesan masuk

Setelah mengubah bahasa, Anda bisa mengirim permintaan ke agen dalam bahasa di perangkat seluler Anda. Coba kirimkan kata "help" (bantuan) di di bahasa target. Jika Anda mengubah bahasa ke bahasa Spanyol, ketik "ayuda" dan kirimkan untuk membuat pesan email baru.

Server memahami permintaan bantuan Anda dan membalas dengan menu lainnya. Coba salah satu cara berikut untuk melihat contoh respons hard code.

Kode contoh menggunakan metode translateText untuk menerjemahkan baik yang masuk maupun pesan keluar. Lihatlah sekarang:

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

Jika bahasa sumber sama dengan bahasa target, tidak ada yang perlu fungsi tersebut. Jika tidak, server akan memanggil metode metode terjemahan pada klien Translate API. Seperti metode deteksi, metode terjemahan dapat mengambil beberapa input. Karena server hanya memberikan satu input, ia mengambil hasil pertama dari Translate API.

Lihat pada bagian metode callback yang merespons pesan masuk di bahasa saat ini:

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

Server menggunakan output dari translateText untuk memilih pesan respons. Bagian selanjutnya berfokus pada proses pemilihan pesan respons dan menerjemahkannya.

Terjemahan pesan keluar

Setelah server menerjemahkan pesan masuk ke bahasa Inggris asli, server itu untuk memilih, menerjemahkan, dan mengirim respons yang sesuai atas permintaan pengguna. Kode contoh menggunakan skema yang sangat sederhana yang memetakan kata kunci ke respons. Memiliki lihat metode 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.";
}

Skema ini hanya mendukung bahasa Inggris di server, artinya server harus menerjemahkan semua pesan masuk dan keluar. Sistem yang lebih canggih mungkin mendukung beberapa bahasa dan merespons permintaan dalam bahasa lain secara native. Misalnya, jika agen Anda mendukung bahasa Spanyol, agen itu mungkin sudah memiliki kunci untuk "ayuda" dalam peta respons. Sistem yang lebih canggih juga mungkin mengandalkan metodologi untuk memilih respons yang tepat, seperti ML atau penskoran algoritme. Salah satu cara untuk membuat respons yang lebih cerdas dengan Business Messages adalah berintegrasi dengan Dialogflow.

Sekarang lihat kode yang mengirim pesan yang dipilih kembali ke pengguna.

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

Kode contoh menggunakan kembali metode translateText untuk menerjemahkan teks yang dipilih respons ke dalam bahasa percakapan saat ini. Metode sendResponse kemudian peduli membuat objek Message baru dan mengirimkannya ke pengguna.

Ringkasan

Dalam tutorial ini, Anda telah mempelajari cara membuat integrasi sederhana dengan Cloud Translate API dan memanfaatkan fitur lokalitas Business Messages untuk menjangkau lebih banyak pengguna. Jika Anda Anda dapat menggunakan kode contoh dalam tutorial ini sebagai titik awal untuk integrasi sendiri, atau mencoba sesuatu yang baru! Berikut adalah beberapa ide:

  • Kirim pesan bilingual yang berisi konten pesan asli dan konten yang diterjemahkan secara otomatis.
  • Sajikan menu lengkap bahasa yang didukung kepada pengguna saat mereka memulai percakapan.
  • Menggunakan fitur Translate API lanjutan seperti glosarium untuk menerjemahkan kata yang spesifik untuk bisnis Anda secara andal.

Dengan mengintegrasikan Translate API, Anda dapat memanfaatkan mesin berkualitas tinggi terjemahan untuk berkomunikasi dengan lebih banyak pengguna dalam bahasa yang paling nyaman. Agen Anda dapat melakukan percakapan yang lebih produktif dan efisien, sehingga meningkatkan kepuasan pelanggan dan penyelesaian tugas.