次要使用者驗證

雙重使用者驗證可讓您為語音指令新增第二層安全防護機制。這樣一來,你就能為特定動作 (例如關閉安全攝影機或開門) 增添額外安全防護。次要使用者驗證狀態: 不會受限於特定裝置特徵,讓您能決定何時要 Google Assistant發出挑戰。舉例來說,您可以選擇 發出 OnOff 特徵的挑戰 但不針對 OnOff 決定光明的特徵您也可以在特定情況下,讓 Assistant 針對相同動作發出挑戰。舉例來說, 可以要求Assistant發出挑戰要求: 除非 NFC 鑰匙圈不在該門附近,否則開門 如果鍵盤存在,則發出驗證問題。

Assistant 可以發出兩種驗證要求:明確的確認訊息或個人識別碼 (PIN 碼)。這麼做會新增 從 AssistantQUERYEXECUTE 意圖發出的挑戰區塊會傳回動作,並接受 challengeNeeded 錯誤 回應。Assistant 接著會將意圖要求傳回至您的動作,並附上挑戰區塊中的挑戰資料。接著 驗證驗證資料,以判斷使用者是否提供正確的安全性 回應。

Assistant 會使用對話方塊發出驗證要求,但如果您在非語音介面上使用 Assistant,系統會在畫面上顯示 PIN 碼和確認訊息。

支援的裝置類型

所有裝置類型都支援次要使用者驗證。

支援的裝置 traits

所有裝置特徵都支援次要使用者驗證。

支援的驗證類型

系統支援的次要使用者驗證驗證類型如下:

  • 無驗證問題 - 未使用 次要使用者驗證挑戰。
  • ackNeeded:需要的次要使用者驗證 明確表示確認 (是或否),您也可以在使用特徵狀態時 意見回饋。不建議將這類驗證碼用於安全性裝置和特徵。
  • pinNeeded - 需要完成雙重使用者驗證的次要使用者驗證 個人識別碼 (PIN 碼),最適合用於安全性裝置 特徵和特徵
,瞭解如何調查及移除這項存取權。

無挑戰

這個範例顯示成功的 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 正在調暗客廳的燈
要求 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。A 罩杯 特定特徵的清單表示支援它的所有狀態。

本範例顯示要求和回應,其中包含使用特徵狀態的 ackNeeded 挑戰。將空調模式改為暖氣,並將溫度設為 28 度。接著,Assistant 會要求使用者 ,確認開啟暖氣並將溫度設為 28 距離傳回 thermostatTemperatureSetpoint28 狀態 回應。

使用者 將空調模式設為暖氣。
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 碼的要求與回應範例:

使用者 將門解鎖。
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

查看完整清單 錯誤和例外狀況