'Google साइन इन' के साथ खाता जोड़ना

Assistant के लिए 'Google साइन-इन' का इस्तेमाल करने पर, सबसे आसान और आसान उपयोगकर्ता अनुभव मिलता है उपयोगकर्ताओं और डेवलपर के लिए, खाता लिंक करने और खाता बनाने के लिए. आपकी कार्रवाई बातचीत के दौरान, आपके उपयोगकर्ता की Google प्रोफ़ाइल का ऐक्सेस मांग सकता है. जिसमें उपयोगकर्ता का नाम, ईमेल पता, और प्रोफ़ाइल फ़ोटो शामिल हो.

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

'Google साइन-इन' के साथ खाता लिंक करने के लिए, उपयोगकर्ता से सहमति देने के लिए कहा जाता है Google प्रोफ़ाइल को ऐक्सेस करने के लिए. फिर आप उनकी प्रोफ़ाइल में मौजूद जानकारी का उपयोग उदाहरण के लिए उनका ईमेल पता, ताकि आपके सिस्टम में उपयोगकर्ता की पहचान की जा सके.

'Google साइन-इन' खाता लिंक करना लागू करना

अपने ऐक्शन.

प्रोजेक्ट कॉन्फ़िगर करें

'Google साइन-इन' खाता लिंक करने की सुविधा का इस्तेमाल करने के लिए अपना प्रोजेक्ट कॉन्फ़िगर करने के लिए, यह तरीका अपनाएं:

  1. Actions Console खोलें और कोई प्रोजेक्ट चुनें.
  2. डेवलप करें टैब पर क्लिक करें और खाता लिंक करना चुनें.
  3. खाता लिंक करना के बगल में मौजूद स्विच को चालू करें.
  4. खाता बनाएं सेक्शन में, हां चुनें.
  5. लिंक करने का टाइप सेक्शन में, Google साइन इन को चुनें.

  6. क्लाइंट की जानकारी खोलें और आपकी कार्रवाइयों के लिए Google की ओर से जारी किए गए Client ID की वैल्यू का ध्यान रखें.

  7. सेव करें पर क्लिक करें.

पुष्टि करने के फ़्लो के लिए, वॉइस यूज़र इंटरफ़ेस डिज़ाइन करना

देखें कि उपयोगकर्ता की पुष्टि हुई है या नहीं. इसके बाद, खाता लिंक करने की प्रोसेस शुरू करें

  1. कार्रवाइयां कंसोल में अपना Actions Builder प्रोजेक्ट खोलें.
  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. कॉन्फ़िगर करें कि अगर उपयोगकर्ता, Google Analytics 4 प्रॉपर्टी को लिंक करने की सहमति नहीं देता है, तो फ़्लो को कैसे आगे बढ़ना चाहिए जोड़ें. उदाहरण के लिए, अपनी तारीफ़ करने वाला मैसेज भेजें और सीन पर रीडायरेक्ट करें जिनका इस्तेमाल करने पर खाते को लिंक करने की ज़रूरत नहीं होती.
  3. सेव करें पर क्लिक करें.

  1. शर्तें सेक्शन में जाकर, अगर सिस्टम या नेटवर्क की गड़बड़ी होती है पर क्लिक करें.
  2. यह कॉन्फ़िगर करें कि अगर खाता लिंक करने का फ़्लो, सिस्टम या नेटवर्क की गड़बड़ियों के चलते पूरा हुआ. उदाहरण के लिए, अपनी तारीफ़ करने वाला मैसेज भेजें और सीन पर रीडायरेक्ट करें जिनका इस्तेमाल करने पर खाते को लिंक करने की ज़रूरत नहीं होती.
  3. सेव करें पर क्लिक करें.

अपने बैकएंड में प्रोफ़ाइल की जानकारी ऐक्सेस करना

उपयोगकर्ता जब आपकी कार्रवाई को अपनी Google प्रोफ़ाइल ऐक्सेस करने की अनुमति देगा, तब आपको Google आईडी टोकन, जो हर एक चरण में उपयोगकर्ता की 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 के लिए Actions on Google फ़ुलफ़िलमेंट लाइब्रेरी का इस्तेमाल किया है, यह आपके लिए टोकन की पुष्टि करता है और उसे डिकोड करता है. साथ ही, आपको प्रोफ़ाइल की सामग्री, जैसा कि नीचे दिए गए कोड स्निपेट में दिखाया गया है.

...
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!');
});