Google সাইন-ইন এর সাথে অ্যাকাউন্ট লিঙ্ক করা

অ্যাসিস্ট্যান্টের জন্য Google সাইন-ইন ব্যবহারকারী এবং ডেভেলপারদের অ্যাকাউন্ট লিঙ্ক এবং অ্যাকাউন্ট তৈরির জন্য সবচেয়ে সহজ এবং সহজ ব্যবহারকারীর অভিজ্ঞতা প্রদান করে। কথোপকথনের সময় আপনার অ্যাকশন ব্যবহারকারীর নাম, ইমেল ঠিকানা এবং প্রোফাইল ছবি সহ আপনার ব্যবহারকারীর Google প্রোফাইলে অ্যাক্সেসের অনুরোধ করতে পারে।

প্রোফাইল তথ্য আপনার অ্যাকশনে একটি ব্যক্তিগতকৃত ব্যবহারকারীর অভিজ্ঞতা তৈরি করতে ব্যবহার করা যেতে পারে। আপনার যদি অন্যান্য প্ল্যাটফর্মে অ্যাপ থাকে এবং তারা Google সাইন-ইন ব্যবহার করে, তাহলে আপনি একটি বিদ্যমান ব্যবহারকারীর অ্যাকাউন্ট খুঁজে পেতে এবং লিঙ্ক করতে পারেন, একটি নতুন অ্যাকাউন্ট তৈরি করতে পারেন এবং ব্যবহারকারীর সাথে যোগাযোগের একটি সরাসরি চ্যানেল স্থাপন করতে পারেন৷

Google সাইন-ইন-এর সাথে অ্যাকাউন্ট লিঙ্ক করার জন্য, আপনি ব্যবহারকারীকে তাদের Google প্রোফাইল অ্যাক্সেস করার জন্য সম্মতি দিতে বলুন। তারপরে আপনি আপনার সিস্টেমে ব্যবহারকারীকে সনাক্ত করতে তাদের প্রোফাইলের তথ্য ব্যবহার করুন, উদাহরণস্বরূপ তাদের ইমেল ঠিকানা।

Google সাইন-ইন অ্যাকাউন্ট লিঙ্কিং বাস্তবায়ন করুন

আপনার অ্যাকশনে Google সাইন-ইন অ্যাকাউন্ট লিঙ্ক করার জন্য নিম্নলিখিত বিভাগগুলির ধাপগুলি অনুসরণ করুন৷

প্রকল্পটি কনফিগার করুন

Google সাইন-ইন অ্যাকাউন্ট লিঙ্কিং ব্যবহার করার জন্য আপনার প্রকল্প কনফিগার করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যাকশন কনসোল খুলুন এবং একটি প্রকল্প নির্বাচন করুন।
  2. বিকাশ ট্যাবে ক্লিক করুন এবং অ্যাকাউন্ট লিঙ্কিং নির্বাচন করুন।
  3. অ্যাকাউন্ট লিঙ্ক করার পাশের সুইচটি সক্ষম করুন।
  4. অ্যাকাউন্ট তৈরি বিভাগে, হ্যাঁ নির্বাচন করুন।
  5. লিঙ্কিং টাইপে , Google সাইন ইন নির্বাচন করুন।

  6. ক্লায়েন্টের তথ্য খুলুন এবং আপনার অ্যাকশনগুলিতে Google দ্বারা জারি করা ক্লায়েন্ট আইডির মান নোট করুন।

  7. সংরক্ষণ করুন ক্লিক করুন.

প্রমাণীকরণ প্রবাহের জন্য ভয়েস ইউজার ইন্টারফেস ডিজাইন করুন

ব্যবহারকারী যাচাই করা হয়েছে কিনা তা পরীক্ষা করুন এবং অ্যাকাউন্ট লিঙ্কিং প্রবাহ শুরু করুন

  1. অ্যাকশন কনসোলে আপনার অ্যাকশন বিল্ডার প্রকল্পটি খুলুন।
  2. আপনার অ্যাকশনে অ্যাকাউন্ট লিঙ্ক করা শুরু করতে একটি নতুন দৃশ্য তৈরি করুন:
    1. দৃশ্যে ক্লিক করুন।
    2. একটি নতুন দৃশ্য যোগ করতে যোগ (+) আইকনে ক্লিক করুন।
  3. সদ্য নির্মিত দৃশ্যে, শর্তগুলির জন্য যোগ আইকনে ক্লিক করুন।
  4. কথোপকথনের সাথে যুক্ত ব্যবহারকারী একজন যাচাইকৃত ব্যবহারকারী কিনা তা পরীক্ষা করে এমন একটি শর্ত যোগ করুন। চেক ব্যর্থ হলে, কথোপকথনের সময় আপনার অ্যাকশন অ্যাকাউন্ট লিঙ্কিং সম্পাদন করতে পারে না, এবং অ্যাকাউন্ট লিঙ্ক করার প্রয়োজন নেই এমন কার্যকারিতাগুলিতে অ্যাক্সেস প্রদানে ফিরে আসা উচিত।
    1. শর্তের অধীনে Enter new expression ক্ষেত্রটিতে, নিম্নলিখিত যুক্তিটি লিখুন: user.verificationStatus != "VERIFIED"
    2. ট্রানজিশনের অধীনে, এমন একটি দৃশ্য নির্বাচন করুন যার জন্য অ্যাকাউন্ট লিঙ্ক করার প্রয়োজন নেই বা এমন একটি দৃশ্য যা গেস্ট-অনলি কার্যকারিতার প্রবেশ বিন্দু।

  1. শর্তের জন্য অ্যাড আইকনে ক্লিক করুন।
  2. ব্যবহারকারীর কোনো সংশ্লিষ্ট পরিচয় না থাকলে একটি অ্যাকাউন্ট লিঙ্কিং ফ্লো ট্রিগার করার জন্য একটি শর্ত যোগ করুন।
    1. শর্তের অধীনে Enter new expression ক্ষেত্রটিতে, নিম্নলিখিত যুক্তিটি লিখুন:: user.verificationStatus == "VERIFIED"
    2. ট্রানজিশনের অধীনে, অ্যাকাউন্ট লিঙ্কিং সিস্টেম দৃশ্যটি নির্বাচন করুন।
    3. সংরক্ষণ করুন ক্লিক করুন.

সংরক্ষণ করার পরে, আপনার প্রকল্পে <SceneName>_AccountLinking নামে একটি নতুন অ্যাকাউন্ট লিঙ্কিং সিস্টেম দৃশ্য যোগ করা হয়েছে।

অ্যাকাউন্ট লিঙ্কিং দৃশ্য কাস্টমাইজ করুন

  1. দৃশ্যের অধীনে, অ্যাকাউন্ট লিঙ্কিং সিস্টেম দৃশ্য নির্বাচন করুন।
  2. সেন্ড প্রম্পটে ক্লিক করুন এবং ব্যবহারকারীকে বর্ণনা করতে একটি ছোট বাক্য যোগ করুন কেন অ্যাকশন তাদের পরিচয় অ্যাক্সেস করতে হবে (উদাহরণস্বরূপ "আপনার পছন্দগুলি সংরক্ষণ করতে")।
  3. সংরক্ষণ করুন ক্লিক করুন.

  1. শর্তের অধীনে, ব্যবহারকারী সফলভাবে অ্যাকাউন্ট লিঙ্কিং সম্পন্ন করলে ক্লিক করুন।
  2. ব্যবহারকারী যদি তাদের অ্যাকাউন্ট লিঙ্ক করতে সম্মত হন তবে কীভাবে প্রবাহটি চলবে তা কনফিগার করুন। উদাহরণস্বরূপ, যেকোন কাস্টম ব্যবসায়িক যুক্তি প্রক্রিয়াকরণের জন্য ওয়েবহুককে কল করুন এবং মূল দৃশ্যে ফিরে যেতে।
  3. সংরক্ষণ করুন ক্লিক করুন.

  1. শর্তের অধীনে, ব্যবহারকারী অ্যাকাউন্ট লিঙ্কিং বাতিল বা খারিজ করলে ক্লিক করুন।
  2. ব্যবহারকারী যদি তাদের অ্যাকাউন্ট লিঙ্ক করতে রাজি না হয় তবে কীভাবে প্রবাহটি চলবে তা কনফিগার করুন। উদাহরণস্বরূপ, একটি স্বীকৃতিমূলক বার্তা পাঠান এবং এমন দৃশ্যগুলিতে পুনঃনির্দেশ করুন যা কার্যকারিতা প্রদান করে যার জন্য অ্যাকাউন্ট লিঙ্ক করার প্রয়োজন নেই৷
  3. সংরক্ষণ করুন ক্লিক করুন.

  1. শর্তের অধীনে, সিস্টেম বা নেটওয়ার্ক ত্রুটি দেখা দিলে ক্লিক করুন।
  2. সিস্টেম বা নেটওয়ার্ক ত্রুটির কারণে অ্যাকাউন্ট লিঙ্কিং ফ্লো সম্পূর্ণ না হলে কীভাবে প্রবাহটি চলবে তা কনফিগার করুন। উদাহরণস্বরূপ, একটি স্বীকৃতিমূলক বার্তা পাঠান এবং এমন দৃশ্যগুলিতে পুনঃনির্দেশ করুন যা কার্যকারিতা প্রদান করে যার জন্য অ্যাকাউন্ট লিঙ্ক করার প্রয়োজন নেই৷
  3. সংরক্ষণ করুন ক্লিক করুন.

আপনার ব্যাকএন্ডে প্রোফাইল তথ্য অ্যাক্সেস করুন

ব্যবহারকারী তাদের Google প্রোফাইল অ্যাক্সেস করার জন্য আপনার ক্রিয়াকলাপের অনুমোদন দেওয়ার পরে, আপনি একটি Google ID টোকেন পাবেন যাতে আপনার প্রতিটি পরবর্তী অনুরোধে ব্যবহারকারীর Google প্রোফাইল তথ্য থাকে৷

ব্যবহারকারীর প্রোফাইল তথ্য অ্যাক্সেস করতে, আপনাকে প্রথমে নিম্নলিখিতগুলি করে টোকেনটি যাচাই এবং ডিকোড করতে হবে:

  1. টোকেন ডিকোড করতে আপনার ভাষার জন্য একটি JWT-ডিকোডিং লাইব্রেরি ব্যবহার করুন এবং টোকেনের স্বাক্ষর যাচাই করতে Google-এর পাবলিক কী ( JWK বা PEM ফর্ম্যাটে উপলব্ধ) ব্যবহার করুন।
  2. যাচাই করুন যে টোকেনের ইস্যুকারী (ডিকোড করা টোকেনে iss ক্ষেত্র) হল https://accounts.google.com এবং দর্শক (ডিকোড করা টোকেনে aud ক্ষেত্র) হল আপনার অ্যাকশনগুলিতে Google দ্বারা জারি করা ক্লায়েন্ট আইডির মান, যা হল অ্যাকশন কনসোলে আপনার প্রজেক্টে বরাদ্দ করা হয়েছে।

নিম্নলিখিত একটি ডিকোডেড টোকেনের একটি উদাহরণ:

{
  "sub": 1234567890,        // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The token's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Client ID assigned to your Actions project
  "iat": 233366400,         // Unix timestamp of the token's creation time
  "exp": 233370000,         // Unix timestamp of the token's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "locale": "en_US"
}

আপনি যদি Node.js-এর জন্য অ্যাকশন অন গুগল ফিলফিলমেন্ট লাইব্রেরি ব্যবহার করেন, তবে এটি আপনার জন্য টোকেন যাচাইকরণ এবং ডিকোড করার যত্ন নেয় এবং আপনাকে প্রোফাইল সামগ্রীতে অ্যাক্সেস দেয়, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে।

...
const app = conversation({
  // REPLACE THE PLACEHOLDER WITH THE CLIENT_ID OF YOUR ACTIONS PROJECT
  clientId: CLIENT_ID,
});
...
// Invoked on successful completion of account linking flow, check if we need to
// create a Firebase user.
app.handle('linkAccount', async conv => {
  let payload = conv.headers.authorization;
  if (payload) {
  // Get UID for Firebase auth user using the email of the user
    const email = payload.email;
    if (!conv.user.params.uid && email) {
      try {
        conv.user.params.uid = (await auth.getUserByEmail(email)).uid;
      } catch (e) {
        if (e.code !== 'auth/user-not-found') {
          throw e;
        }
        // If the user is not found, create a new Firebase auth user
        // using the email obtained from Google Assistant
        conv.user.params.uid = (await auth.createUser({email})).uid;
      }
    }
  }
});

ডেটা অ্যাক্সেসের অনুরোধগুলি পরিচালনা করুন

ডেটা অ্যাক্সেসের অনুরোধ পরিচালনা করতে, শুধুমাত্র যাচাই করুন যে Google আইডি টোকেন দ্বারা দাবি করা ব্যবহারকারী আপনার ডাটাবেসে ইতিমধ্যেই উপস্থিত রয়েছে৷ নিম্নলিখিত কোডের স্নিপেটটি একটি উদাহরণ দেখায় যে কীভাবে একজন ব্যবহারকারীর জন্য অর্ডারগুলি ইতিমধ্যেই একটি Firestore ডাটাবেসে বিদ্যমান আছে কিনা তা পরীক্ষা করতে হবে:

...
app.handle('Place_Order', async conv => {
  const order = conv.session.params.order;
  const userDoc = dbs.user.doc(conv.user.params.uid);
  const orderHistory = userDoc.collection("orderHistory");
  if (orderHistory) {
    // Order history exists, so the user already placed an order.
    // Update counter for order type.
    await orderHistory.doc(order).update({ count: admin.firestore.FieldValue.increment(1)});
  } else {
    // First order they place
    await orderHistory.doc(order).set({ option: order, count: 1});
    options.forEach(opt => {
      if (opt != order) {
        orderHistory.doc(opt).set({ option: opt, count: 0});
      }
    });
  }
  return conv.add(`Your ${order} has been placed. ` +
      'Thanks for using Boba Bonanza, see you soon!');
});