Görüşme İşlemleri 13 Haziran 2023'te kullanımdan kaldırılacaktır. Daha fazla bilgi için Görüşme İşlemlerinin kullanımdan kaldırılması sayfasına göz atın.

Google ile Oturum Açma ile hesap bağlama

Asistan için Google ile Oturum Açma, hesap bağlama ve hesap oluşturma konularında kullanıcılara ve geliştiricilere en basit ve en kolay kullanıcı deneyimini sunar. İşleminiz; bir görüşme sırasında kullanıcının adı, e-posta adresi ve profil resmi de dahil olmak üzere kullanıcınızın Google profiline erişim isteğinde bulunabilir.

Profil bilgileri, İşleminizde kişiselleştirilmiş bir kullanıcı deneyimi oluşturmak için kullanılabilir. Başka platformlarda uygulamalarınız varsa ve Google ile Oturum Açma özelliğini kullanıyorsanız mevcut bir kullanıcının hesabını bulup bu hesaba bağlanabilir, yeni bir hesap oluşturabilir ve kullanıcıyla doğrudan iletişim kuran bir kanal oluşturabilirsiniz.

Google ile Oturum Açma özelliğini kullanarak hesap bağlantısı oluşturmak için kullanıcıdan Google profiline erişmesine izin vermesini istersiniz. Ardından, sisteminizdeki kullanıcıyı tanımlamak için kullanıcının profilindeki bilgileri (örneğin, e-posta adresini) kullanırsınız.

Google ile Oturum Açma hesabı bağlama özelliğini kullanın

İşleminize Google Oturum Açma hesabı bağlantısı eklemek için aşağıdaki bölümlerde yer alan adımları izleyin.

Projeyi yapılandırma

Projenizi Google ile Oturum Açma hesabı bağlantısını kullanacak şekilde yapılandırmak için aşağıdaki adımları uygulayın:

  1. Actions Console'u açıp bir proje seçin.
  2. Geliştirme sekmesini tıklayın ve Hesap bağlama'yı seçin.
  3. Hesap bağlama seçeneğinin 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. İstemci Bilgileri bölümünü açın ve Google tarafından İşlemlerinize verilen İstemci Kimliği değerini not edin.

  7. Kaydet'i tıklayın.

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

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 ekle (+) simgesini tıklayın.
  3. Yeni oluşturulan sahnede, Koşullar için ekle simgesini tıklayın.
  4. Görüşmeyle ilişkilendirilen kullanıcının doğrulanmış kullanıcı olup olmadığını kontrol eden bir koşul ekleyin. Kontrol başarısız olursa İşleminiz, görüşme sırasında hesap bağlama işlemi gerçekleştiremez ve hesap bağlantısı gerektirmeyen işlevlere erişim izni vermelidir.
    1. Koşul'un 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 gerektirmeyen bir sahneyi veya yalnızca konuklara sunulan işlevin giriş noktası olan bir sahne seçin.

  1. Koşullar için ekle simgesini tıklayın.
  2. Kullanıcının ilişkili bir kimliği yoksa hesap bağlama akışını tetiklemek için bir koşul ekleyin.
    1. Koşul'un altındaki Enter new expression alanına aşağıdaki mantığı girin: user.verificationStatus == "VERIFIED"
    2. Geçiş'in altında Hesap Bağlama sistem sahnesini seçin.
    3. Kaydet'i tıklayın.

Kaydetme işleminden sonra projenize <SceneName>_AccountLinking adlı yeni bir hesap bağlama sistemi sahnesi eklenir.

Hesap bağlama sahnesini özelleştirin

  1. Sahneler'in altında hesap bağlama sistemi sahnesini seçin.
  2. İstem gönder'i tıklayın ve kullanıcıya İşlem'in kimliğine neden erişmesi gerektiğini açıklayan kısa bir cümle ekleyin (ö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 tüm özel iş mantığını işlemek ve kaynak sahneye geri dönmek için webhook'u çağırın.
  3. Kaydet'i tıklayın.

  1. Koşullar bölümünde, Kullanıcı, hesap bağlama işlemini iptal eder veya reddederse'yi tıklayın.
  2. Kullanıcı, hesabını bağlamayı kabul etmezse akışın nasıl ilerleyeceğini yapılandırın. Örneğin, onay mesajı gönderin ve hesap bağlama gerektirmeyen işlevler sunan sahnelere yönlendirin.
  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ışı, sistem veya ağ hataları nedeniyle tamamlanamıyorsa akışın nasıl ilerleyeceğini yapılandırın. Örneğin, onay mesajı gönderin ve hesap bağlama gerektirmeyen işlevler sunan sahnelere yönlendirin.
  3. Kaydet'i tıklayın.

Arka ucunuzdaki profil bilgilerine erişme

Kullanıcı, eyleminize Google profiline erişim yetkisi verdikten sonra, işlemin sonraki her isteğinde kullanıcının Google profil bilgilerini içeren bir Google Kimliği jetonu alırsınız.

Kullanıcının profil bilgilerine erişmek için önce aşağıdakileri yaparak jetonu doğrulamanız ve jetonu çözmeniz gerekir:

  1. Jetonun kodunu çözmek için dilinize yönelik bir JWT kod çözme kitaplığı kullanın ve jetonun imzasını doğrulamak için Google'ın ortak anahtarlarını (JWK veya PEM biçiminde kullanılabilir) kullanın.
  2. Jetonu verenin (kod çözülmüş jetondaki iss alanı) https://accounts.google.com olduğunu ve kitlenin (kod çözülmüş jetondaki aud alanı), İşlemler konsolunda projenize atanan Google tarafından Actions'ınıza verilen istemci kimliğinin değeri olduğunu doğrulayın.

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 Sipariş Verme kitaplığını kullanırsanız jetonu sizin için doğrulama ve kod çözme işlemini halleder ve aşağıdaki kod snippet'lerinde gösterildiği gibi profil içeriğine erişmenizi sağlar.

...
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şim isteklerini işleme

Veri erişim isteğini işlemek için, Google Kimliği jetonu tarafından hak talebinde bulunulan kullanıcının veritabanınızda zaten bulunduğunu doğrulamanız yeterlidir. Aşağıdaki kod snippet'inde, bir kullanıcının siparişlerinin Firestore veritabanında zaten mevcut olup olmadığını kontrol etme örneği gösterilmektedir:

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