Validation de l'utilisateur secondaire

La validation des utilisateurs secondaires vous permet d'ajouter une sécurité à deux facteurs pour les commandes vocales commandes. Vous pouvez ainsi renforcer la sécurité de certaines actions : éteindre une caméra de sécurité ou ouvrir une porte. La validation secondaire de l'utilisateur est n'est pas liée à une caractéristique spécifique de l'appareil, ce qui vous permet de décider Google Assistant lance un défi. Par exemple, vous pouvez choisir d'émettre un défi pour la caractéristique OnOff caméra de sécurité, mais ne pas lancer de test OnOff la caractéristique d'une lumière. Vous pouvez aussi avoir Assistant des défis dans certaines situations pour la même action. Par exemple : peut demander à Assistant d'émettre une demande de question d'authentification ouvrir une porte si aucune clé sans contact NFC n'est à proximité, mais pas un test si la clé sans contact est présente.

Le Assistant peut poser deux types de questions : de confirmation explicite ou avec un code secret. Cela permet d'ajouter votre bloc challenge à QUERY et EXECUTE intents renvoyés depuis Assistant vers votre action et accepte une erreur challengeNeeded de réponse. Assistant renvoie ensuite la requête d'intent à votre action avec les données du défi dans le bloc « Défi ». Vous pouvez ensuite valider les données de question d'authentification pour déterminer si l'utilisateur a défini le niveau de sécurité de réponse.

Assistant utilise les boîtes de dialogue pour lancer le défi, mais si vous utiliser Assistant sur les surfaces non vocales, coder et confirmations s'affichent à l'écran.

Types d'appareils compatibles

La validation secondaire de l'utilisateur est compatible avec tous les types d'appareils.

Traits d'appareil compatibles

La validation secondaire de l'utilisateur est compatible avec toutes les caractéristiques d'appareil.

Types d'authentifications acceptés

Voici les types d'authentification secondaire de validation de l'utilisateur acceptés:

  • Aucun défi : requête et réponse qui n'utilisent pas de Question d'authentification secondaire de l'utilisateur.
  • ackNeeded : une validation secondaire de l'utilisateur qui nécessite une reconnaissance explicite (oui ou non) et peuvent également utiliser les états de caractéristiques comme le feedback sur la réponse. Ce type d'authentification n'est pas recommandé pour des raisons de sécurité appareils et caractéristiques.
  • pinNeeded : une validation secondaire de l'utilisateur qui nécessite un Code secret, idéal pour les dispositifs de sécurité et caractéristiques.

Aucun défi

Cet exemple montre une requête EXECUTE réussie et la réponse obtenue, sans un défi pour allumer les lumières.

Utilisateur Allume la lumière.
Google Assistant D'accord, j'allume les trois lumières.
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Demander
{
  "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
          }
        }]
      }]
    }
  }]
}
<ph type="x-smartling-placeholder">
</ph>
Réponse
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "on": true,
        "online": true
      }
    }]
  }
}

ackNeeded

Une authentification secondaire de confirmation de l'utilisateur pouvant utiliser plusieurs états pour une caractéristique ou une simple authentification par accusé de réception.

Il existe les types d'authentification ackNeeded suivants:

ackNeeded simple

Cet exemple présente une requête et une réponse simples avec un défi ackNeeded pour baisser la lumière et la confirmation de baisser 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.
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Demande 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
          }
        }]
      }]
    }
  }]
}
<ph type="x-smartling-placeholder">
</ph>
Réponse 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
<ph type="x-smartling-placeholder">
</ph>
Demande 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
          }
        }]
      }]
    }
  }]
}
<ph type="x-smartling-placeholder">
</ph>
Réponse 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS"
    }]
  }
}

ackNeeded avec les états de trait

Une authentification de confirmation de l'utilisateur secondaire qui peut utiliser les états pour une trait de caractère. Par exemple, si vous travaillez avec TemperatureSetting trait et les deux thermostatMode et thermostatTemperatureSetpoint sont définis, Assistant peut demander Voulez-vous vraiment régler le chauffage sur la climatisation sur 28 degrés ?

Vous pouvez également inclure un état dans une réponse Assistant effectue une action spécifique en fonction d'un requête.

Les caractéristiques et états suivants sont compatibles avec ackNeeded avec des états de caractéristiques. A la liste d'une caractéristique spécifique indique que tous ses états sont pris en charge.

Cet exemple montre une requête et une réponse avec un défi ackNeeded qui utilise un état de caractéristique. Elle active le mode chauffage sur le climatiseur la température sur 28 degrés. Ensuite, Assistant demande aux utilisateurs la confirmation d’allumer le chauffage et de régler 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 le chauffage de la climatisation sur 28 diplômes ?
Utilisateur Oui.
Google Assistant Je règle le chauffage du climatiseur sur 28 degrés.
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Demande 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"
          }
        }]
      }]
    }
  }]
}
<ph type="x-smartling-placeholder">
</ph>
Réponse 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "states": {
        "thermostatMode": "heat",
        "thermostatTemperatureSetpoint": 28
      },
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
<ph type="x-smartling-placeholder">
</ph>
Demande 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
          }
        }]
      }]
    }
  }]
}
<ph type="x-smartling-placeholder">
</ph>
Réponse 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "thermostatMode": "heat",
        "thermostatTemperatureSetpoint": 28
      }
    }]
  }
}

pinNeeded

Le test pinNeeded est recommandé pour les appareils de sécurité.

Cet exemple présente une requête initiale et une réponse avec un pinNeeded d'authentification. L'exemple renvoie une réponse avec un défi pinNeeded, donc Assistant demande le code. À ce stade, l'utilisateur peut fournir un code incorrect ou valide.

Exemple de requête et de réponse pour un code secret incorrect ou valide:

Utilisateur Déverrouillez la porte.
Google Assistant Puis-je avoir votre code de sécurité ?
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Demander
{
  "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
          }
        }]
      }]
    }
  }]
}
<ph type="x-smartling-placeholder">
</ph>
Réponse
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "pinNeeded"
      }
    }]
  }
}

Code incorrect

Cet exemple présente la requête et la réponse avec un challengeFailedPinNeeded d'authentification. Ce test doit être utilisé après un premier test pinNeeded a échoué.

Lorsqu'un type challengeFailedPinNeeded est renvoyé, Assistant vous demande à nouveau le code de sécurité. Si l'utilisateur effectue trop de tentatives infructueuses, vous pouvez renvoyer un tooManyFailedAttempts . Consultez la section Réponses d'erreur.

Utilisateur 333222
Google Assistant Désolé, le code de sécurité est incorrect. Puis-je avoir votre code de sécurité ?
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Demander
{
  "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"
          }
        }]
      }]
    }
  }]
}
<ph type="x-smartling-placeholder">
</ph>
Réponse
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "challengeFailedPinNeeded"
      }
    }]
  }
}

Code d'accès valide

Cet exemple illustre la demande et la réponse d'un code PIN valide.

Utilisateur 333444
Google Assistant Déverrouillage de la porte...
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Demander
{
  "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"
          }
        }]
      }]
    }
  }]
}
<ph type="x-smartling-placeholder">
</ph>
Réponse
{
  "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 Puis-je avoir votre code de sécurité ?
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Demander
{
  "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
          }
        }]
      }]
    }
  }]
}
<ph type="x-smartling-placeholder">
</ph>
Réponse
{
  "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é, trop de tentatives ont échoué. Veuillez accéder à l'appli de votre appareil pour effectuer cette action.
  • pinIncorrect : Désolé, le code de sécurité est incorrect.
  • userCancelled - OK

Voir la liste complète les erreurs et les exceptions.