İzinler

Kullanıcıdan kişisel verilerini istemek için işleminizde izinleri kullanabilirsiniz. yalnızca talebin yerine getirilmesi amacıyla kullanılabilir. Örneğin, bir yemek siparişi İşlemi kullanıcının konumuyla ilgili bilgi istemek için bir cihazın konum iznini kullanabilir. konum.

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

Mevcut izinler

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

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

İzinleri ayarlayın

İşleminizin izinlerini ayarlamak için alanına yeni bir alan türü eklersiniz: sahne. Ardından, istemek istediğiniz veri izni için alanı yapılandırırsınız.

İzin zaman aralığı türü ekleyin

İşleminize actions.type.Permission alan türü.

Bu zaman aralığı türünü yapılandırmak için aşağıdaki adımları izleyin:

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

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

  7. Sonucu bir oturuma yazmak için Özel alan değeri geri yazma özelliğini etkinleştirin parametresinden sonra bir değer girin.

Zaman aralığını yapılandırın

Artık bir bağlam dizesi ve bu kullanıcıya verilecek izinlerin listesini sağlayabilirsiniz. alanı yapılandırın. Bağlam dizesi, bir şeyi bilgi talep eder ve bu bilgiler üzerinde işlem yaptıklarında İşleminize izin vermek istedi.

Bağlam dizesini ve izinleri Alanı yapılandır bölümünden yapılandırabilirsiniz. bölümüne ekleyin:

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, I tek ihtiyacınız Google'dan mevcut konumunuzu almaktır. Bu sizin için uygun mu?"

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

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

İzin sonucu al

Aşağıdaki bölümlerde izin durumunun nasıl kontrol edileceği ve İzin vermesi durumunda kullanıcının bilgileri.

İzin durumunu kontrol edin

Kullanıcı izin verdiğinde, ortaya çıkan durum oturuma yazılır. parametresi için güvenli bir konum olmalıdır.

İzin durumunu, Bir sahnenin durumunda session.params.<slot_name>.permissionStatus.

İzin alanının durumunu kontrol etmek için aşağıdaki adımları uygulayın:

  1. Actions Console'a gidin ve Üst menüde Geliştir'i tıklayın.
  2. Sahneler bölümünde, izin aralığı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 koşul.
  4. İzin durumunu kontrol etmek için aşağıdaki koşulu girin ( &lt;slot_name&gt;, aralık):

    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 koşul.

  6. Kullanıcının bilgilerini paylaşmayı kabul etmişse:

    scene.slots.status == "FINAL"
    

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

  8. Kullanıcının hâlihazırda ve tekrar sorulması gerekmiyorsa:

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

Kullanıcı bilgilerini okuma

Kullanıcı izin verirse kullanıcı bilgileri emin olun.

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

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ı.

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

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

İstemlerde izni kullan

İzni statik istemlerde de referans alabilirsiniz. Ö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 ş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.