Google Çeviri ile birden fazla dili destekleme

Business Messages'ın yerel ayarları ve Google Çeviri'nin akıllı ve otomatik yardımcı olmak için, aşağıdaki iletişim araçlarını kullanarak temsilcinizin tercih etmeleri gerekir. Bu eğitim, kavram kanıtlama çalışmasında size yol gösterir Google Çeviri'nin Business Messages webhook'uyla entegrasyonu.

Gerekenler

Başlamak için, aşağıdaki birkaç şeyi hazırlamanız gerekir:

Kodu alın

Bu eğitim, Google ile entegre olan örnek webhook kodu konusunda size yol gösterir Çevir. Kodu almak için GitHub'dan depoyu klonlayın:

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

Klonlanan dizine gidin ve hizmet hesabı anahtarınızı kaynaklar dizinine yerleştirin:

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

İPUCU: Hizmet anahtarınızı kurma veya indirme konusunda yardıma ihtiyacınız varsa Hizmet hesaplarını yönetmeyle ilgili Google Cloud rehberi.

Bu tamamlandıktan sonra kodu dağıtabilirsiniz:

gcloud app deploy

Mobil cihazınızı kullanarak temsilciye birkaç mesaj gönderin. Şunu göndermeyi deneyin: farklı dillerde mesaj gönderip ne olduğuna bakın.

Çeviri API'sini ayarlama

Örnek kod, Çeviri API'sinin Düğüm paketiyle birlikte gelir yüklendi. Node paketini nasıl yükleyeceğinizi veya Translate API'yi farklı bir programlama dilinde yüklemeniz için Cloud Translation API belgeleri.

Translation API'yi kullanmak için kitaplığı içe aktarmanız ve bir Çeviri oluşturmanız gerekir API istemcisi. routes/index.js dosyasını açın. İlgili satırlar:

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

Artık çeviri nesnesinden Çeviri API'sı yöntemlerine erişebilirsiniz.

Dosyanın üst kısmına yakın bir yerde oluşturulan değişkenlere göz atın:

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

Örnek kod, sunucu dilini sabit olarak saklar çünkü bu dil göreli olarak düzeltildi. Ancak görüşmenin şu anki dili değişebileceği için takip edilir currentLanguage değişkeninde kullanılabilir.

Gelen dili algılama

Örnek kod, gelen dilin değişip değişmediğini algılar ve değiştiyse kullanıcıdan sohbette kullanmak istediği dili seçmesini ister. Bu özelliği, mobil cihazınızda temsilciye bir mesaj yazarak İngilizce dışında bir dil kullanabilirsiniz. Başka bir dil bilmiyorsanız yazmayı deneyin "Hola" (Bu, İspanyolca "Hello" demek!).

Temsilci, kullanıcının geçiş yapmak isteyip istemediğini soran bir istemle yanıt verir. dil. İstem, kullanıcının tıklayabileceği, önerilen yanıtları içerir o dile geçin.

Önce dil algılama özelliğine göz atalım.

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

Bu yöntem, algılama yöntemini kullanır çeviriyi kullanabilirsiniz. Çeviri API birden fazla dili algılayabileceği için destekleyici olması gerekir (ayrıca farklı düzeylerde girdi) ise bu yöntem bir sonuç dizisi döndürür. Örnek, ilk olarak Bu, en yüksek güven düzeyine sahip sonuçtur.

Çözümlenmiş yerel ayar kullanılıyor

Bazen Translation API, yüksek değerde ileti dilini güven. Örneğin, kediniz klavyenizin üzerinden koşup bir anlam ifade etmediği sürece, Translation API yine de dili algılamaya çalışır, algılanan dil yanlış olabilir. (Sonuçta Google Çeviri, (henüz!) kedi dillerini desteklememektedir. Translation API bu durumu translate.detect işlevinin sonucu için düşük bir güven değeri ayarlıyorsunuz.

Bu senaryoda, örnek kod Business Messages çözümlenmiş yerel ayar, kullanılan dile dayalı olarak Business Messages API'nin en iyi tahminini bağlamını gösterir. Çözülmüş yerel ayar BCP-47 biçiminde olduğundan ilgili Node.js paketini dil kodunu yerel ayardan ayrıştırır.

Aracıya uzun bir anlamsız kelime dizesi yazarak bu davranışı test edebilirsiniz. İçinde çoğu durumda dili değiştirmeniz söylenmez ( çözümlenmiş yerel ayar geçerli dilden farklı). Temsilci, isteğinizi anlamıyor.

Dilin değiştirilmesi isteniyor

Dilin değiştiğini tespit ettikten sonra aracı, dili değiştir.

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

Kod bir istem oluşturur ve bunu geçerli dile çevirir (daha fazla bilgi çevirisini ekler), ardından istek üzerine gönderilen yanıt önerileri. Kullanıcı aşağıdaki ifadelerden herhangi birini kullanarak konuşmak isteyebilir diller:

  • Algılanan gelen dil.
  • Mevcut görüşme dili.
  • Sunucunun yerleşik dili.

Bu üç dilde çakışabileceği için (örneğin geçerli dildeki dil zaten sunucu diliyse sunucu, dil dosyalarını kaldırmak için yinelenenler. Ardından her dil için bir yanıt önerisi oluşturulur:

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

Önerilen yanıt, dilin adını kendi dilinde gösterir. Örneğin, İspanyolca, "İspanyolca" olarak görünür. Bir dil hakkında bilgi almak için iki haneli dil kodu kullanıyorsanız Node.js için ISO-639-1 kitaplığını kullanabilirsiniz.

Kullanıcı videoyu tıkladığında sunucuya gönderilen geri gönderme verilerine dikkat edin. bu öneriden bahsedeceğim. Geri gönderme verileri, sunucuya nasıl yanıt vereceğini bildirir ve bunu göz önünde bulundurun.

sendResponse yöntemi, bunları öneri nesneleri yanıt:

let messageObject = {
    …
    suggestions: suggestedReplies,
  };

Görüşmenin dilini değiştirme

Şimdi mobil cihazınıza dönün ve istemini girin. Örneğin, "Hola" yazdıysanız "İspanyolca"yı tıklamayı deneyin inç yanıt verebilirsiniz.

Temsilci yeni dilde yanıt verir. Giden konuşmaların nasıl çevrilmesi gerektiğini adımda yanıt alabilirsiniz. Şimdilik, alan adını alan ve işleyen koda yanıt olarak ekleyebilirsiniz.

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

İstek bir öneriye yanıt içeriyorsa sunucu, geri göndermeyi kullanır verileri kullanır. Bu basit durumda sunucu yalnızca bir belirtir. Bu, geri gönderme verilerinin türünü, SWITCH_LANGUAGE_POSTBACK ise sohbet şu anda bir sonraki dildeki dile geçmelidir girin. Sunucu, bu dil kodunu ayrıştırdıktan sonra, bu dili kullanıcının dilinin değiştiğini fark edebilir.

Gelen ileti çevirisi

Dil artık değiştirildikten sonra temsilciye dil ayarını seçin. "Yardım" kelimesini göndermeyi deneyin yeni dili'ne dokunun. Dili İspanyolca olarak değiştirdiyseniz "ayuda" yazın. ve mesajını alırsınız.

Sunucu, yardım isteğinizi anlar ve şu menüyü kullanarak yanıt verir: seçenekleri vardır. Sabit kodlu bir örnek yanıt görmek için aşağıdakilerden birini deneyin.

Örnek kod, hem gelen hem de dönüşümleri çevirmek için translateText yöntemini kullanır. giden iletiler olabilir. Hemen göz atın:

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

Kaynak dil, hedef dille aynıysa öğreteceğim. Aksi takdirde, sunucu çeviri yöntemi çeviri API istemcisinde çalışır. Çeviri yöntemi gibi çeviri yöntemi de giriş kabul edersiniz. Sunucu yalnızca bir giriş sağladığından, Çeviri API'sinden ilk sonuç.

Şurada gelen iletilere yanıt veren geri çağırma yönteminin bölümüne bakın: geçerli dil:

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

Sunucu, bir yanıt iletisi seçmek için translateText çıkışını kullanır. Bir sonraki bölümde, yanıt mesajını seçme ve çok önemlidir.

Giden mesaj çevirisi

Sunucu gelen mesajınızı ana İngilizcesine çevirdikten sonra, kullanıcının isteğine uygun bir yanıt seçmek, çevirmek ve göndermek. Örnek kod, anahtar kelimeleri yanıtlarla eşleştiren çok basit bir şema kullanır. Sahip olunan chooseResponseMessage yöntemine bakalım.

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

Bu şema sunucuda yalnızca İngilizceyi destekler, yani sunucunun tüm gelen ve giden iletileri çevirmenizi sağlar. Daha gelişmiş bir sistem, birden fazla dili desteklemeli ve diğer dillerdeki isteklere yerel olarak yanıt vermelidir. Örneğin, temsilciniz İspanyolcayı destekliyorsa zaten "ayuda" tıklayın. Daha gelişmiş sistemler diğer ML veya puanlama gibi uygun bir yanıt seçmek için metodolojiler kullanır. Business Messages ile daha akıllı yanıtlar oluşturmanın bir yolu Dialogflow ile entegrasyon sağlamak.

Şimdi de seçilen mesajı kullanıcıya geri gönderen koda bakın.

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

Örnek kod, seçilen kodu çevirmek için translateText yöntemini yeniden kullanır o anki konuşma diline cevabını söylersiniz. Ardından, sendResponse yöntemi yeni İleti nesnesini oluşturup kullanıcıya göndermekle ilgilenir.

Özet

Bu eğitimde, projenize dahil etmek istediğiniz Cloud Translate API ile basit bir entegrasyon ve daha fazla kullanıcıya ulaşmak için Business Messages yerel ayar özelliklerinden yararlanın. Şu durumda: Bu eğitimdeki örnek kodu kullanarak bu eğitimdeki örnek kodu entegre edebilir, veya yeni bir şey deneyebilirsiniz! Aşağıdaki önerilerden yararlanabilirsiniz:

  • Hem orijinal ileti içeriğini hem de otomatik olarak çevrilmiş içeriklerdir.
  • Yeni bir dil kullanmaya başlayan kullanıcıya, desteklenen dillerin tam bir menüsünü sunun yardımcı olur.
  • Gelişmiş Translation API özelliklerinden yararlanın terimler sözlüğü gibi kullanabilirsiniz.

Çeviri API'leriyle entegrasyon sayesinde, yüksek kaliteli makine öğrenimi daha fazla kullanıcıyla en rahat dilinde iletişim kurmak için çeviri kullanabilirsiniz. Temsilcinizle daha verimli ve verimli görüşmeler yaparak müşteri memnuniyeti ve görevin tamamlanmasıdır.