Google 번역으로 여러 언어 지원

Business Messages의 언어와 Google 번역의 지능형 자동 번역 기능을 사용하여 번역함으로써 에이전트의 도달 범위를 넓힐 수 있으며, 사용자의 기본 언어입니다. 이 튜토리얼에서는 개념 증명을 통해 Google 번역과 Business Messages 웹훅을 통합했습니다.

필요한 항목

시작하려면 다음과 같은 몇 가지 사항을 준비해야 합니다.

코드 가져오기

이 가이드에서는 Google Cloud 콘솔과 통합되는 샘플 웹훅 코드를 번역을 탭합니다. 코드를 가져오려면 GitHub에서 저장소를 클론합니다.

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

클론된 디렉터리로 이동하여 리소스 디렉터리에 서비스 계정 키를 배치합니다.

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

팁: 서비스 키를 설정하거나 다운로드하는 데 도움이 필요한 경우 서비스 계정 관리를 위한 Google Cloud 가이드

이 작업이 완료되면 코드를 배포할 수 있습니다.

gcloud app deploy

휴대기기를 사용하여 상담사에게 메시지를 보냅니다. 다음을 보내 보세요. 어떻게 되는지 확인해 보세요.

Translate API 설정

샘플 코드는 Translate API용 Node 패키지와 함께 이미 제공됩니다. 설치해야 합니다. Node 패키지를 설치하는 방법에 관심이 있거나 다른 프로그래밍 언어로 Translate API를 설치하려면 Cloud Translate API 문서

Translate API를 사용하려면 라이브러리를 가져오고 번역을 만들어야 합니다. API 클라이언트입니다 routes/index.js 파일을 엽니다. 관련 행은 다음과 같습니다.

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

이제부터 Translate 객체에서 Translate API 메서드에 액세스할 수 있습니다.

파일 상단 근처에 생성된 변수를 살펴봅니다.

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

샘플 코드는 서버 언어를 상수로 저장합니다. 수정되었습니다. 하지만 대화의 현재 언어가 변경될 수 있으므로 대화가 추적됩니다. currentLanguage 변수에 추가하세요.

수신 언어 감지

샘플 코드는 수신 언어가 변경되었는지 여부를 감지하고, 변경되었다면 사용자에게 대화에서 사용할 언어를 선택하라는 메시지가 표시됩니다. 상담사에게 메시지를 입력하여 휴대기기에서 이 기능을 사용해 보세요. 사용할 수 있습니다. 다른 언어를 모르는 경우 입력해 보세요. '홀라' 스페인어로 '안녕하세요'를 뜻합니다.

상담사는 사용자가 전환할지 묻는 프롬프트로 응답합니다. 있습니다. 프롬프트에는 사용자가 클릭할 수 있는 추천 답장이 포함됩니다. 해당 언어로 전환합니다.

먼저 언어 감지 기능을 살펴보겠습니다.

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

이 방법은 detect 메서드를 사용합니다. 번역 클라이언트입니다. Translate API가 여러 언어를 감지할 수 있기 때문에 다양한 신뢰도를 가질 수 있는 능력으로 입력)에 사용할 경우 이 메서드는 결과의 배열을 반환합니다. 이 샘플은 첫 번째 이 결과는 신뢰도가 가장 높은 결과입니다.

확인된 언어 사용 중

Translate API가 번역 API가 높은 단어로 된 메시지 언어를 확신합니다. 예를 들어 고양이가 키보드를 가로질러 지나가서 Translate API는 여전히 언어를 감지하려고 시도하지만 감지된 언어가 잘못되었을 수 있습니다. (Google 번역에서 는 아직 고양이 언어를 지원하지 않습니다.) Translate API는 이를 다음과 같이 나타냅니다. translate.detect의 결과에서 낮은 신뢰도 값을 설정합니다.

이 시나리오에서 샘플 코드는 Business Messages 확인 언어, 이는 Business Messages API가 확인할 수 있습니다. 확인된 언어는 BCP-47 형식이므로 해당 Node.js 패키지를 로케일에서 언어 코드를 파싱합니다.

에이전트에 의미없는 긴 문자열을 입력하여 이 동작을 테스트할 수 있습니다. 포함 대부분의 경우 언어를 변경하라는 메시지가 표시되지 않습니다( 확인된 언어가 현재 언어와 다름). 상담원은 요청을 이해하지 못합니다

언어를 변경하라는 메시지 표시

언어가 변경되었음을 감지한 후 에이전트는 언어를 변경합니다.

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

코드는 프롬프트를 생성하고 현재 언어로 번역합니다 (자세한 내용은 )를 입력한 다음 추천 답장 사용자는 다음 중 하나로 대화를 원할 수 있습니다. 언어:

  • 감지된 수신 언어입니다.
  • 현재 대화 언어입니다.
  • 서버의 기본 제공 언어입니다.

이 세 언어가 겹칠 수 있기 때문입니다 (예: 현재 사용 중인 언어가 언어가 이미 서버 언어인 경우) 서버는 설정된 객체를 사용하여 중복되지 않습니다. 그런 다음 각 언어에 대한 추천 답장을 만듭니다.

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

추천 답장에 언어 이름이 모국어로 표시됩니다. 예를 들어 스페인어가 '스페인어'로 표시됩니다. 언어에서 언어에 대한 정보를 얻기 위해 두 자리 언어 코드라면 Node.js용 ISO-639-1 라이브러리를 사용할 수 있습니다.

사용자가 광고를 클릭할 때 서버에 전송되는 포스트백 데이터를 확인하세요. 볼 수 있습니다. 포스트백 데이터는 응답 방법을 서버에 알리고 컨텍스트입니다.

sendResponse 메서드는 추천 객체 답장에 추가:

let messageObject = {
    …
    suggestions: suggestedReplies,
  };

대화 언어 변경

이제 휴대기기로 돌아가 프롬프트에 액세스했습니다. 예를 들어 'Hola'라고 입력했다면 '스페인어'를 클릭해 보세요 인치 표시됩니다.

에이전트가 새 언어로 응답합니다. 이 강의에서는 만들 수 있습니다. 지금은 인코더-디코더 아키텍처를 표시됩니다.

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

요청에 추천에 대한 응답이 포함된 경우 서버에서 포스트백을 사용합니다. 데이터를 사용하여 해야 할 일을 결정합니다. 이 간단한 경우에는 서버에서 1개의 파일만 지원합니다. 포스트백 데이터의 유형인 SWITCH_LANGUAGE_POSTBACK은 대화는 바로 다음 언어로 된 언어로 변경되어야 합니다. 있습니다. 이 언어 코드를 파싱한 후 서버는 사용자에게 언어가 변경되었음을 알립니다.

수신 메일 번역

이제 언어가 변경되면 해당 언어로 상담사에게 요청을 보낼 수 있습니다. 표시됩니다. '도움'이라고 말해 보세요. 새로운 있습니다. 언어를 스페인어로 변경한 경우 'ayuda'를 입력합니다. 그런 다음 메시지가 표시됩니다.

서버는 도움 요청을 이해하고 있습니다. 하드 코딩된 샘플 응답을 보려면 이 중 하나를 시도합니다.

샘플 코드는 translateText 메서드를 사용하여 들어오는 데이터와 보낼 수 있습니다. 지금 바로 확인해 보세요.

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

출발어가 도착어와 같은 경우에는 있습니다. 그렇지 않으면 서버가 번역 방법 번역 API 클라이언트입니다. 감지 메서드와 마찬가지로 번역 메서드는 여러 개의 입력을 취합니다. 서버는 하나의 입력만 제공하므로 Translate API의 첫 번째 결과입니다.

다음에서 수신 메시지에 응답하는 콜백 메서드의 섹션을 살펴보세요. 현재 언어:

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

서버는 translateText의 출력을 사용하여 응답 메시지를 선택합니다. 다음 섹션에서는 응답 메시지를 선택하는 프로세스에 대해 자세히 알아보고 매우 유용합니다

발신 메일 번역

서버는 수신 메일을 모국어로 번역하고 나면 선택, 번역, 사용자 요청에 대한 적절한 응답을 보낼 수 있습니다. 샘플 코드는 키워드를 응답에 매핑하는 매우 간단한 구성표를 사용합니다. 있음 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.";
}

이 스키마는 서버에서 영어만 지원합니다. 즉, 서버는 모든 수신 및 발신 메일을 번역합니다. 보다 정교한 시스템은 여러 언어를 지원하고 다른 언어로 된 요청에 기본적으로 응답해야 합니다. 예를 들어 에이전트가 스페인어를 지원하는 경우 'ayuda' 표시됩니다. 보다 정교한 시스템은 다른 시스템의 ML 또는 점수 산정과 같이 적절한 응답을 선택하는 방법론 사용할 수 있습니다. Business Messages로 더 지능적인 응답을 만드는 한 가지 방법 Dialogflow와 통합하는 것입니다

이제 선택한 메시지를 사용자에게 다시 전송하는 코드를 살펴보겠습니다.

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

샘플 코드는 translateText 메서드를 재사용하여 선택한 응답을 현재 대화 언어로 변환합니다. 그러면 sendResponse 메서드는 새 Message 객체를 만들어 사용자에게 전송합니다.

요약

이 튜토리얼에서는 Cloud Translate API와의 간단한 통합 Business Messages 언어 기능을 활용하여 더 많은 사용자에게 도달할 수 있습니다. 만약 이 튜토리얼의 샘플 코드를 직접 통합하거나 새로운 기능을 사용해 볼 수 있습니다. 다음은 참고할 수 있는 팁입니다.

  • 원본 메일 내용과 자동으로 번역된 콘텐츠를 확인할 수 있습니다
  • 사용자가 앱을 시작할 때 지원되는 언어 전체 메뉴를 보여주세요. 있습니다.
  • 고급 Translate API 기능 활용 비즈니스에 관련된 단어를 안정적으로 번역할 수 있습니다.

Translate API와 통합하면 고품질 기계를 활용할 수 있습니다. 가장 편안한 언어로 더 많은 사용자와 소통합니다. 에이전트는 보다 생산적이고 효율적인 대화를 통해 고객 만족도와 작업 완료를 측정할 수 있습니다