La validation secondaire de l'utilisateur vous permet d'ajouter un deuxième facteur de sécurité aux commandes vocales. Vous pouvez ainsi renforcer la sécurité de certaines actions, comme éteindre une caméra de sécurité ou ouvrir une porte. La validation secondaire des utilisateurs n'est pas liée à une caractéristique d'appareil spécifique, ce qui vous permet de décider quand Google Assistant doit lancer un défi. Par exemple, vous pouvez choisir de lancer une requête pour la caractéristique OnOff d'une caméra de sécurité, mais pas pour la caractéristique OnOff d'une ampoule. Vous pouvez également demander à Assistant de lancer des défis dans certaines situations pour la même action. Par exemple, vous pouvez demander à Assistant d'envoyer une requête de défi pour ouvrir une porte si une clé sans contact n'est pas à proximité de cette porte, mais de ne pas envoyer de défi si la clé est présente.
Le Assistant peut émettre deux types de défis : une confirmation explicite ou un code secret (PIN). Cela ajoute un ensemble de questions à l'intent QUERY
et EXECUTE
envoyé de Assistant à votre action, et accepte une réponse d'erreur challengeNeeded
. Assistant renvoie ensuite la requête d'intent à votre action avec les données de défi dans le bloc de défi. Vous pouvez ensuite valider les données de défi pour déterminer si l'utilisateur a fourni la bonne réponse de sécurité.
Assistant utilise une boîte de dialogue pour lancer le défi, mais si vous utilisez Assistant sur des surfaces non vocales, le code secret et les confirmations sont effectués à l'écran.
Types d'appareils compatibles
La validation secondaire de l'utilisateur est compatible avec tous les types d'appareils.
Caractéristiques d'appareil compatibles
La validation secondaire de l'utilisateur est compatible avec toutes les caractéristiques de l'appareil.
Types de questions d'authentification acceptés
Voici les types de défis de validation secondaire de l'utilisateur pris en charge:
- Aucune question : demande et réponse qui n'utilisent pas de question de validation secondaire de l'utilisateur.
- ackNeeded : validation secondaire de l'utilisateur qui nécessite une confirmation explicite ("Oui" ou "Non") et peut également utiliser des états de trait comme commentaires de réponse. Ce type de défi n'est pas recommandé pour les appareils et les caractéristiques de sécurité.
- pinNeeded : validation secondaire de l'utilisateur qui nécessite un code secret, idéal pour les appareils et les caractéristiques de sécurité.
Aucun défi
Cet exemple montre une requête et une réponse EXECUTE
réussies sans défi pour allumer les lumières.
Utilisateur | Allume la lumière. |
Google Assistant | D\'accord, j\'allume trois lumières. |
{ "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
Authentification secondaire de l'utilisateur qui peut utiliser plusieurs états pour un trait ou une authentification de confirmation simple.
Il existe les types de défis ackNeeded
suivants:
ackNeeded simple
Cet exemple montre une requête et une réponse simples avec un défi ackNeeded
pour atténuer une lumière et la confirmation d'atténuation de la lumière.
Utilisateur | Baisse la lumière du salon. |
Google Assistant | Je baisse la lumière du salon. Continuer ? |
Utilisateur | Oui. |
Google Assistant | Je baisse la lumière du salon. |
{ "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 avec les états de trait
Authentification de confirmation d'utilisateur secondaire pouvant utiliser des états pour un attribut.
Par exemple, si vous travaillez avec la caractéristique TemperatureSetting et que thermostatMode
et thermostatTemperatureSetpoint
sont définis, Assistant peut demander : Êtes-vous sûr de vouloir régler la température du climatiseur sur 28 °C ?
Vous pouvez également inclure un état dans une réponse pour que Assistant effectue une action spécifique en fonction d'une requête donnée.
Les traits et états suivants sont compatibles avec ackNeeded
avec les états de trait. La liste d'une caractéristique spécifique indique que tous ses états sont acceptés.
- ArmDisarm
currentArmLevel
currentStatusReport
- Fill
- LockUnlock
- OnOff
on
- OpenClose
- Scene
- TemperatureSetting
thermostatMode
thermostatTemperatureSetpoint
thermostatTemperatureSetpointHigh
thermostatTemperatureSetpointLow
Cet exemple montre une requête et une réponse avec un défi ackNeeded
qui utilise un état de trait. Le mode de climatisation est défini sur Chauffage et la température sur 28 degrés. Assistant demande ensuite aux utilisateurs de confirmer l'activation du chauffage et de définir la température sur 28 degrés, car un thermostatTemperatureSetpoint
de 28
est renvoyé en tant qu'état dans la réponse.
Utilisateur | Réglez le mode climatisation sur chauffage. |
Google Assistant | Voulez-vous vraiment régler la température de la climatisation sur 28 degrés ? |
Utilisateur | Oui. |
Google Assistant | Je règle le chauffage du climatiseur sur 28 degrés. |
{ "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
Le défi pinNeeded
est recommandé pour les appareils de sécurité.
Cet exemple montre une requête et une réponse initiales avec un défi pinNeeded
. L'exemple renvoie une réponse avec un défi pinNeeded
. Assistant demande donc le code. À ce stade, l'utilisateur peut fournir un code incorrect ou valide.
Exemple de requête et de réponse pour un code incorrect ou valide:
Utilisateur | Déverrouillez la porte. |
Google Assistant | Pouvez-vous m'indiquer votre code de sécurité ? |
{ "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" } }] } }
Code incorrect
Cet exemple montre la requête et la réponse avec un défi challengeFailedPinNeeded
. Ce défi doit être utilisé après l'échec d'un défi pinNeeded
initial.
Lorsqu'un type challengeFailedPinNeeded
est renvoyé, Assistant demande à nouveau le code de sécurité. Si l'utilisateur effectue trop de tentatives infructueuses, vous pouvez renvoyer une réponse d'erreur tooManyFailedAttempts
. Consultez la section Réponses d'erreur.
Utilisateur | 333222 |
Google Assistant | Malheureusement, le code de sécurité est incorrect. Pouvez-vous m'indiquer votre code de sécurité ? |
{ "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" } }] } }
Code PIN valide
Cet exemple montre la requête et la réponse d'un code secret valide.
Utilisateur | 333444 |
Google Assistant | Je déverrouille la porte. |
{ "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 } }] } }
Utilisateur | Baisse la lumière du salon. |
Google Assistant | Pouvez-vous m'indiquer votre code de sécurité ? |
{ "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" } }] } }
Réponses d'erreur
Voici quelques codes d'erreur qui peuvent être renvoyés avec vos réponses:
- tooManyFailedAttempts : Désolé, vous avez dépassé le nombre de tentatives infructueuses autorisé. Veuillez accéder à l'application de votre appareil pour effectuer cette action.
- pinIncorrect : Désolé, le code de sécurité est incorrect.
- userCancelled - OK
Consultez la liste complète des erreurs et exceptions.