歡迎使用 Google Home 開發人員中心,探索全新功能,瞭解如何開發智慧住宅動作。注意:請繼續在「動作」控制台中建立動作。

次要使用者驗證

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

次要使用者驗證可讓您為語音指令新增雙重安全性。這可讓您針對特定動作新增額外的安全性,例如關閉監視攝影機或開啟車門。次要使用者驗證未綁定至特定裝置特性,可讓您決定何時要求 Google 助理發出驗證問題。舉例來說,您可以選擇針對安全相機的 OnOff 特性發出挑戰,但不會為光源的 OnOff 特性發出挑戰。在特定情況下,Google 助理也可能會針對相同動作發出挑戰。舉例來說,您可以要求 Google 助理在 NFC 鑰匙不在門附近時發出挑戰要求以開門,但當鑰匙子存在時,不會發出挑戰。

Google 助理會提出兩種類型的確認問題:明確確認或個人識別碼 (PIN 碼)。這會將透過 Google 助理傳送的 QUERYEXECUTE 意圖新增至動作, 並接受 challengeNeeded 錯誤回應。接著,Google 助理會透過挑戰區塊中的挑戰資料,將意圖要求傳回動作。接著,您可以驗證驗證資料,判斷使用者是否已提供正確的安全性回應。

Google 助理會使用對話方塊發出挑戰,但如果您使用非語音途徑的 Google 助理,可在螢幕上完成 PIN 碼和確認訊息。

支援的裝置類型

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

支援的裝置特性

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

支援的驗證類型

支援的次要使用者驗證問題類型如下:

  • 無挑戰 - 未使用次要使用者驗證要求的要求和回應。
  • ackneeded:需要明確確認的次要使用者驗證 (是或否),也可以使用特性狀態做為回應意見回饋。不建議在安全裝置和特性中使用這種驗證類型。
  • pinneeded:需要個人識別號碼 (PIN 碼) 的次要使用者驗證,非常適合用於安全性裝置和特性。

無挑戰

這個範例顯示成功的 EXECUTE 要求和回應,而不會開啟燈具。

使用者 開燈。
Google 助理 好的,正在開啟 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 的挑戰類型如下:

ackacked (簡單)

此範例顯示簡單的要求和回應,其中包含 ackNeeded 挑戰來調暗光線,以及確認調暗光線。

使用者 調暗客廳的燈。
Google 助理 正在調暗客廳的燈確定嗎?
使用者 是。
Google 助理 正在調暗客廳的燈
要求 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"
    }]
  }
}

acktra 狀態

可使用使用者狀態的次要使用者確認驗證。 舉例來說,如果你使用的是 TemperatureSetting 特徵,且 thermostatModethermostatTemperatureSetpoint 已設定完畢,Google 助理可以詢問「你確定要將空調設為 28 度嗎?」

您也可以在回應中加入狀態,讓 Google 助理根據特定要求執行特定動作。

下列特性和狀態支援特性特徵的 ackNeeded。特定特性的清單表示支援所有狀態。

此範例顯示使用指定特性的 ackNeeded 挑戰的要求和回應。這會將空調模式切換成暖氣模式,並將溫度設為 28 度。接著,Google 助理會要求使用者確認啟用熱能 並將溫度設為 28 降低,因為 28thermostatTemperatureSetpoint 會作為回應中的狀態傳回。

使用者 將空調模式設為暖氣。
Google 助理 確定要將空調的暖氣設為 28 度嗎?
使用者 是。
Google 助理 正在將空調的暖氣設為 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
      }
    }]
  }
}

需要 PIN 碼

建議在安全性裝置上採用 pinNeeded 挑戰。

此示例顯示有 pinNeeded 挑戰的初始要求與回應。本範例會傳回含有 pinNeeded 挑戰的回應,因此 Google 助理會要求圖釘。此時,使用者可以提供不正確或有效的 PIN 碼。

錯誤或有效的 PIN 碼要求和回應範例:

使用者 解鎖車門。
Google 助理 可以告訴我安全碼嗎?
請求
{
  "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 類型時,Google 助理會再次要求安全碼。如果使用者執行失敗的次數過多,您可以傳回 tooManyFailedAttempts 錯誤回應。請參閱錯誤回應

使用者 333222
Google 助理 抱歉,安全碼不正確。 可以告訴我安全碼嗎?
請求
{
  "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 助理 正在解鎖車門
請求
{
  "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 助理 可以告訴我安全碼嗎?
請求
{
  "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"
      }
    }]
  }
}

錯誤回應

您的回應可以傳回以下一些錯誤代碼:

  • challengeFailedNotSetup - 此操作需要安全碼,但您尚未在裝置的應用程式中設定。
  • tooManyFailedAttempts - 很抱歉,嘗試失敗次數過多。請前往裝置的應用程式完成這項操作。
  • pinIncorrect - 但很抱歉,安全碼不正確。
  • userCancelled - 確定

請參閱錯誤和例外狀況的完整清單。