권한

작업의 권한을 사용하여 사용자의 개인 정보를 요청할 수 있습니다. 할 수 있습니다. 예를 들어 음식 배달 작업은 기기 위치 정보 액세스 권한을 사용하여 볼 수 있습니다

작업에 권한을 추가하면 어시스턴트는 인터페이스를 제공하여 API를 제공하기 위해 사용자에게 권한을 정보를 추가할 수 있습니다.

사용 가능한 권한

작업에서 요청할 수 있는 권한은 다음과 같습니다.

  • DEVICE_PRECISE_LOCATION: 사용자의 정확한 기기 위치를 요청합니다. (좌표 및 상세 주소)
  • DEVICE_COARSE_LOCATION: 사용자의 대략적인 기기 위치를 요청합니다. (우편번호 및 도시)

권한 설정

작업에 대한 권한을 설정하려면 장면입니다. 그런 다음 요청하려는 데이터 권한의 슬롯을 구성합니다.

권한 슬롯 유형 추가

다음 명령어로 작업이 사용자 정보를 획득하도록 actions.type.Permission 슬롯 유형.

이 슬롯 유형을 구성하려면 다음 단계를 따르세요.

  1. Actions 콘솔로 이동하여 선택하거나 만듭니다. 프로젝트일 수 있습니다
  2. 상단 메뉴에서 개발을 클릭합니다.
  3. Scenes에서 권한 흐름을 추가할 장면을 클릭합니다.
  4. 장면의 슬롯 채우기 섹션에서 +를 클릭하여 새 슬롯을 추가합니다.
  5. 유형 선택 드롭다운에서 actions.type.Permission 슬롯 유형을 선택합니다.

  6. 슬롯 이름 입력 필드에 슬롯 이름을 입력합니다.

  7. 커스텀 슬롯 값 다시 쓰기를 사용 설정하여 결과를 세션에 씁니다. 매개변수 값으로 사용됩니다.

슬롯 구성

이제 컨텍스트 문자열과 부여할 권한 목록을 제공할 수 있습니다. 슬롯을 구성합니다. 컨텍스트 문자열은 정보를 요청할 수 있으며, 사용자가 정보를 수집할 때 내 작업에 대한 권한을 요청했습니다.

슬롯 구성에서 컨텍스트 문자열과 권한을 구성할 수 있습니다. 섹션을 참조하세요.

다음 코드 스니펫은 슬롯 구성 예를 보여줍니다.

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

사용자에게 표시되는 메시지는 "$context_string, I Google에서 현재 위치를 가져오기만 하면 됩니다. 괜찮으신가요?"

권한 코드를 사용하여 다음 사용자 정보를 얻을 수 있습니다.

권한 설명
DEVICE_PRECISE_LOCATION 정확한 기기 위치 (좌표 및 상세 주소)
DEVICE_COARSE_LOCATION 대략적인 기기 위치 (우편번호 및 도시)

권한 결과 가져오기

다음 섹션에서는 권한 상태를 확인하고 사용자가 권한을 부여하면 사용자 정보

권한 상태 확인

사용자가 권한을 부여하면 결과 상태가 세션에 기록됩니다. 슬롯과 연결된 매개변수입니다.

session.params.<slot_name>.permissionStatus입니다.

권한 슬롯의 상태를 확인하려면 다음 단계를 따르세요.

  1. Actions 콘솔로 이동하여 클릭합니다. 개발을 선택합니다.
  2. Scenes에서 권한 슬롯이 포함된 장면을 클릭합니다.
  3. 장면의 Condition 섹션에서 +를 클릭하여 새 상태를 추가합니다. 있습니다.
  4. 다음 조건을 입력하여 권한 상태를 확인합니다 (여기서 &lt;slot_name&gt;은 있습니다.

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

  5. 장면의 Condition 섹션에서 +를 클릭하여 새 상태를 추가합니다. 있습니다.

  6. 사용자가 다음과 같은 작업을 수행하지 않는 케이스를 처리하려면 다음 조건을 입력합니다. 정보 공유에 대한 동의:

    scene.slots.status == "FINAL"
    

  7. 장면의 Condition 섹션에서 +를 클릭하여 새 상태를 추가합니다. 있습니다.

  8. 다음 조건을 입력하여 사용자가 이미 완료한 케이스를 처리합니다. 다시 요청하지 않아도 됩니다.

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

사용자 정보 읽기

사용자가 권한을 부여하면 사용자 정보는 알 수 있습니다.

아래 스니펫에서 기기 위치 정보를 확인할 수 있습니다. device.currentLocation 아래 웹훅에 대한 요청 내에 포함됩니다.

요청 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": ""
          }
        }
      }
    }
    

위치 유형의 스키마에 대한 자세한 내용은 다음을 참조하세요. Location 참조.

다음과 같이 웹훅의 요청에 포함된 정보에 액세스할 수 있습니다. 삽입됩니다.

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

프롬프트에서 권한 사용

정적 프롬프트에서 권한을 참조할 수도 있습니다. 예를 들어 기기 위치의 경우 $device.currentLocation.coordinates.*$device.currentLocation.postalAddress.*를 사용할 수 있습니다. 다음 코드 스니펫은 프롬프트에서 사용자의 도시를 참조하는 방법을 보여줍니다.

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