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:
- Pendaftaran partner yang lengkap dan disetujui untuk Business Messages. Lihat Mendaftar sebagai panduan partner.
- Agen Business Messages, termasuk kunci akun layanan Anda. Untuk membuat agen, lihat Panduan membuat agen pertama Anda.
- Komputer yang diinstal Google Cloud SDK dan Node.js (versi 10 atau yang lebih baru). Pastikan Anda telah login dan tetapkan project ID yang aktif di Google Cloud SDK.
- Perangkat Android atau iOS untuk pengujian.
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.