Google ile Oturum Açma ile hesap bağlama

Asistan için Google ile Oturum Açma, en basit ve en kolay kullanıcı deneyimini sağlar kullanıcılara ve geliştiricilere, hem hesap bağlama hem de hesap oluşturma için kullanılabilmektedir. İşleminiz Bir görüşme sırasında kullanıcınızın Google profiline erişim isteyebilir (kullanıcının adı, e-posta adresi ve profil resmi dahil)

Profil bilgileri, kişiselleştirilmiş kullanıcı deneyimi oluşturmak için kullanılabilir. bulunur. Başka platformlarda uygulamalarınız varsa ve bu platformlar Google ile Oturum Açma'yı kullanıyorsa mevcut bir kullanıcının hesabını bulup bağlayabilir, yeni bir hesap oluşturabilir, ve kullanıcıyla doğrudan bir iletişim kanalı kurmaktır.

Google ile Oturum Açma özelliğini kullanarak hesap bağlama işlemi gerçekleştirmek için kullanıcıdan izin vermesini istersiniz Google profiline erişmek istiyor. Daha sonra bu bilgileri kullanarak Örneğin, e-posta adresi kullanabilirsiniz.

Google ile Oturum Açma hesap bağlama özelliğini uygulayın

Google ile Oturum Açma hesabı bağlantısını hesabınıza eklemek için aşağıdaki bölümlerde yer alan adımları uygulayın: İşlem.

Projeyi yapılandırma

Projenizi, Google ile Oturum Açma hesabı bağlamayı kullanacak şekilde yapılandırmak için şu adımları izleyin:

  1. Actions Console'u açın ve bir proje seçin.
  2. Geliştir sekmesini tıklayıp Hesap bağlama'yı seçin.
  3. Hesap bağlama'nın yanındaki anahtarı etkinleştirin.
  4. Hesap oluşturma bölümünde Evet'i seçin.
  5. Bağlantı türü bölümünde Google ile Oturum Açma'yı seçin.

  6. Müşteri Bilgileri'ni açın ve Google tarafından İşlemlerinize verilen İstemci Kimliği değerini not edin.

  7. Kaydet'i tıklayın.

Ses kullanıcı arayüzünü kimlik doğrulama akışı için tasarlayın

ziyaret edin.

Kullanıcının doğrulanıp doğrulanmadığını kontrol edin ve hesap bağlama akışını başlatın

  1. Actions Console'da Actions Builder projenizi açın.
  2. İşleminizde hesap bağlamaya başlamak için yeni bir sahne oluşturun:
    1. Sahneler'i tıklayın.
    2. Yeni bir sahne eklemek için add (+) simgesini tıklayın.
  3. Yeni oluşturulan sahnede ekle simgesini tıklayın. Koşullar'ın simgesi.
  4. Görüşmeyle ilişkilendirilmiş kullanıcının bir kullanıcı olup olmadığını kontrol eden bir koşul ekleyin. doğrulanmış bir kullanıcı olabilir. Kontrol başarısız olursa İşleminiz hesap bağlama gerçekleştiremez konuşabilmelidir ve önemli bilgilere erişim veya hesap bağlama gerektirmeyen işlevlerden yararlanın.
    1. Koşul altındaki Enter new expression alanına aşağıdaki mantığı girin: user.verificationStatus != "VERIFIED"
    2. Geçiş bölümünde hesap bağlama veya yalnızca konuklara yönelik işlevin giriş noktası olan bir sahne oluşturun.

  1. Koşullar için ekle simgesini tıklayın.
  2. Kullanıcı aşağıdaki işlemleri gerçekleştirmemişse hesap bağlama akışını tetiklemek için bir koşul ekleyin: ilişkilendirilmiş bir kimliktir.
    1. Koşul altındaki Enter new expression alanına aşağıdaki mantığı girin: user.verificationStatus == "VERIFIED"
    2. Transition bölümünde Hesap Bağlama sistem sahnesini seçin.
    3. Kaydet'i tıklayın.

Kaydettikten sonra <SceneName>_AccountLinking adlı yeni hesap bağlama sistem sahnesi var projenize eklenir.

Hesap bağlama sahnesini özelleştirin

  1. Sahneler bölümünde, hesap bağlama sistem sahnesini seçin.
  2. İstem gönder'i tıklayın ve kullanıcıya açıklamak için kısa bir cümle ekleyin İşlemin neden kimliğine erişmesi gerektiği (örneğin, "Tercihlerinizi kaydetmek için").
  3. Kaydet'i tıklayın.

  1. Koşullar bölümünde, Kullanıcı, hesap bağlama işlemini başarıyla tamamlarsa'yı tıklayın.
  2. Kullanıcı, hesabını bağlamayı kabul ederse akışın nasıl devam etmesi gerektiğini yapılandırın. Örneğin, gerekli herhangi bir özel iş mantığını işlemek için webhook'u çağırın. ve başlangıçtaki sahneye geri dönüştürülebilir.
  3. Kaydet'i tıklayın.

  1. Koşullar bölümünde, Kullanıcı hesap bağlama işlemini iptal eder veya kapatırsa'yı tıklayın.
  2. Kullanıcı hesabını bağlamayı kabul etmezse akışın nasıl devam edeceğini hesap. Örneğin, bir onay mesajı gönderin ve sahnelere yönlendirin. Bu reklamlar, hesap bağlama gerektirmeyen işlevler sunar.
  3. Kaydet'i tıklayın.

  1. Koşullar bölümünde, Sistem veya ağ hatası oluşursa'yı tıklayın.
  2. Hesap bağlama akışı yapılamıyorsa akışın nasıl devam edeceğini yapılandırın tamamlandı. Örneğin, bir onay mesajı gönderin ve sahnelere yönlendirin. Bu reklamlar, hesap bağlama gerektirmeyen işlevler sunar.
  3. Kaydet'i tıklayın.

Arka ucunuzdaki profil bilgilerine erişin

Kullanıcı, Google profiline erişmek için işleminizi yetkilendirdikten sonra, sonraki her adımda kullanıcının Google profil bilgilerini içeren bir Google kimliği jetonu talebinize ekleyebilirsiniz.

Kullanıcının profil bilgilerine erişmek için önce jetonu doğrulamanız ve kodunu çözmeniz gerekir şunu yapabilirsiniz:

  1. Kodu çözmek için dilinize ait bir JWT kod çözme kitaplığı kullanın jeton ve Google'ın genel anahtarlarını kullanın (JWK'da PEM biçimini) kullanarak jetonun imzasını doğrulayın.
  2. Jetonu verenin (kodu çözülen jetondaki iss alanı) https://accounts.google.com olduğunu doğrulayın ve kitlenin (kodu çözülmüş jetondaki aud alanı) değeri Google tarafından Eylemlerinize verilen ve projenize atanan istemci kimliği seçeneğini belirleyin.

Aşağıda kodu çözülmüş bir jeton örneği verilmiştir:

{
  "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 için Actions on Google Fulfillment Library'yi kullanıyorsanız sizin için jetonun doğrulanması ve kodunun çözülmesiyle ilgilenir ve aşağıdaki kod snippet'lerinde gösterildiği gibi profil içeriği.

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

Veri erişimi isteklerini işleme

Veri erişimi isteğini işlemek için kullanıcının Google kimliği ile onaylandığını doğrulamanız yeterlidir jeton veritabanınızda zaten mevcut. Aşağıdaki kod snippet'i, Bir kullanıcıya ait siparişlerin zaten bir Firestore veritabanında olup olmadığını kontrol etme örneği:

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