Google অনুবাদের সাথে একাধিক ভাষা সমর্থন করুন

ব্যবসায়িক বার্তার লোকেল এবং Google অনুবাদের বুদ্ধিমান, স্বয়ংক্রিয় অনুবাদের মাধ্যমে, আপনি ব্যবহারকারীদের সাথে তাদের পছন্দের ভাষায় যোগাযোগ করে আপনার এজেন্টের নাগাল প্রসারিত করতে পারেন। এই টিউটোরিয়ালটি আপনাকে একটি বিজনেস মেসেজ ওয়েবহুকের সাথে Google অনুবাদের ধারণার একীকরণের প্রমাণের মাধ্যমে নিয়ে যাবে।

আপনি কি প্রয়োজন হবে

শুরু করার জন্য, আপনাকে নিম্নলিখিত কয়েকটি জিনিস প্রস্তুত করতে হবে:

কোড পান

এই টিউটোরিয়ালটি আপনাকে নমুনা ওয়েবহুক কোডের মাধ্যমে নিয়ে যায় যা Google অনুবাদের সাথে একীভূত হয়। কোড পেতে, 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 ক্লাউড নির্দেশিকা দেখুন৷

একবার এটি হয়ে গেলে, আপনি কোডটি স্থাপন করতে পারেন:

gcloud app deploy

আপনার মোবাইল ডিভাইস ব্যবহার করে, এজেন্টকে কিছু বার্তা পাঠান। বিভিন্ন ভাষায় আপনার বার্তা পাঠানোর চেষ্টা করুন এবং দেখুন কি হয়.

Translate API সেট আপ করুন

নমুনা কোডটি ইতিমধ্যেই ইনস্টল করা Translate API-এর জন্য নোড প্যাকেজের সাথে আসে। আপনি যদি নোড প্যাকেজ ইনস্টল করতে আগ্রহী হন, বা একটি ভিন্ন প্রোগ্রামিং ভাষায় অনুবাদ API কীভাবে ইনস্টল করবেন, ক্লাউড অনুবাদ API ডক্স দেখুন।

অনুবাদ 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();

এখন থেকে, আপনি অনুবাদ বস্তুতে অনুবাদ API পদ্ধতিগুলি অ্যাক্সেস করতে পারবেন।

ফাইলের উপরের দিকে তৈরি ভেরিয়েবলগুলি দেখুন:

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

নমুনা কোড সার্ভার ভাষাকে একটি ধ্রুবক হিসাবে সংরক্ষণ করে কারণ এটি তুলনামূলকভাবে স্থির। যাইহোক, কথোপকথনের বর্তমান ভাষা পরিবর্তিত হতে পারে, তাই এটি বর্তমান ভাষার currentLanguage ট্র্যাক করা হয়।

আগত ভাষা সনাক্তকরণ

নমুনা কোড আগত ভাষা পরিবর্তিত হয়েছে কিনা তা শনাক্ত করে, এবং যদি তাই হয়, ব্যবহারকারীকে কথোপকথনে ব্যবহার করতে চান এমন ভাষা বেছে নিতে অনুরোধ করে। ইংরেজি ছাড়াও একটি ভাষায় এজেন্টকে একটি বার্তা টাইপ করে আপনার মোবাইল ডিভাইসে এই বৈশিষ্ট্যটি ব্যবহার করে দেখুন। আপনি যদি অন্য কোনো ভাষা না জানেন, তাহলে "Hola" টাইপ করার চেষ্টা করুন (এটি "হ্যালো" এর জন্য স্প্যানিশ!)

ব্যবহারকারী ভাষা পরিবর্তন করতে চান কিনা তা জিজ্ঞাসা করে এজেন্ট একটি প্রম্পটের সাথে প্রতিক্রিয়া জানায়। প্রম্পটে প্রস্তাবিত উত্তরগুলি অন্তর্ভুক্ত রয়েছে যা ব্যবহারকারী সেই ভাষায় স্যুইচ করতে ক্লিক করতে পারেন।

আসুন প্রথমে ভাষা সনাক্তকরণ বৈশিষ্ট্যটি দেখে নেওয়া যাক।

/**
 * 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 বিভিন্ন স্তরের আত্মবিশ্বাসের সাথে একাধিক ভাষা সনাক্ত করতে পারে (এবং এটি একাধিক ইনপুট সমর্থন করার কারণেও), এই পদ্ধতিটি ফলাফলের একটি অ্যারে প্রদান করে। নমুনা প্রথম ফলাফল নেয়, যা সর্বোচ্চ আত্মবিশ্বাসের সাথে ফলাফল।

সমাধান করা লোকেল ব্যবহার করে

কখনও কখনও অনুবাদ API উচ্চ আত্মবিশ্বাসের সাথে বার্তা ভাষা নির্ধারণ করতে পারে না। উদাহরণস্বরূপ, যদি আপনার বিড়াল আপনার কীবোর্ড জুড়ে চলে এবং একটি ননসেন্স স্ট্রিং ইনপুট করে, অনুবাদ API এখনও ভাষা সনাক্ত করার চেষ্টা করে, তবে সনাক্ত করা ভাষাটি সম্ভবত ভুল। (সর্বশেষে, Google অনুবাদ বিড়াল ভাষা সমর্থন করে না–এখনও!) অনুবাদ API translate.detect এর ফলাফলে একটি কম আস্থার মান সেট করে এটি নির্দেশ করে।

এই পরিস্থিতিতে, নমুনা কোডটি বিজনেস মেসেজ সলভ করা লোকেলের ভাষায় ফিরে আসে, যা বার্তার প্রসঙ্গের উপর ভিত্তি করে ভাষাতে ব্যবসা বার্তা 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,
    },
  };
}

প্রস্তাবিত উত্তরটি তার নিজের ভাষায় ভাষার নাম দেখায়। উদাহরণস্বরূপ, স্প্যানিশ "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, যা নির্দেশ করে যে কথোপকথনটি অবিলম্বে নিম্নলিখিত ভাষা কোডের ভাষায় পরিবর্তন করা উচিত। এই ভাষা কোড পার্স করার পরে, সার্ভার ব্যবহারকারীকে অবহিত করার জন্য একটি বার্তা পাঠায় যে ভাষা পরিবর্তন হয়েছে।

অন্তর্মুখী বার্তা অনুবাদ

ভাষা এখন পরিবর্তিত হওয়ায়, আপনি আপনার মোবাইল ডিভাইসে সেই ভাষায় এজেন্টকে একটি অনুরোধ পাঠাতে পারেন। নতুন ভাষায় "সহায়তা" শব্দটি পাঠানোর চেষ্টা করুন। আপনি যদি স্প্যানিশ ভাষায় ভাষা পরিবর্তন করেন, তাহলে "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 ক্লায়েন্টে অনুবাদ পদ্ধতি কল করে। সনাক্তকরণ পদ্ধতির মতো, অনুবাদ পদ্ধতি একাধিক ইনপুট নিতে পারে। যেহেতু সার্ভার শুধুমাত্র একটি ইনপুট প্রদান করে, এটি অনুবাদ API থেকে প্রথম ফলাফল নেয়।

কলব্যাক পদ্ধতির বিভাগটি দেখুন যা বর্তমান ভাষায় আগত বার্তাগুলির প্রতিক্রিয়া জানায়:

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

সার্ভার একটি প্রতিক্রিয়া বার্তা চয়ন করতে translateText থেকে আউটপুট ব্যবহার করে। পরবর্তী বিভাগে প্রতিক্রিয়া বার্তা নির্বাচন এবং এটি অনুবাদ করার প্রক্রিয়ার মধ্যে delves.

বহির্গামী বার্তা অনুবাদ

সার্ভার আপনার আগত বার্তাটিকে তার নেটিভ ইংরেজিতে অনুবাদ করার পরে, এটি ব্যবহারকারীর অনুরোধের জন্য একটি উপযুক্ত প্রতিক্রিয়া চয়ন করতে, অনুবাদ করতে এবং পাঠাতে হবে। নমুনা কোডটি একটি খুব সাধারণ স্কিম ব্যবহার করে যা প্রতিক্রিয়াগুলিতে কীওয়ার্ড ম্যাপ করে। 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.";
}

এই স্কিমটি সার্ভারে শুধুমাত্র ইংরেজি সমর্থন করে, যার অর্থ সার্ভারকে অবশ্যই সমস্ত অন্তর্মুখী এবং বহির্গামী বার্তাগুলি অনুবাদ করতে হবে। একটি আরও পরিশীলিত সিস্টেম একাধিক ভাষা সমর্থন করতে পারে এবং অন্যান্য ভাষায় অনুরোধের স্থানীয়ভাবে প্রতিক্রিয়া জানাতে পারে। উদাহরণস্বরূপ, যদি আপনার এজেন্ট স্প্যানিশ সমর্থন করে, তাহলে প্রতিক্রিয়া মানচিত্রে ইতিমধ্যেই "আয়ুদা" এর জন্য একটি কী থাকতে পারে। ML বা স্কোরিং অ্যালগরিদমের মতো উপযুক্ত প্রতিক্রিয়া বেছে নেওয়ার জন্য আরও পরিশীলিত সিস্টেমগুলি অন্যান্য পদ্ধতির উপরও নির্ভর করতে পারে। ব্যবসার বার্তাগুলির সাথে আরও বুদ্ধিমান প্রতিক্রিয়া তৈরি করার একটি উপায় হল ডায়ালগফ্লো-এর সাথে একীভূত করা৷

এখন সেই কোডটি দেখুন যা নির্বাচিত বার্তাটি ব্যবহারকারীকে ফেরত পাঠায়।

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

বর্তমান কথোপকথনের ভাষায় নির্বাচিত প্রতিক্রিয়া অনুবাদ করতে নমুনা কোড translateText পাঠ পদ্ধতিটি পুনরায় ব্যবহার করে। sendResponse পদ্ধতিটি তখন নতুন বার্তা অবজেক্ট তৈরি করে ব্যবহারকারীর কাছে পাঠানোর যত্ন নেয়।

সারসংক্ষেপ

এই টিউটোরিয়ালে, আপনি শিখেছেন কিভাবে ক্লাউড ট্রান্সলেট API-এর সাথে একটি সহজ ইন্টিগ্রেশন তৈরি করতে হয় এবং আরও ব্যবহারকারীদের কাছে পৌঁছানোর জন্য ব্যবসা বার্তা লোকেল বৈশিষ্ট্যগুলি ব্যবহার করতে হয়। আপনি যদি চান, আপনি এই টিউটোরিয়ালের নমুনা কোডটি আপনার নিজের ইন্টিগ্রেশনের জন্য একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করতে পারেন, অথবা আপনি নতুন কিছু চেষ্টা করতে পারেন! এখানে কিছু ধারনা:

  • দ্বিভাষিক বার্তা পাঠান যাতে মূল বার্তা সামগ্রী এবং স্বয়ংক্রিয়ভাবে অনূদিত সামগ্রী উভয়ই থাকে৷
  • ব্যবহারকারী যখন একটি কথোপকথন শুরু করেন তখন সমর্থিত ভাষার একটি সম্পূর্ণ মেনু সহ উপস্থাপন করুন৷
  • আপনার ব্যবসার জন্য নির্দিষ্ট শব্দগুলিকে নির্ভরযোগ্যভাবে অনুবাদ করতে শব্দকোষের মতো উন্নত অনুবাদ API বৈশিষ্ট্যগুলি ব্যবহার করুন৷

ট্রান্সলেট API-এর সাথে একীভূত করে, আপনি আরও ব্যবহারকারীদের সাথে তাদের সবচেয়ে আরামদায়ক ভাষায় যোগাযোগ করতে উচ্চ-মানের মেশিন অনুবাদের সুবিধা নিতে পারেন। আপনার এজেন্ট আরও উত্পাদনশীল এবং দক্ষ কথোপকথন করতে পারে, গ্রাহকের সন্তুষ্টি বাড়াতে এবং কাজ সমাপ্ত করতে পারে।