2차 사용자 확인을 사용하면 음성 명령에 2단계 보안을 추가할 수 있습니다. 이를 통해 보안 카메라 끄기 또는 문 열기와 같은 특정 작업에 추가 보안을 추가할 수 있습니다. 보조 사용자 인증은 특정 기기 특성과 연결되어 있지 않으므로 Google Assistant 챌린지를 실행할 시점을 결정할 수 있습니다. 예를 들어 보안 카메라의 OnOff 특성에 대한 챌린지를 실행하도록 선택할 수 있지만 조명의 OnOff 특성에 대한 챌린지는 실행하지 않도록 선택할 수 있습니다. 또한 동일한 작업에 대해 특정 상황에서 Assistant 챌린지를 실행하도록 할 수도 있습니다. 예를 들어 NFC 키포브가 문 근처에 없는 경우 Assistant가 문을 여는 챌린지 요청을 실행하도록 요청할 수 있지만 키포브가 있는 경우에는 챌린지를 실행하지 않도록 요청할 수 있습니다.
Assistant은(는) 두 가지 유형의 챌린지를 실행할 수 있습니다. -
명시적 확인 또는 개인 식별 번호(PIN). 이렇게 하면 QUERY 및 EXECUTE 인텐트에 챌린지 블록이 추가되고 Assistant에서 액션으로 다시 전송되며 challengeNeeded 오류 응답이 수락됩니다. Assistant 그러면 챌린지 블록의 챌린지 데이터와 함께 인텐트 요청을
액션으로 다시 전송합니다. 그런 다음 챌린지 데이터를 확인하여 사용자가 올바른 보안 응답을 제공했는지 확인할 수 있습니다.
Assistant는 대화상자를 사용하여 챌린지를 실행하지만 음성 이외의 화면에서 Assistant를 사용하는 경우 PIN 및 확인이 화면에서 이루어집니다.
2차 사용자 확인을 사용하는 경우
모든 기기 유형 또는 특성에 대해 보조 사용자 인증을 사용 설정할 수 있습니다. 하지만 통합 인증을 받으려면 특정 보안에 민감한 기기 유형 및 특성에 대해 2차 사용자 확인을 구현해야 합니다.
다음 특성 및 기기 유형 조합에는 pinNeeded 챌린지 유형을 사용하는 보조 사용자 인증이 필요합니다.
- 기기 유형이
CAMERA인 경우OnOff특성 - 기기 유형이
DOOR,GARAGE,GATE또는WINDOW인 경우OpenClose특성 - 잠금 해제 시
LockUnlock특성 - 무장 해제 또는 무장 해제 취소 시
ArmDisarm특성 - 기기 유형이
NETWORK또는ROUTER인 경우Reboot,SoftwareUpdate또는NetworkControl트레이트
기기 유형이 AC_UNIT이고 통합이 일본에 있는 경우 TemperatureSetting 트레이트에 ackNeeded 도전과제 유형이 필요합니다.
지원되는 챌린지 유형
다음은 지원되는 보조 사용자 인증 챌린지 유형입니다.
- 챌린지 없음: 보조 사용자 인증 챌린지를 사용하지 않는 요청 및 응답입니다.
- ackNeeded: 명시적 확인 (예 또는 아니요)이 필요한 보조 사용자 인증이며 특성 상태를 응답 의견으로 사용할 수도 있습니다. 이 챌린지 유형은 보안 기기 및 특성에 권장되지 않습니다.
- 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 단순
이 예에서는 조명을 어둡게 하는 ackNeeded 챌린지와 조명을 어둡게 하는 확인이 포함된 간단한 요청 및 응답을 보여줍니다.
| 사용자 | 거실 조명을 어둡게 해 주세요. |
| Google Assistant | 거실 조명을 어둡게 하고 있습니다. 페어링을 진행하시겠어요? |
| 사용자 | 예. |
| 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": "ackNeeded" } }] } }
{ "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 } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "SUCCESS" }] } }
특성 상태가 있는 ackNeeded
특성에 상태를 사용할 수 있는 보조 사용자 확인 인증입니다.
예를 들어
TemperatureSetting 트레이트 특성으로 작업하고
thermostatMode와 thermostatTemperatureSetpoint가 모두 설정된 경우
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
thermostatModethermostatTemperatureSetpointthermostatTemperatureSetpointHighthermostatTemperatureSetpointLow
이 예에서는 특성 상태를 사용하는 ackNeeded 챌린지가 포함된 요청 및 응답을 보여줍니다. 에어컨 모드를 난방으로 변경하고 온도를 28도로 설정합니다. 그런 다음 Assistant은 응답에서 28의 thermostatTemperatureSetpoint이 상태로 반환되므로 사용자에게 난방을 켜고 온도를 28도로 설정할지 확인하도록 요청합니다.
| 사용자 | 에어컨 모드를 난방으로 설정해 주세요. |
| Google Assistant | 에어컨의 난방을 28 도로 설정하시겠어요? |
| 사용자 | 예. |
| Google Assistant | 에어컨의 난방을 28도로 설정하고 있습니다. |
{ "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" } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "states": { "thermostatMode": "heat", "thermostatTemperatureSetpoint": 28 }, "errorCode": "challengeNeeded", "challengeNeeded": { "type": "ackNeeded" } }] } }
{ "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 } }] }] } }] }
{ "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 또는 올바른 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 - 알겠습니다.