Obsługa wielu języków w Tłumaczu Google

Dzięki językom w Business Messages i inteligentnym, zautomatyzowanym funkcjom Tłumacza Google możesz zwiększyć zasięg agenta, komunikując się z użytkownikami preferowany przez nich język. W tym samouczku omawiamy model koncepcyjny integracji Tłumacza Google z webhookiem Business Messages.

Czego potrzebujesz

Aby rozpocząć, przygotuj te rzeczy:

Pobierz kod

W tym samouczku omawiamy przykładowy kod webhooka, który integruje się z Google Tłumacz. Aby pobrać kod, skopiuj repozytorium z GitHub:

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

Przejdź do sklonowanego katalogu i umieść klucz konta usługi w katalogu zasobów:

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

WSKAZÓWKA: jeśli potrzebujesz pomocy przy konfigurowaniu lub pobieraniu klucza usługi, zobacz Przewodnik Google Cloud dotyczący zarządzania kontami usługi

Następnie możesz wdrożyć kod:

gcloud app deploy

Wyślij kilka wiadomości do pracownika obsługi klienta na urządzeniu mobilnym. Spróbuj wysłać swoje wiadomości w różnych językach i zobaczyć, co się stanie.

Konfigurowanie interfejsu Translate API

Przykładowy kod jest już dołączony do pakietu węzłów dla interfejsu Translate API Zainstalowano. Jeśli chcesz się dowiedzieć, jak zainstalować pakiet węzłów lub jak zainstalować interfejs Translate API w innym języku programowania, zapoznaj się z Dokumentacja Cloud Translate API

Aby korzystać z interfejsu Translate API, musisz zaimportować bibliotekę i utworzyć pakiet Tłumacza klient API. Otwórz plik routes/index.js. Odpowiednie wiersze:

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

Od teraz możesz korzystać z metod interfejsu Translate API w obiekcie Translate.

Spójrz na zmienne utworzone w górnej części pliku:

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

Przykładowy kod przechowuje język serwera jako stały, ponieważ jest on względnie naprawiony. Bieżący język rozmowy może się jednak zmienić, więc jest śledzona. w zmiennej currentLanguage.

Wykrywam język wiadomości przychodzących

Przykładowy kod wykrywa, czy zmienił się język przychodzący, a jeśli tak, wyświetla użytkownikowi prośbę o wybranie języka, którego chce używać w rozmowie. Wypróbuj tę funkcję na urządzeniu mobilnym, wpisując wiadomość do pracownika obsługi klienta na niż angielski. Jeśli nie znasz innych języków, spróbuj napisać „Hola” (to po hiszpańsku „Cześć”.

Agent wysyła pytanie, czy użytkownik chce przejść na inną wersję języki. Monit zawiera sugerowane odpowiedzi, które użytkownik może kliknąć przełącz się na ten język.

Przyjrzyjmy się najpierw funkcji wykrywania języka.

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

Ta metoda korzysta z metody wykrywania. w kliencie tłumaczenia. Ponieważ interfejs Translate API może wykrywać wiele języków o różnym poziomie pewności (a także dlatego, że obsługuje wiele ), ta metoda zwraca tablicę wyników. W próbce jako pierwszy jest to wynik z największym prawdopodobieństwem.

Używanie rozpoznanego języka

Czasami interfejs Translate API nie może określić języka wiadomości z wysokim poziomem pewność siebie. Na przykład jeśli kot biegnie po klawiaturze i wpisuje bezsensowny ciąg znaków, interfejs Translate API nadal próbuje wykryć język, ale wykryty język jest prawdopodobnie nieprawidłowy. (W końcu Tłumacz Google nie obsługuje jeszcze języków kocich). Informuje o tym interfejs Translate API za pomocą ustawiają niską wartość ufności w wyniku translate.detect.

W tym scenariuszu przykładowy kod wraca do języka Business Messages – język rozpoznany, czyli najlepiej odgadywany język przez interfejs Business Messages API na podstawie w kontekście wiadomości. Jako że ustawiony język jest w formacie BCP-47, możesz odpowiedni pakiet Node.js przeanalizuje kod języka dla danego regionu.

Aby przetestować to zachowanie, wpisz do agenta długi ciąg bezsensownego tekstu. W w większości przypadków nie zobaczysz prośby o zmianę języka (chyba że rozpoznany język jest inny niż bieżący). Pracownik obsługi klienta po prostu mówi: nie zrozumie Twojego żądania.

Wyświetlanie prośby o zmianę języka

Po wykryciu zmiany języka agent wysyła prośbę do zmienić język.

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 tworzy prompt, tłumaczy go na bieżący język (więcej na ten temat w sekcji Tłumaczenie wiadomości wychodzących), a następnie wysyła odpowiedź zawierającą sugerowane odpowiedzi. Użytkownik może chcieć mówić w dowolnym z następujących języków języki:

  • Wykryty język wiadomości przychodzących.
  • Bieżący język rozmowy.
  • Język wbudowanego serwera.

Możliwe, że te 3 języki się pokrywają (np. jeśli bieżący język jest już językiem serwera), serwer używa ustalonego obiektu do usuwania duplikaty. Następnie tworzy sugerowaną odpowiedź dla każdego języka:

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

Sugerowana odpowiedź zawiera nazwę języka w swoim języku. Przykład: Hiszpański jest podawany jako „Español”. Aby uzyskać informacje o języku z jego dwucyfrowy kod języka, użyj biblioteki ISO-639-1 dla środowiska Node.js.

Zwróć uwagę na dane wywołania zwrotnego, które są wysyłane do serwera, gdy użytkownik kliknie tę sugestię. Dane wywołania zwrotnego informują serwer, jak odpowiedzieć, i zapewniają o sugestii.

Metoda sendResponse łączy te atrybuty obiekty sugestii do odpowiedzi:

let messageObject = {
    …
    suggestions: suggestedReplies,
  };

Zmienianie języka rozmowy

Teraz wróć na urządzenie mobilne i spróbuj kliknąć nową opcję języka w z poprzedniego zapytania. Jeśli na przykład wpiszesz „Hola”, kliknij „Español”. cale sugerowane odpowiedzi.

Pracownik obsługi klienta odpowiada w nowym języku. Omówimy, jak tłumaczyć dane wychodzące odpowiedzieć w późniejszym kroku. Spójrzmy na kod, który odbiera i przetwarza sugerowaną odpowiedź, którą kliknąłeś.

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

Jeśli żądanie zawiera odpowiedź na sugestię, serwer używa wywołania zwrotnego i określić, co należy zrobić. W tym prostym przypadku serwer obsługuje tylko jeden typu danych wywołania zwrotnego, SWITCH_LANGUAGE_POSTBACK, który oznacza, że rozmowa powinna zostać zmieniona na język następujący po nim w kodzie. Po przeanalizowaniu kodu języka serwer wysyła komunikat, aby powiadomić że zmienił się język.

Tłumaczenie wiadomości przychodzących

Po zmianie języka możesz wysłać prośbę do pracownika obsługi klienta w na komórce. Wyślij słowo, aby uzyskać „pomoc” w nowym język. Jeśli język został zmieniony na hiszpański, wpisz „ayuda”. i wyślij .

Serwer rozumie Twoją prośbę o pomoc i odpowiada, korzystając z menu . Wypróbuj dowolną z tych opcji, aby zobaczyć przykładową odpowiedź zakodowaną na stałe.

Przykładowy kod wykorzystuje metodę translateText do tłumaczenia zarówno przychodzących, jak i przychodzących wiadomości wychodzące. Rzuć okiem na to teraz:

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

Jeśli język źródłowy jest taki sam jak język docelowy, nie ma potrzeby zmiany robisz. W przeciwnym razie serwer wywołuje metodę metoda tłumaczenia w kliencie Translate API. Podobnie jak w przypadku metody wykrywania, metoda translacji może musisz wprowadzić kilka zmian. Serwer dostarcza tylko jedno dane wejściowe, więc pierwszy wynik z Translate API.

Zajrzyj do sekcji metody wywołania zwrotnego, która odpowiada na wiadomości przychodzące w bieżący język:

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

Serwer korzysta z danych wyjściowych translateText, aby wybrać wiadomość odpowiedzi. W następnej sekcji omówimy proces wyboru odpowiedzi tłumacząc to.

Tłumaczenie wiadomości wychodzących

Gdy serwer przetłumaczy wiadomość przychodzącą na ojczysty język angielski, aby wybrać, przetłumaczyć i wysłać odpowiednią odpowiedź na żądanie użytkownika. Przykładowy kod korzysta z bardzo prostego schematu, który przypisuje słowa kluczowe do odpowiedzi. Mają o metodzie 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.";
}

Ten schemat obsługuje na serwerze tylko język angielski, co oznacza, że serwer musi przetłumacz wszystkie wiadomości przychodzące i wychodzące. Bardziej zaawansowany system może obsługują wiele języków i natywnie odpowiadaj na prośby w innych językach. Na przykład jeśli agent obsługuje język hiszpański, może już mieć klucz „ayuda” na mapie odpowiedzi. Bardziej złożone systemy mogą też polegać na innych metodologie wyboru odpowiedniej odpowiedzi, takie jak systemy uczące się czy punktacja. za pomocą algorytmów. Jednym ze sposobów na tworzenie bardziej inteligentnych odpowiedzi za pomocą Business Messages to integracja z Dialogflow.

Teraz spójrz na kod, który wysyła wybraną wiadomość do użytkownika.

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

Przykładowy kod wykorzystuje metodę translateText do przetłumaczenia wybranej wartości odpowiedź w bieżącym języku rozmowy. Metoda sendResponse polega na utworzeniu nowego obiektu wiadomości i wysłaniu go do użytkownika.

Podsumowanie

W tym samouczku omówiliśmy, jak utworzyć prostą integrację z Cloud Translate API i korzystać z funkcji lokalnych w Business Messages, aby dotrzeć do większej liczby użytkowników. Jeśli możesz użyć przykładowego kodu z tego samouczka jako punktu wyjścia lub spróbować czegoś nowego. Oto kilka pomysłów:

  • Wysyłaj dwujęzyczne wiadomości zawierające zarówno treść oryginalną, jak i treści tłumaczonych automatycznie.
  • Przedstaw użytkownikowi pełne menu obsługiwanych języków, rozmowy.
  • Korzystanie z zaawansowanych funkcji interfejsu Translate API np. glosariusze, które pomogą Ci sprawnie tłumaczyć słowa charakterystyczne dla Twojej firmy.

Dzięki integracji z interfejsami API Translate możesz korzystać z maszyn wysokiej jakości do komunikowania się z większą liczbą użytkowników w wygodnym dla nich języku. Twój agent może prowadzić bardziej produktywne i efektywne rozmowy, zadowolenie klientów i realizację zadań.