Google Translate की मदद से, कई भाषाओं में काम करना

Business Messages' की स्थानीय और Google Translate की सुविधा वाली अनुवाद सुविधा की मदद से, अपने एजेंट की पहुंच को बढ़ाया जा सकता है. इसके लिए, आपको उपयोगकर्ताओं की पसंदीदा भाषा में बात करनी होगी. यह ट्यूटोरियल आपको Business Messages वेबहुक के साथ, Google Translate के कॉन्सेप्ट के सर्टिफ़िकेट के बारे में बताता है.

आपको इनकी ज़रूरत होगी

शुरू करने के लिए, आपको नीचे दी गई कुछ चीज़ों की ज़रूरत होगी:

कोड पाएं

यह ट्यूटोरियल आपको वेबहुक कोड का एक नमूना देगा, जो Google Translate के साथ काम करता है. कोड पाने के लिए, 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 के लिए पहले से इंस्टॉल किए गए नोड पैकेज की सुविधा के साथ आता है. अगर आप नोड पैकेज को इंस्टॉल करने या अनुवाद एपीआई को किसी दूसरी प्रोग्रामिंग भाषा में इंस्टॉल करने का तरीका जानना चाहते हैं, तो Cloud Translate API दस्तावेज़ देखें.

Translate API का इस्तेमाल करने के लिए, आपको लाइब्रेरी इंपोर्ट करनी होगी और Translate एपीआई क्लाइंट बनाना होगा. 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 वैरिएबल में इसे ट्रैक किया जाता है.

आने वाली भाषा का पता लगाना

सैंपल कोड यह पता लगाता है कि इनकमिंग भाषा बदल गई है या नहीं. अगर ऐसा होता है, तो उपयोगकर्ता को वह भाषा चुनने का संकेत देता है जिसे वे बातचीत में इस्तेमाल करना चाहते हैं. इस सुविधा को अपने मोबाइल डिवाइस पर, अंग्रेज़ी के अलावा किसी दूसरी भाषा में एजेंट को लिखें. अगर आपको कोई दूसरी भाषा नहीं आती, तो और कोट!होला" (वह 's स्पैनिश है "Hello"!) टाइप करके देखें.

एजेंट, उपयोगकर्ता से भाषा बदलने के बारे में पूछने वाला संकेत देता है. इस प्रॉम्प्ट में ऐसे सुझाए गए जवाब शामिल होते हैं जिन पर क्लिक करके, उपयोगकर्ता उस भाषा पर स्विच कर सकते हैं.

सबसे पहले, भाषा की पहचान करने की सुविधा पर एक नज़र डालें.

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

यह तरीका, अनुवाद करने वाले क्लाइंट पर पता लगाने के तरीके का इस्तेमाल करता है. अनुवाद करने वाला एपीआई, कॉन्फ़िडेंस के अलग-अलग लेवल के साथ कई भाषाओं की पहचान कर सकता है. ऐसा इसलिए भी है, क्योंकि यह एक से ज़्यादा इनपुट के साथ काम करता है. इस तरीके से, कई नतीजे मिलते हैं. इस नमूने में पहला नतीजा होता है, जो सबसे ज़्यादा भरोसेमंद होता है.

समाधान की गई स्थान-भाषा का इस्तेमाल करना

कभी-कभी Translate API, भरोसे के साथ मैसेज की भाषा नहीं तय कर सकता. उदाहरण के लिए, अगर आपकी बिल्ली आपके कीबोर्ड पर चलती है और किसी छोटी सी स्ट्रिंग को इनपुट करती है, तो Translate API उस भाषा का पता लगाने की कोशिश करता है. हालांकि, हो सकता है कि पहचानी गई भाषा गलत हो. आखिरकार, Google Translate बिल्ली वाली भाषाओं का इस्तेमाल नहीं करता! Translate API, translate.detect's के नतीजों में लो कॉन्फ़िडेंस वैल्यू सेट करके यह बताता है.

ऐसी स्थिति में, सैंपल कोड को Business Messages में हल की गई स्थान-भाषा में सेट कर दिया जाता है. यह Business Messages API की #39; भाषा के हिसाब से, सबसे बेहतर अनुमान होता है. समाधान की गई स्थान-भाषा 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,
    },
  };
}

सुझाया गया जवाब, उसकी भाषा में भाषा का नाम दिखाता है. उदाहरण के लिए, स्पैनिश और "Español." किसी भाषा के बारे में दो अंकों वाले भाषा कोड से जानकारी पाने के लिए, आप Node.js के लिए ISO-639-1 लाइब्रेरी का इस्तेमाल कर सकते हैं.

पोस्टबैक डेटा देखें, जो उपयोगकर्ता के इस सुझाव पर क्लिक करने पर सर्वर को भेजा जाता है. पोस्टबैक डेटा, सर्वर को जवाब देने का तरीका बताता है और सुझाव के बारे में संदर्भ देता है.

sendResponse मैथड जवाब में इन सुझाव ऑब्जेक्ट को अटैच करती है:

let messageObject = {
    …
    suggestions: suggestedReplies,
  };

बातचीत की भाषा बदलना

अब अपने मोबाइल डिवाइस पर वापस जाएं और पहले से दिए गए निर्देश में किसी नई भाषा के विकल्प पर क्लिक करके देखें. उदाहरण के लिए, अगर आपने टाइप किया है "Hola,"क्लिक करके देखें "Español" सुझाए गए जवाबों में.

एजेंट नई भाषा में जवाब देता है. हम बाद के चरणों में आउटगोइंग प्रतिक्रिया का अनुवाद करने का तरीका बताएंगे. अभी के लिए, उस कोड पर नज़र डालें जो आपके सुझाए गए जवाब पर क्लिक करता है और उसे प्रोसेस करता है.

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

अगर अनुरोध में किसी सुझाव का जवाब दिया गया है, तो सर्वर को पोस्टबैक डेटा का इस्तेमाल करके यह तय करना होगा कि क्या करना है. इस आसान मामले में, सर्वर में सिर्फ़ एक तरह का पोस्टबैक डेटा इस्तेमाल किया जा सकता है, SWITCH_LANGUAGE_POSTBACK जो यह बताता है कि बातचीत का कोड, तुरंत ही भाषा कोड में बदल जाना चाहिए. इस भाषा कोड को पार्स करने के बाद, सर्वर उपयोगकर्ता को यह बताने के लिए एक मैसेज भेजता है कि भाषा बदल गई है.

इनबाउंड संदेश का अनुवाद

भाषा को बदलने के बाद, अब एजेंट को आपके मोबाइल डिवाइस पर भी उसी भाषा में अनुरोध भेजा जा सकता है. नई भाषा में "help" शब्द भेजकर देखें. अगर आपने भाषा बदलकर स्पैनिश कर दी है, तो "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);
      });
  });
}

अगर स्रोत भाषा टारगेट भाषा के जैसी है, तो कुछ करने की ज़रूरत नहीं है. ऐसा न होने पर, सर्वर Translate 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" की एक हो सकती है. ज़्यादा सटीक सिस्टम, सही जवाब चुनने के दूसरे तरीकों पर भी निर्भर कर सकते हैं, जैसे कि एमएल स्कोरिंग या स्कोरिंग का एल्गोरिदम. Business Messages सुविधा का इस्तेमाल करके, बेहतर तरीके से जवाब देने की सुविधा यह है कि Dialogflow के साथ इंटिग्रेट किया जा सकता है.

अब उस कोड पर नज़र डालें जो चुने गए मैसेज को उपयोगकर्ता को वापस भेजता है.

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

सैंपल कोड, translateText तरीके का इस्तेमाल करके, मौजूदा बातचीत की भाषा में चुने गए रिस्पॉन्स का अनुवाद करता है. इसके बाद, sendResponse तरीके का इस्तेमाल करके, नया मैसेज ऑब्जेक्ट बनाया जाता है और उसे उपयोगकर्ता को भेजा जाता है.

खास जानकारी

इस ट्यूटोरियल में, आपने सीखा है कि Cloud Translate API के साथ आसान इंटिग्रेशन कैसे बनाया जाता है. साथ ही, ज़्यादा उपयोगकर्ताओं तक पहुंचने के लिए, Business Messages की स्थान-भाषा की सुविधाओं का इस्तेमाल कैसे किया जाता है. अगर आप चाहें, तो इस ट्यूटोरियल में मौजूद सैंपल कोड का इस्तेमाल करके, इंटिग्रेशन की शुरुआत की जा सकती है. इसके अलावा, आपके पास कुछ नया आज़माने का विकल्प भी है! यहां कुछ आइडिया दिए गए हैं:

  • ऐसे दो भाषाओं वाले मैसेज भेजें जिनमें मूल मैसेज और अपने-आप अनुवाद किया गया कॉन्टेंट, दोनों हों.
  • उपयोगकर्ता के साथ बातचीत शुरू करते समय, उसे सभी भाषाओं का मेन्यू दिखाएं.
  • अपने कारोबार के लिए खास तौर पर बनाए गए शब्दों का भरोसेमंद तरीके से अनुवाद करने के लिए, अनुवाद करने के लिए बेहतर एपीआई सुविधाओं का इस्तेमाल करें.

अनुवाद करने वाले एपीआई का इस्तेमाल करके, आप अच्छी क्वालिटी वाली मशीन से अनुवाद का इस्तेमाल कर सकते हैं. इससे आप उन उपयोगकर्ताओं से आसानी से बातचीत कर सकते हैं जिनकी भाषाओं में अनुवाद करना है. आपके एजेंट की मदद से, बेहतर तरीके से और बेहतर तरीके से बातचीत की जा सकती है. साथ ही, इससे ग्राहक की संतुष्टि और टास्क को पूरा करने में मदद मिल सकती है.