Izin

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

Saat Anda menambahkan izin ke Action, Asisten akan menyajikan antarmuka yang konsisten untuk meminta izin dari pengguna untuk menyediakan 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 sementara perangkat pengguna (kode pos dan kota).

Siapkan izin

Untuk menyiapkan izin bagi Action Anda, tambahkan jenis slot baru ke latar depan. Kemudian, Anda mengonfigurasi slot untuk izin data yang ingin diminta.

Tambahkan jenis slot izin

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

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

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

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

  7. Aktifkan Writeback nilai slot kustom untuk menulis hasil ke sesi .

Konfigurasi slot

Anda kini dapat menyediakan string konteks dan daftar izin yang akan diberikan melakukan konfigurasi slot. String konteks adalah alasan mengapa Anda meminta informasi dari pengguna, dan ditampilkan kepada pengguna ketika mereka diminta untuk memberikan izin ke Action Anda.

Anda dapat mengonfigurasi string konteks dan izin di Konfigurasi slot seperti yang ditunjukkan dalam 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 dalam bentuk "$context_string, saya akan hanya perlu mendapatkan lokasi Anda saat ini dari Google. Apakah Anda setuju?"

Anda bisa mendapatkan informasi pengguna berikut menggunakan kode izin:

Izin Deskripsi
DEVICE_PRECISE_LOCATION Lokasi presisi perangkat (koordinat dan alamat)
DEVICE_COARSE_LOCATION Lokasi perkiraan perangkat (kode pos dan kota)

Mendapatkan hasil izin

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

Memeriksa status izin

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

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

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

  1. Buka Konsol Actions dan klik Kembangkan di menu atas.
  2. Di bagian Scenes, klik scene yang berisi slot izin.
  3. Di bagian Kondisi adegan, klik + untuk menambahkan yang baru .
  4. Masukkan kondisi berikut untuk memeriksa status izin (dengan &lt;slot_name&gt; adalah nama parameter sesi yang Anda konfigurasi di (slot):

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

  5. Di bagian Kondisi adegan, klik + untuk menambahkan yang baru .

  6. Masukkan kondisi berikut untuk menangani kasus jika pengguna tidak menyetujui untuk membagikan informasi mereka:

    scene.slots.status == "FINAL"
    

  7. Di bagian Kondisi adegan, klik + untuk menambahkan yang baru .

  8. Masukkan kondisi berikut untuk menangani kasus jika pengguna sudah sudah diberi izin, dan tidak perlu ditanya lagi:

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

Membaca informasi pengguna

Jika pengguna memberikan izin, informasi pengguna diberikan di terhadap permintaan selanjutnya.

Dalam cuplikan di bawah, Anda dapat melihat informasi lokasi perangkat yang ada dalam permintaan ke webhook di bawah 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 Anda, seperti yang ditunjukkan dalam cuplikan berikut:

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

Gunakan izin dalam perintah

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

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