İzinler

Bir isteği tamamlamak amacıyla kullanıcıdan kişisel veri istemek için İşleminizde izinleri kullanabilirsiniz. Örneğin, bir yemek siparişi işlemi kullanıcının konumuyla ilgili bilgi istemek için bir cihaz konum izni kullanabilir.

İşleminize izin eklediğinizde Asistan, işleminize bilgi sağlamak üzere kullanıcıdan izin istemek için standart, tutarlı bir arayüz sunar.

Mevcut izinler

İşleminiz aşağıdaki izinleri isteyebilir:

  • DEVICE_PRECISE_LOCATION: Kullanıcının cihaz konumunu (koordinatlar ve açık adres) tam olarak ister.
  • DEVICE_COARSE_LOCATION: Kullanıcının yaklaşık cihaz konumunu (posta kodu ve şehir) ister.

İzinleri ayarla

İşleminizle ilgili izinleri ayarlamak için sahneye yeni bir alan türü eklersiniz. Ardından, almak istediğiniz veri izni için slotu yapılandırırsınız.

İzin slotu türü ekleyin

actions.type.Permission slot türünü kullanarak İşleminize kullanıcı bilgileri elde etme izni verebilirsiniz.

Bu slot türünü yapılandırmak için aşağıdaki adımları uygulayın:

  1. Actions Console'a gidin ve bir proje seçin veya oluşturun.
  2. Üst menüde Geliştir'i tıklayın.
  3. Sahneler'in altında, izin akışını eklemek istediğiniz sahneyi tıklayın.
  4. Sahnenin Slot doldurma bölümünde yeni bir alan eklemek için + simgesini tıklayın.
  5. Tür seçin açılır menüsünde actions.type.Permission alan türünü seçin.

  6. Alan adını girin alanında, alana bir ad verin.

  7. Sonucu bir oturum parametresine yazmak için Özel alan değerini geri yazma özelliğini etkinleştirin.

Yuvayı yapılandır

Artık alanı yapılandırmak için verilecek bir bağlam dizesi ve izinlerin listesini sağlayabilirsiniz. Bağlam dizesi, kullanıcıdan niye bilgi istediğinizin gerekçesidir ve kullanıcılar İşleminize izin vermeleri istendiğinde gösterilir.

Aşağıdaki ekran görüntüsünde gösterildiği gibi Alanı yapılandır bölümünde bağlam dizesini ve izinleri yapılandırabilirsiniz:

Aşağıdaki kod snippet'inde örnek bir alan yapılandırması gösterilmektedir:

{
  "@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValueSpec",
  "context": "Context string",
  "permissions": ["DEVICE_PRECISE_LOCATION"]
}

Kullanıcılara gösterilen istem "$context_string. Ancak Google'dan mevcut konumunuzu almam gerekecek. Senin için uygun mu?"

İzin kodlarını kullanarak aşağıdaki kullanıcı bilgilerini edinebilirsiniz:

İzin Açıklama
DEVICE_PRECISE_LOCATION Tam cihaz konumu (koordinatlar ve açık adres)
DEVICE_COARSE_LOCATION Cihazın yaklaşık konumu (posta kodu ve şehir)

İzin sonucunu al

Aşağıdaki bölümlerde, izin durumunun nasıl kontrol edileceği ve izin verilmesi durumunda kullanıcının bilgilerini nasıl okuyacağınız açıklanmaktadır.

İzin durumunu kontrol etme

Kullanıcı izin verdiğinde, elde edilen durum alanla ilişkilendirilen oturum parametresine yazılır.

Bir sahnenin koşulundaki session.params.<slot_name>.permissionStatus değerini kontrol ederek izin durumunu kontrol edebilirsiniz.

İzin slotunun durumunu kontrol etmek için şu adımları uygulayın:

  1. Actions Console'a gidin ve üst menüde Geliştir'i tıklayın.
  2. Scenes (Sahneler) bölümünde, izin yuvasını içeren sahneyi tıklayın.
  3. Sahnenin Koşul bölümünde, yeni bir koşul eklemek için + simgesini tıklayın.
  4. İzin durumunu kontrol etmek için aşağıdaki koşulu girin (burada <slot_name>, yuvanızda yapılandırdığınız oturum parametresinin adıdır):

    scene.slots.status == "FINAL" && (session.params.<slot_name>.permissionStatus == "PERMISSION_GRANTED" || session.params.<slot_name>.permissionStatus == "ALREADY_GRANTED")
    

  5. Sahnenin Koşul bölümünde, yeni bir koşul eklemek için + simgesini tıklayın.

  6. Kullanıcının bilgilerinin paylaşılmasına izin vermediği destek kaydını işlemek için aşağıdaki koşulu girin:

    scene.slots.status == "FINAL"
    

  7. Sahnenin Koşul bölümünde, yeni bir koşul eklemek için + simgesini tıklayın.

  8. Kullanıcının zaten izin verdiği ve tekrar sorulmasının gerekmediği durumu işlemek için aşağıdaki koşulu girin:

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

Kullanıcı bilgilerini okuma

Kullanıcı izin verirse sonraki isteklerde kullanıcı bilgileri sağlanır.

Aşağıdaki snippet'te device.currentLocation altındaki webhook'a yapılan bir istekte bulunan cihaz konum bilgilerini görebilirsiniz:

JSON isteğinde bulun
  {
      "handler": {
        "name": "handler"
      },
      "intent": {
        "name": "",
        "params": {
          "deviceLoc": {
            "original": "",
            "resolved": {
              "@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValue",
              "permissionStatus": "PERMISSION_GRANTED",
              "grantedPermissions": [
                "DEVICE_PRECISE_LOCATION"
              ]
            }
          }
        },
        "query": "Yes"
      },
      "scene": {
        "name": "Scene",
        "slotFillingStatus": "FINAL",
        "slots": {
          "deviceLoc": {
            "mode": "REQUIRED",
            "status": "SLOT_UNSPECIFIED",
            "value": {
              "grantedPermissions": [
                "DEVICE_PRECISE_LOCATION"
              ],
              "@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValue",
              "permissionStatus": "PERMISSION_GRANTED"
            },
            "updated": true
          }
        },
        "next": {
          "name": "actions.scene.END_CONVERSATION"
        }
      },
      "session": {
        "id": "session_id",
        "params": {
          "deviceLoc": {
            "grantedPermissions": [
              "DEVICE_PRECISE_LOCATION"
            ],
            "permissionStatus": "PERMISSION_GRANTED",
            "@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValue"
          }
        },
        "typeOverrides": [],
        "languageCode": ""
      },
      "user": {
        "locale": "en-US",
        "params": {},
        "accountLinkingStatus": "ACCOUNT_LINKING_STATUS_UNSPECIFIED",
        "verificationStatus": "VERIFIED",
        "packageEntitlements": [],
        "permissions": [
          "DEVICE_PRECISE_LOCATION"
        ],
        "lastSeenTime": "2021-02-08T20:43:47Z"
      },
      "home": {
        "params": {}
      },
      "device": {
        "capabilities": [
          "SPEECH",
          "RICH_RESPONSE",
          "LONG_FORM_AUDIO"
        ],
        "currentLocation": {
          "coordinates": {
            "latitude": 37.422,
            "longitude": -122.084
          },
          "postalAddress": {
            "revision": 0,
            "regionCode": "US",
            "languageCode": "en",
            "postalCode": "94043",
            "sortingCode": "",
            "administrativeArea": "California",
            "locality": "Mountain View",
            "sublocality": "",
            "addressLines": ["1600 Amphitheatre Parkway"],
            "recipients": [],
            "organization": ""
          }
        }
      }
    }
    

Konum türünün şeması hakkında daha fazla bilgi için Location referansını inceleyin.

İstekte yer alan bilgilere webhook'unuzdan aşağıdaki snippet'te gösterildiği gibi erişebilirsiniz:

Webhook
  app.handle('handler', (conv) => {
    let location = conv.device.currentLocation;
    conv.add(`Your postal code is ${location.postalCode}`);
  });
    

İstemlerde izni kullanma

Statik istemlerde de bu izne başvurabilirsiniz. Örneğin, cihaz konumu için $device.currentLocation.coordinates.* ve $device.currentLocation.postalAddress.* kullanabilirsiniz. Aşağıdaki kod snippet'i, bir istemde kullanıcının bulunduğu şehrine nasıl referans verileceğini gösterir:

candidates:
  - first_simple:
      variants:
        - speech: >-
            There are no events scheduled tomorrow in the city of $device.currentLocation.postalAddress.locality.