Quyền

Bạn có thể sử dụng quyền trong Hành động của mình để yêu cầu người dùng cung cấp dữ liệu cá nhân để hoàn tất yêu cầu. Ví dụ: Hành động giao đồ ăn có thể sử dụng quyền truy cập thông tin vị trí của thiết bị để yêu cầu thông tin về vị trí.

Khi bạn thêm một quyền vào Hành động của mình, Trợ lý sẽ giới thiệu một tiêu chuẩn, để yêu cầu người dùng cấp quyền nhằm cung cấp giao diện nhất quán cho Hành động của bạn.

Các quyền hiện có

Hành động của bạn có thể yêu cầu các quyền sau đây:

  • DEVICE_PRECISE_LOCATION: Yêu cầu thông tin vị trí thiết bị chính xác của người dùng (tọa độ và địa chỉ đường phố).
  • DEVICE_COARSE_LOCATION: Yêu cầu thông tin vị trí thiết bị tương đối của người dùng (mã bưu chính và thành phố).

Thiết lập các quyền

Để thiết lập quyền cho Hành động của mình, bạn thêm một loại vùng mới vào cảnh. Sau đó, bạn định cấu hình ô cho quyền truy cập dữ liệu mà bạn muốn yêu cầu.

Thêm loại vùng cấp quyền

Bạn có thể cấp cho Hành động của mình khả năng lấy thông tin người dùng bằng Loại vị trí actions.type.Permission.

Để định cấu hình loại vị trí này, hãy làm theo các bước sau:

  1. Chuyển đến Bảng điều khiển Actions rồi chọn hoặc tạo một dự án.
  2. Nhấp vào Phát triển trong trình đơn trên cùng.
  3. Trong mục Cảnh, hãy nhấp vào cảnh mà bạn muốn thêm quy trình cấp quyền.
  4. Trong phần Lấp đầy vùng của cảnh, hãy nhấp vào dấu + để thêm một vùng mới.
  5. Trong trình đơn thả xuống Chọn loại, hãy chọn loại vùng actions.type.Permission.

  6. Trong trường Nhập tên vùng, hãy đặt tên cho vùng.

  7. Bật tính năng Ghi lại giá trị vùng tuỳ chỉnh để ghi kết quả vào một phiên .

Định cấu hình vị trí

Giờ đây, bạn có thể cung cấp một chuỗi ngữ cảnh và danh sách các quyền sẽ được cấp cho định cấu hình vị trí. Chuỗi ngữ cảnh là lý do giải thích tại sao bạn yêu cầu thông tin từ người dùng và được hiển thị cho người dùng khi họ đã yêu cầu cấp quyền cho Hành động của bạn.

Bạn có thể định cấu hình chuỗi ngữ cảnh và các quyền trong mục Định cấu hình vùng như trong ảnh chụp màn hình sau đây:

Đoạn mã sau đây cho thấy một cấu hình vị trí mẫu:

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

Lời nhắc mà người dùng nhìn thấy sẽ có dạng "$context_string, Tôi sẽ chỉ cần lấy thông tin vị trí hiện tại của bạn từ Google. Như vậy có được không?"

Bạn có thể lấy thông tin người dùng sau đây bằng cách sử dụng các mã quyền:

Quyền Mô tả
DEVICE_PRECISE_LOCATION Vị trí chính xác của thiết bị (tọa độ và địa chỉ đường phố)
DEVICE_COARSE_LOCATION Vị trí thiết bị tương đối (mã bưu chính và thành phố)

Lấy kết quả về quyền

Các phần sau đây mô tả cách kiểm tra trạng thái của quyền và cách đọc thông tin của người dùng nếu họ cấp quyền.

Kiểm tra trạng thái quyền

Khi người dùng cấp quyền, trạng thái kết quả sẽ được ghi vào phiên được liên kết với vị trí.

Bạn có thể kiểm tra trạng thái của quyền bằng cách kiểm tra giá trị của session.params.<slot_name>.permissionStatus trong tình trạng của một cảnh.

Để kiểm tra trạng thái của khu vực cấp quyền, hãy làm theo các bước sau:

  1. Truy cập vào Bảng điều khiển Actions rồi nhấp vào Phát triển trong trình đơn trên cùng.
  2. Trong mục Cảnh, hãy nhấp vào cảnh có chứa ô cấp quyền.
  3. Trong phần Điều kiện của cảnh, hãy nhấp vào dấu + để thêm một .
  4. Nhập điều kiện sau để kiểm tra trạng thái của quyền (trong đó &lt;slot_name&gt; là tên của thông số phiên mà bạn đã định cấu hình trong vị trí):

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

  5. Trong phần Điều kiện của cảnh, hãy nhấp vào dấu + để thêm một .

  6. Nhập điều kiện sau đây để xử lý trường hợp người dùng không đồng ý chia sẻ thông tin của họ:

    scene.slots.status == "FINAL"
    

  7. Trong phần Điều kiện của cảnh, hãy nhấp vào dấu + để thêm một .

  8. Nhập điều kiện sau đây để xử lý trường hợp người dùng đã đã cấp quyền và không cần hỏi lại:

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

Đọc thông tin người dùng

Nếu người dùng cấp quyền, thông tin người dùng sẽ được cung cấp trong các yêu cầu tiếp theo.

Trong đoạn mã dưới đây, bạn có thể xem thông tin vị trí của thiết bị nằm trong yêu cầu đối với webhook trong device.currentLocation:

Yêu cầu 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": ""
          }
        }
      }
    }
    

Để biết thêm thông tin về giản đồ của loại vị trí, hãy xem Tài liệu tham khảo về Location.

Bạn có thể truy cập thông tin có trong yêu cầu từ webhook của bạn, như được hiển thị trong đoạn mã sau:

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

Sử dụng quyền trong câu lệnh

Bạn cũng có thể tham chiếu đến quyền này trong các câu lệnh tĩnh. Ví dụ: đối với vị trí thiết bị, bạn có thể dùng $device.currentLocation.coordinates.*$device.currentLocation.postalAddress.*. Đoạn mã sau đây cho biết cách tham chiếu đến thành phố của người dùng trong một câu lệnh:

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