Validation de l'utilisateur secondaire

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.
Demande
{
  "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
          }
        }]
      }]
    }
  }]
}
Réponse
{
  "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.
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
          }
        }]
      }]
    }
  }]
}
Réponse 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
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
          }
        }]
      }]
    }
  }]
}
Réponse 2
{
  "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.

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.
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"
          }
        }]
      }]
    }
  }]
}
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"
      }
    }]
  }
}
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
          }
        }]
      }]
    }
  }]
}
Réponse 2
{
  "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é ?
Demande
{
  "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
          }
        }]
      }]
    }
  }]
}
Réponse
{
  "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é ?
Demande
{
  "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"
          }
        }]
      }]
    }
  }]
}
Réponse
{
  "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.
Demande
{
  "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"
          }
        }]
      }]
    }
  }]
}
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 Pouvez-vous m'indiquer votre code de sécurité ?
Demande
{
  "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
          }
        }]
      }]
    }
  }]
}
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é, 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.