Izin

Anda dapat menggunakan izin di Action untuk meminta data pribadi dari pengguna untuk tujuan menyelesaikan permintaan. Misalnya, Action pengiriman makanan dapat menggunakan izin akses lokasi perangkat untuk meminta informasi tentang lokasi pengguna.

Saat Anda menambahkan izin ke Action, Asisten akan menyajikan antarmuka standar dan konsisten untuk meminta izin dari pengguna guna memberikan informasi ke Action Anda.

Izin yang tersedia

Izin berikut dapat diminta oleh Action Anda:

  • DEVICE_PRECISE_LOCATION: Meminta lokasi akurat perangkat pengguna (koordinat dan alamat).
  • DEVICE_COARSE_LOCATION: Meminta lokasi umum perangkat pengguna (kode pos dan kota).

Siapkan izin

Guna menyiapkan izin untuk Action, Anda menambahkan jenis slot baru ke adegan. Kemudian, Anda mengonfigurasi slot untuk izin data yang ingin diminta.

Tambahkan jenis slot izin

Anda dapat memberi Action kemampuan untuk mendapatkan informasi pengguna dengan jenis slot actions.type.Permission.

Untuk mengonfigurasi jenis slot ini, ikuti langkah-langkah berikut:

  1. Buka Konsol Actions, lalu pilih atau buat project.
  2. Klik Develop di menu atas.
  3. Di bagian Scene, klik scene yang ingin Anda tambahi alur izin.
  4. Di bagian Slot fill pada scene, klik + untuk menambahkan slot baru.
  5. Di dropdown Pilih jenis, pilih jenis slot actions.type.Permission.

  6. Di kolom Masukkan nama slot, beri nama slot.

  7. Aktifkan Penulisan kembali nilai slot kustom untuk menulis hasilnya ke parameter sesi.

Konfigurasikan slot

Sekarang Anda dapat memberikan string konteks dan daftar izin yang akan diberikan untuk mengonfigurasi slot. String konteks adalah alasan Anda meminta informasi dari pengguna, dan ditampilkan kepada pengguna saat mereka diminta untuk memberikan izin ke Action Anda.

Anda dapat mengonfigurasi string konteks dan izin di bagian Mengonfigurasi slot, seperti yang ditunjukkan pada screenshot berikut:

Cuplikan kode berikut menunjukkan contoh konfigurasi slot:

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

Perintah yang ditampilkan kepada pengguna akan berupa "$context_string, saya hanya perlu mendapatkan lokasi Anda saat ini dari Google. Apa boleh?"

Anda bisa mendapatkan informasi pengguna berikut menggunakan kode izin:

Izin Deskripsi
DEVICE_PRECISE_LOCATION Lokasi perangkat yang akurat (koordinat dan alamat)
DEVICE_COARSE_LOCATION Lokasi perangkat kasar (kode pos dan kota)

Mendapatkan hasil izin

Bagian berikut menjelaskan cara memeriksa status izin dan membaca informasi pengguna jika mereka memberikan izin.

Periksa status izin

Ketika pengguna memberikan izin, status yang dihasilkan akan ditulis ke parameter sesi yang terkait dengan slot.

Anda dapat memeriksa status izin dengan memeriksa nilai session.params.<slot_name>.permissionStatus dalam kondisi scene.

Untuk memeriksa status slot izin, ikuti langkah-langkah berikut:

  1. Buka Actions console, lalu klik Develop di menu atas.
  2. Pada Scene, klik scene yang berisi slot izin.
  3. Di bagian Kondisi pada scene, klik + untuk menambahkan kondisi baru.
  4. Masukkan kondisi berikut untuk memeriksa status izin (dengan <slot_name> adalah nama parameter sesi yang Anda konfigurasikan di slot):

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

  5. Di bagian Kondisi pada scene, klik + untuk menambahkan kondisi baru.

  6. Masukkan kondisi berikut untuk menangani kasus saat pengguna tidak mengizinkan membagikan informasi mereka:

    scene.slots.status == "FINAL"
    

  7. Di bagian Kondisi pada scene, klik + untuk menambahkan kondisi baru.

  8. Masukkan kondisi berikut untuk menangani kasus ketika pengguna telah memberikan izin, dan tidak perlu diminta lagi:

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

Membaca informasi pengguna

Jika pengguna memberikan izin, informasi pengguna akan diberikan dalam permintaan berikutnya.

Dalam cuplikan di bawah, Anda dapat melihat informasi lokasi perangkat yang terdapat dalam permintaan ke webhook di device.currentLocation:

Meminta JSON
  {
      "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": ""
          }
        }
      }
    }
    

Untuk mengetahui informasi selengkapnya tentang skema jenis lokasi, lihat referensi Location.

Anda dapat mengakses informasi yang terdapat dalam permintaan dari webhook, seperti yang ditunjukkan pada cuplikan berikut:

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

Menggunakan izin dalam perintah

Anda juga dapat merujuk izin tersebut dalam perintah statis. Misalnya, untuk lokasi perangkat, Anda dapat menggunakan $device.currentLocation.coordinates.* dan $device.currentLocation.postalAddress.*. Cuplikan kode berikut menunjukkan cara mereferensikan kota pengguna dalam prompt:

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