보조 사용자 확인

2차 사용자 확인을 사용하면 음성 명령에 2단계 보안을 추가할 수 있습니다. 이렇게 하면 보안 카메라를 끄거나 문을 여는 등의 특정 작업에 보안을 추가할 수 있습니다. 2차 사용자 확인은 특정 기기 트레이트와 연결되지 않으므로 Google Assistant에서 도전과제를 발행할 시기를 결정할 수 있습니다. 예를 들어 보안 카메라의 OnOff 특성에 대한 챌린지를 발행할 수 있지만 조명의 OnOff 특성에 대한 챌린지는 발행할 수 없습니다. 특정 상황에서는 동일한 작업에 대해 Assistant챌린지를 발행할 수도 있습니다. 예를 들어 NFC 키포브가 문 근처에 없으면 Assistant가 문을 열기 위한 챌린지 요청을 발행하도록 요청할 수 있지만 키포브가 있으면 챌린지를 발행하지 않도록 요청할 수 있습니다.

Assistant는 명시적 확인 또는 개인 식별 번호 (PIN)라는 두 가지 유형의 챌린지를 발행할 수 있습니다. 이렇게 하면 Assistant에서 작업으로 다시 전송되는 QUERYEXECUTE 인텐트에 챌린지 블록이 추가되고 challengeNeeded 오류 응답이 허용됩니다. Assistant는 챌린지 블록에 챌린지 데이터가 포함된 인텐트 요청을 작업에 다시 전송합니다. 그런 다음 챌린지 데이터를 검증하여 사용자가 올바른 보안 응답을 제공했는지 확인할 수 있습니다.

Assistant는 대화상자를 사용하여 챌린지를 실행하지만 음성 이외의 표시 경로에서 Assistant를 사용하는 경우 PIN 및 확인은 화면에서 실행됩니다.

2차 사용자 확인을 사용해야 하는 경우

모든 기기 유형 또는 특성에 대해 2차 사용자 확인을 사용 설정할 수 있습니다. 하지만 통합 인증을 받으려면 특정 보안 민감한 기기 유형과 특성에 대해 2차 사용자 확인을 구현해야 합니다.

다음 특성 및 기기 유형 조합에는 pinNeeded 챌린지 유형을 사용하는 2차 사용자 확인이 필요합니다.

  • 기기 유형이 CAMERA인 경우 OnOff 특성입니다.
  • 기기 유형이 DOOR, GARAGE, GATE 또는 WINDOW인 경우 OpenClose 특성입니다.
  • 잠금 해제 시 LockUnlock 특성
  • 무장 해제 또는 무장 해제 취소 시 ArmDisarm 특성
  • 기기 유형이 NETWORK 또는 ROUTER인 경우 Reboot, SoftwareUpdate 또는 NetworkControl 특성입니다.

기기 유형이 AC_UNIT이고 통합이 일본에 있는 경우 TemperatureSetting 트레이트에는 ackNeeded 도전과제 유형이 필요합니다.

지원되는 도전과제 유형

지원되는 2차 사용자 확인 챌린지 유형은 다음과 같습니다.

  • 챌린지 없음 - 2차 사용자 확인 챌린지를 사용하지 않는 요청 및 응답입니다.
  • ackNeeded - 명시적 확인 (예 또는 아니요)이 필요하고 특성 상태를 응답 의견으로 사용할 수도 있는 2차 사용자 확인입니다. 이 챌린지 유형은 보안 기기 및 특성에는 권장되지 않습니다.
  • pinNeeded - 보안 기기 및 트레이트에 적합한 개인 식별 번호 (PIN)가 필요한 2차 사용자 확인입니다.

테스트 없음

이 예시에서는 조명을 켜기 위한 챌린지 없이 성공적인 EXECUTE 요청과 응답을 보여줍니다.

사용자 조명 켜 줘.
Google Assistant 네, 조명 3개를 켭니다.
요청
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.OnOff",
          "params": {
            "on": true
          }
        }]
      }]
    }
  }]
}
대답
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "on": true,
        "online": true
      }
    }]
  }
}

ackNeeded

특성 또는 간단한 확인 인증에 여러 상태를 사용할 수 있는 보조 사용자 확인 인증입니다.

다음과 같은 ackNeeded 도전과제 유형이 있습니다.

ackNeeded simple

이 예시에서는 조명을 어둡게 하는 ackNeeded 챌린지와 조명을 어둡게 한다는 확인이 포함된 간단한 요청과 응답을 보여줍니다.

사용자 거실 조명 어둡게 해 줘.
Google Assistant 거실 조명을 어둡게 합니다. 계속하시겠습니까?
사용자 예.
Google Assistant 거실 조명을 어둡게 합니다.
요청 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.BrightnessAbsolute",
          "params": {
            "brightness": 12
          }
        }]
      }]
    }
  }]
}
대답 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
요청 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.BrightnessAbsolute",
          "params": {
            "brightness": 12
          },
          "challenge": {
            "ack": true
          }
        }]
      }]
    }
  }]
}
응답 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS"
    }]
  }
}

특성 상태를 사용한 ackNeeded

특성의 상태를 사용할 수 있는 보조 사용자 확인 인증입니다. 예를 들어 TemperatureSetting 트레이트를 사용하고 thermostatModethermostatTemperatureSetpoint가 모두 설정된 경우 Assistant에어컨의 난방을 28도로 설정하시겠어요?라고 물을 수 있습니다.

또한 응답에 상태를 포함하여 Assistant가 지정된 요청에 따라 특정 작업을 실행하도록 할 수 있습니다.

다음 특성 및 상태는 특성 상태와 함께 ackNeeded를 지원합니다. 특정 특성이 나열되면 모든 상태가 지원됨을 나타냅니다.

  • ArmDisarm
    • ackNeeded 챌린지 유형을 사용하여 기기를 경보 시스템 설정하거나 경보 시스템 설정을 취소할 수 있지만 경보 시스템 해제 및 경보 시스템 해제 취소 기능에는 pinNeeded 챌린지 유형이 필요합니다.
  • Fill
  • LockUnlock
    • 기기를 잠그려면 ackNeeded 챌린지 유형을 사용하고 잠금 해제하려면 pinNeeded 챌린지 유형을 사용합니다.
  • OnOff
    • on
    • 이 특성에는 ackNeeded 챌린지 유형을 사용합니다. 이 트레이트를 CAMERA 기기와 함께 사용하는 경우 pinNeeded 도전과제 유형이 필요합니다.
  • OpenClose
    • 이 특성에는 ackNeeded 챌린지 유형을 사용합니다. 이 특성은 DOOR, GARAGE, GATE 또는 WINDOW 기기와 함께 사용하는 경우 pinNeeded 챌린지 유형이 필요합니다.
  • Scene
  • TemperatureSetting
    • thermostatMode
    • thermostatTemperatureSetpoint
    • thermostatTemperatureSetpointHigh
    • thermostatTemperatureSetpointLow

이 예시에서는 특성 상태를 사용하는 ackNeeded 챌린지가 포함된 요청과 응답을 보여줍니다. 에어컨 모드를 난방으로 변경하고 온도를 28도로 설정합니다. 그런 다음 Assistant28thermostatTemperatureSetpoint이 응답에서 상태로 반환되므로 사용자에게 난방을 켜고 온도를 28도로 설정할지 확인합니다.

사용자 에어컨 모드를 난방으로 설정해 줘.
Google Assistant 에어컨의 난방을 28도로 설정하시겠어요?
사용자 예.
Google Assistant 에어컨의 난방을 28도로 설정합니다.
요청 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.TemperatureSetting",
          "params": {
            "thermostatMode": "heat"
          }
        }]
      }]
    }
  }]
}
대답 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "states": {
        "thermostatMode": "heat",
        "thermostatTemperatureSetpoint": 28
      },
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
요청 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.TemperatureSetting",
          "params": {
            "thermostatMode": "heat"
          },
          "challenge": {
            "ack": true
          }
        }]
      }]
    }
  }]
}
응답 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "thermostatMode": "heat",
        "thermostatTemperatureSetpoint": 28
      }
    }]
  }
}

pinNeeded

pinNeeded 챌린지는 보안 기기에 권장됩니다.

이 예시에서는 pinNeeded 챌린지가 포함된 초기 요청 및 응답을 보여줍니다. 이 예시에서는 pinNeeded 챌린지가 포함된 응답을 반환하므로 Assistant에서 PIN을 요청합니다. 이 시점에서 사용자는 잘못된 PIN 또는 유효한 PIN을 제공할 수 있습니다.

잘못되었거나 유효한 PIN에 대한 요청 및 응답 샘플:

사용자 문을 열어 줘.
Google Assistant 보안 코드를 알려 주시겠어요?
요청
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.LockUnlock",
          "params": {
            "lock": false
          }
        }]
      }]
    }
  }]
}
대답
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "pinNeeded"
      }
    }]
  }
}

잘못된 PIN

이 예에서는 challengeFailedPinNeeded 챌린지가 포함된 요청과 응답을 보여줍니다. 이 챌린지는 초기 pinNeeded 챌린지가 실패한 후에 사용해야 합니다.

challengeFailedPinNeeded 유형이 반환되면 Assistant에서 보안 코드를 다시 요청합니다. 사용자가 실패한 시도를 너무 많이 수행하면 tooManyFailedAttempts 오류 응답을 반환할 수 있습니다. 오류 응답을 참고하세요.

사용자 333222
Google Assistant 죄송합니다. 보안 코드가 잘못되었습니다. 보안 코드를 알려 주시겠어요?
요청
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.LockUnlock",
          "params": {
            "lock": false
          },
          "challenge": {
            "pin": "333222"
          }
        }]
      }]
    }
  }]
}
대답
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "challengeFailedPinNeeded"
      }
    }]
  }
}

유효한 PIN

이 예시에서는 유효한 PIN의 요청과 응답을 보여줍니다.

사용자 333444
Google Assistant 문을 잠금 해제합니다.
요청
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.LockUnlock",
          "params": {
            "lock": false
          },
          "challenge": {
            "pin": "333444"
          }
        }]
      }]
    }
  }]
}
대답
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "isLocked": false,
        "isJammed": false
      }
    }]
  }
}
사용자 거실 조명 어둡게 해 줘.
Google Assistant 보안 코드를 알려 주시겠어요?
요청
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.BrightnessAbsolute",
          "params": {
            "brightness": 12
          }
        }]
      }]
    }
  }]
}
대답
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "pinNeeded"
      }
    }]
  }
}

오류 응답

다음은 대답과 함께 반환될 수 있는 오류 코드입니다.

  • tooManyFailedAttempts - 죄송합니다. 실패한 시도 횟수가 너무 많습니다. 기기에서 앱을 실행하여 작업을 완료하세요.
  • pinIncorrect - 죄송합니다. 보안 코드가 잘못되었습니다.
  • userCancelled - Ok

오류 및 예외의 전체 목록을 참고하세요.