智慧型住宅常見問題

一般

問:我們應該在哪裡以哪種語言實作雲端對雲端出貨基礎架構?

答:只要支援新式 SSL (TLS) 和 OAuth 2.0,您就能在任何平台和以任何語言實作基礎架構。建議您盡可能靠近其餘基礎架構部署,以提高可靠性,並減少在實際使用者裝置上執行的延遲時間。


問:裝置 ID 是否不得重複?

答:ID 不得重複。如果服務中沒有專屬 ID,至少必須為每個使用者提供專屬 ID。假設使用者有多個住家,且兩個住家都與同一位使用者整合。要求開啟某個住家的燈具時,不應開啟另一個住家 ID 相同的燈具。


問:裝置名稱是否不得重複?

答:名稱不一定要是獨一無二,但為了提供更優質的使用體驗,我們可能會在設定完成後,建議使用者改善不當的命名。

以下是命名指南:

  • 名稱應是使用者實際會說的內容。
  • 我們會辨識字串子集,因此如果你的字串是「acme color light」,我們也會回應「acme light」。
  • 建議您同時提供產品的描述性名稱,以及一或多個使用者定義名稱。
  • 使用者不必為燈具命名房間,因為我們有房間名稱;每個房間的燈具名稱應不重複,但隨時可使用複數形式來控制所有燈具 (例如,辦公室壁燈中的兩個燈泡分別是「北燈」和「東燈」,但可以只用「燈具」來控制)。

問:裝置狀態多久更新一次?

答:系統會在 QUERY 或 EXECUTE 時擷取暫時狀態,這兩者都是使用者啟動的動作。如果使用者詢問「燈亮了嗎?」或想調亮燈光,我們需要執行查詢來判斷目前的狀態。


問:是否可以直接使用裝置的目前狀態更新 Home Graph?

答:可以,請使用 Report State API 呼叫。


帳戶連結和 OAuth

答:是,使用者必須先連結帳戶,才能將裝置連線至供應商的雲端服務。


問:對於 OAuth,我們每 15.213 小時會使存取權杖失效,這樣可以嗎?

答:可以,但請測試較短的到期時間,例如 10 到 20 分鐘。 OAuth 用戶端應視需要重新整理權杖,並透過短暫的到期時間進行測試,證明這項功能正常運作。


意圖

問:系統何時會執行同步作業?

答:OAuth 完成後,系統會立即進行同步,並在呼叫「要求同步」後進行同步。


問:為什麼 SYNC 無法運作?

答:這項作業失敗的常見原因有很多。

  • 你傳送的裝置類型有誤。

    • 舉例來說,我們預期收到 action.devices.types.LIGHT,但您傳送 action.devices.types.Light
  • 你傳送了系統不支援的裝置類型。

    • 舉例來說,你傳送 action.devices.types.FLASHLIGHT,但我們不支援這類內容。
  • 您傳送的欄位無效/不支援。

    • 舉例來說,你擁有不在規格中的欄位。
  • SYNC 回應有其他格式問題。

    • 查看你的賽事表!
  • 你遇到帳戶連結問題。

    • 請確認您在 SYNC 要求的 Auth 標頭中收到有效的存取權杖。
  • 你回應 SYNC 要求的時間過長。

    • 請確認您在 5 秒內回覆 SYNC 要求。

問:「待處理」回應是否正常?

答:如果裝置可即時使用,我們強烈建議您提供成功/失敗的回應,而非待處理。如果您認為需要「待處理」回應,請與我們聯絡。我們瞭解部分低功耗非即時裝置可能需要待處理回應和非同步執行模型。


測試與提交

問:我們可以設定開發雲端環境嗎?

答:可以,您可以測試尚未啟動的雲端環境和設定。


問:我的動作未顯示在 Google Home 應用程式的「居家控制系統」部分,這是怎麼回事?

答:確認您是這個專案的開發人員。


報表狀態

問:實作 Report State 是否有先決條件?

答:專案必須使用 Smart Home API、支援 OAuth2,且必須具備要回報狀態的特徵。


問:我們需要多久回報一次裝置狀態?

答:Google 對於轉移和終端狀態感興趣。不過,如果短時間內發生多次狀態變化 (例如使用者在一分鐘內開關冰箱三次,或滑動調光器),我們只需要回報最終狀態。


問:進行 Report State 呼叫時,是否需要傳送完整裝置狀態?

答:系統不支援部分狀態更新,因此 Report State 呼叫應一律包含已更新特定特徵的所有資料。如果兩個特徵會造成不一致,則應一併回報。


問:Google 可以查詢裝置狀態 (即輪詢裝置) 嗎?

答:這是我們不建議使用的備援機制。如果我們需要頻繁輪詢這些使用者的裝置,則無法保證額外負載量。這是因為新的視覺介面需要這項功能。除了不明的載入問題外,使用者體驗也會變差。我們認為Report State對平台至關重要。


問:目前哪些特徵支援「回報狀態」?

答:系統支援所有與狀態相關聯的公開特徵。裝置的線上狀態如有任何變更,也應回報。

請注意,場景沒有狀態。不過,這可能會導致裝置狀態變更。如果 Google Home Graph 中的任何裝置有變更狀態,則需要回報。


問:「回報狀態」是否需要傳送時間戳記?

答:我們不需要時間戳記,系統會以傳送的最後一個狀態覆寫先前的呼叫。


問:如果我已在查詢和/或執行中傳送狀態,是否需要另外回報狀態?

答: Home Graph 只會儲存透過 Report State 傳送的狀態。系統只會將傳回的狀態做為 EXECUTE 和 QUERY 意圖的回應,用於對使用者說出回應,不會儲存這些狀態。因此,即使裝置的新狀態已做為 EXECUTE 或 QUERY 意圖的回應傳回,仍應呼叫 Report State


問:如果未在期限內完整導入報表狀態,會有什麼後果?

答:這會導致使用者體驗不佳,例如在Google Home app (GHA)和視覺介面中。這表示系統會傳送許多 QUERY 意圖來輪詢狀態,我們無法保證這會對應到合作夥伴雲端的額外負載。


問:如何測試報表狀態實作?

答:使用住家圖表檢視器。這項自助式測試工具會顯示儲存在 Home Graph 中的目前裝置狀態。


問:我們可以為「回報狀態」使用隨機 requestId 嗎?

答:如果 Report State 是由 EXECUTE 要求觸發,我們建議合作夥伴使用從 EXECUTE 要求收到的相同 requestId,否則只要使用隨機 requestId 即可。


問:如果使用者有多部裝置,其中一部裝置的狀態發生變化,我們是否必須回報所有裝置的最新狀態?

答:不必,你只需要回報該特定裝置的狀態。


最佳做法

問:可接受的延遲時間為何?

答:理想的延遲時間是低於 200 毫秒,2 到 5 秒之間也還可以。如果延遲時間接近 5 秒,請與我們聯絡。


問:如何讓聲控音箱在離線時正常回應?

答:傳回離線裝置的離線狀態。我們會針對這項錯誤傳回「目前無法使用」的 TTS。詳情請參閱「錯誤和例外狀況」。