Mendukung beberapa bahasa dengan Google Terjemahan

Dengan lokalitas Business Messages dan terjemahan otomatis cerdas Google Terjemahan, Anda dapat memperluas jangkauan agen dengan berkomunikasi dengan pengguna dalam bahasa pilihan mereka. Tutorial ini akan memandu Anda melalui integrasi Bukti Konsep Google Terjemahan dengan webhook Business Messages.

Yang akan Anda butuhkan

Untuk memulai, Anda perlu menyiapkan beberapa hal berikut:

Mendapatkan kode

Tutorial ini akan memandu Anda memahami kode webhook contoh yang terintegrasi dengan Google Terjemahan. 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 pesan ke agen menggunakan perangkat seluler Anda. Coba kirim pesan dalam berbagai bahasa dan lihat apa yang terjadi.

Menyiapkan Translate API

Kode contoh disertakan dengan paket Node untuk Translate API yang sudah diinstal. Jika Anda ingin mengetahui cara menginstal paket Node, atau cara menginstal Terjemahan API dalam bahasa pemrograman lain, lihat dokumen Cloud Translate API.

Untuk menggunakan Translate API, Anda perlu mengimpor library dan membuat klien Terjemahan 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 Terjemahan 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 tetap. Namun, bahasa percakapan saat ini dapat berubah, sehingga dilacak dalam variabel currentLanguage.

Mendeteksi bahasa yang masuk

Kode contoh mendeteksi apakah bahasa masuk telah berubah, dan jika demikian, meminta pengguna untuk memilih bahasa yang ingin digunakan dalam percakapan. Coba fitur ini di perangkat seluler dengan mengetikkan pesan ke agen dalam bahasa selain bahasa Inggris. Jika Anda tidak tahu bahasa lain, coba ketik "Hola" (itu bahasa Spanyol untuk "Halo"!).

Agen akan merespons dengan pertanyaan yang menanyakan apakah pengguna ingin mengganti bahasa. Permintaan akan menyertakan balasan yang disarankan yang dapat diklik pengguna untuk beralih ke bahasa tersebut.

Pertama-tama, 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 Terjemahan API dapat mendeteksi beberapa bahasa dengan tingkat keyakinan yang berbeda (dan juga karena mendukung beberapa input), metode ini menampilkan array hasil. Sampel mengambil hasil pertama, yang merupakan hasil dengan keyakinan tertinggi.

Menggunakan lokal yang telah diselesaikan

Terkadang Terjemahan API tidak dapat menentukan bahasa pesan dengan tingkat keyakinan tinggi. Misalnya, jika kucing Anda berjalan di keyboard dan memasukkan string tidak masuk akal, Translate API tetap berusaha mendeteksi bahasa, tetapi bahasa yang terdeteksi mungkin salah. (Lagi pula, Google Terjemahan belum mendukung bahasa kucing!) API Terjemahan menunjukkan hal ini dengan menyetel nilai keyakinan rendah pada hasil translate.detect.

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

Anda dapat menguji perilaku ini dengan mengetik string panjang nonsens ke agen. Biasanya, Anda tidak akan melihat permintaan untuk mengubah bahasa (kecuali jika lokal yang diselesaikan berbeda dengan bahasa saat ini). Agen hanya mengatakan tidak memahami permintaan Anda.

Meminta untuk mengubah bahasa

Setelah mendeteksi bahwa bahasa telah berubah, agen akan mengirimkan kembali perintah untuk 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 perintah, menerjemahkannya ke bahasa saat ini (selengkapnya tentang hal tersebut di bagian Terjemahan pesan keluar), lalu mengirimkan respons dengan balasan yang disarankan. Pengguna mungkin ingin berbicara dalam salah satu bahasa berikut:

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

Karena mungkin ada tumpang tindih dalam tiga bahasa ini (misalnya, jika bahasa saat ini sudah menjadi bahasa server), server menggunakan objek yang ditetapkan untuk menghapus duplikat. Setelah itu, saran balasan 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 menunjukkan nama bahasa dalam bahasanya sendiri. Misalnya, Spanyol muncul sebagai "Español." Untuk mendapatkan informasi tentang 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 postback memberi tahu server cara merespons dan memberikan konteks tentang saran.

Metode sendResponse melampirkan objek saran ini ke balasan:

let messageObject = {
    …
    suggestions: suggestedReplies,
  };

Mengubah bahasa percakapan

Sekarang kembali ke perangkat seluler Anda dan coba klik opsi bahasa baru di perintah dari sebelumnya. Misalnya, jika Anda mengetik "Hola," coba klik "Español" di balasan yang disarankan.

Agen merespons dalam bahasa baru. Kami akan membahas cara menerjemahkan balasan keluar pada langkah berikutnya. Untuk saat ini, lihat kode yang menerima dan memproses balasan yang disarankan 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 data postback untuk menentukan hal yang harus dilakukan. Dalam kasus sederhana ini, server hanya mendukung satu jenis data postback, yaitu SWITCH_LANGUAGE_POSTBACK, yang menandakan bahwa percakapan harus berubah ke bahasa dalam kode bahasa berikut. Setelah menguraikan kode bahasa ini, server akan mengirim pesan untuk memberi tahu pengguna bahwa bahasa telah berubah.

Terjemahan pesan masuk

Dengan bahasa yang sekarang telah diubah, Anda dapat mengirim permintaan ke agen dalam bahasa tersebut di perangkat seluler. Coba kirimkan kata untuk "help" dalam bahasa baru. Jika Anda mengubah bahasa ke Spanyol, ketik "ayuda" dan kirim pesan.

Server memahami permintaan bantuan dan balasan Anda dengan menu opsi. Coba salah satu untuk melihat contoh respons hard code.

Kode contoh menggunakan metode translateText untuk menerjemahkan pesan masuk dan keluar. Lihat 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 harus dilakukan. Jika tidak, server akan memanggil metode terjemahan di klien Translate API. Seperti metode deteksi, metode terjemahan dapat mengambil beberapa input. Karena server hanya menyediakan satu input, proses ini akan mengambil hasil pertama dari Translate API.

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

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

Server menggunakan output dari translateText untuk memilih pesan respons. Bagian berikutnya membahas proses memilih pesan respons dan menerjemahkannya.

Terjemahan pesan keluar

Setelah server menerjemahkan pesan masuk ke bahasa Inggris native, server harus memilih, menerjemahkan, dan mengirimkan respons yang sesuai untuk permintaan pengguna. Kode contoh menggunakan skema yang sangat sederhana yang memetakan kata kunci ke respons. 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, yang berarti server harus menerjemahkan semua pesan masuk dan keluar. Sistem yang lebih canggih mungkin mendukung beberapa bahasa dan secara native merespons permintaan dalam bahasa lain. Misalnya, jika agen Anda mendukung bahasa Spanyol, agen tersebut mungkin sudah memiliki kunci untuk "ayuda" dalam peta respons. Sistem yang lebih canggih mungkin juga mengandalkan metodologi lain untuk memilih respons yang tepat, seperti ML atau algoritme penskoran. Salah satu cara untuk membuat respons yang lebih cerdas dengan Business Messages adalah dengan mengintegrasikan dengan Dialogflow.

Sekarang lihat kode yang mengirimkan pesan yang dipilih kembali kepada pengguna.

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

Kode contoh menggunakan kembali metode translateText untuk menerjemahkan respons yang dipilih ke dalam bahasa percakapan saat ini. Metode sendResponse kemudian menangani pembuatan 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 lokal Business Messages untuk menjangkau lebih banyak pengguna. Jika mau, Anda dapat menggunakan kode contoh dalam tutorial ini sebagai langkah awal untuk integrasi Anda sendiri, atau Anda dapat mencoba sesuatu yang baru. Berikut adalah beberapa ide:

  • Mengirim pesan bilingual yang berisi konten pesan asli dan konten yang diterjemahkan secara otomatis.
  • Tampilkan menu lengkap yang berisi bahasa yang didukung kepada pengguna saat mereka memulai percakapan.
  • Manfaatkan fitur Translate API lanjutan seperti glosari untuk menerjemahkan kata yang spesifik untuk bisnis Anda dengan andal.

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