當你的智慧家居裝置與 Google Assistant 整合時,你可能會遇到以下錯誤:“無法更新設定,請檢查你的連線。”
Google Assistant 設定中報告的常見錯誤
這個錯誤可能源於賬號連線和 SYNC 同步過程的許多原因。
為了更好地瞭解這些錯誤,你可以使用 Stackdriver,Google Cloud 的日誌系統。當賬戶連線或隨後的 SYNC 事件發生錯誤時,它會自動記錄錯誤並向你提供資訊。
可能來自堆疊驅動程式的錯誤報告訊息的螢幕截圖
你收到的日誌會自動清除並移除任何個人可識別資訊(PII),而且不會包含詳細的追蹤。
啟動時,你可以導航到專案的 Google Cloud 控制檯,在抽屜導航的 Stackdriver 部分中選擇 Logging 選項:
你可以通過 Google Assistant Action > All version_id 來檢視專門為你的智慧家居實現而出現的錯誤:
儘管很方便,但必須轉到單獨的頁面去檢視錯誤可能不適合你的開發流,而且它可能不會為你提供易於訪問的資料,例如,包含在每週統計報表中的資料。讓我們看看如何將你的日誌從 Stackdriver 匯出到你的基礎設施中,讓你在這些資料之上構建額外的整合。
使用 Stackdriver,你可以設定包含帶有特定過濾器的日誌接收裝置。這個接收裝置中的日誌可以通過 Cloud 釋出/訂閱傳送到你擁有的端點。
域名驗證
在將訊息推送到端點之前,你需要驗證你自己的域名。你可以通過 Google Cloud 控制檯的 APIs & Services 部分進行註冊。
在 Credentials > Domain Verification 下,新增一個域名。在新增完你自己的域名之後,你將被帶到 Google 搜尋控制。在繼續操作之前,按照說明完成對你完整的驗證:
配置釋出/訂閱
使用Google Cloud 釋出/訂閱,你可以靜任務配置為在某些事件上執行,例如,當新日誌出現在 Stackdriver 中時,通過新增過濾器你可以限制觸發事件的日誌型別。你也可以配置伺服器端點來訂閱這些事件。
要開始匯出 SYNC 錯誤,請輸入過濾器 “text:SYNC”,點選 CREATE EXPORT 按鈕。在這裡,你可以建立一個連線到 Google Cloud 釋出/訂閱的主題接收器。這將是你能夠在每次出現日誌條目時處理事件:
在抽屜導航中,開啟發布/訂閱概述,建立一個新的訂閱:
這裡,你可以新建一個訂閱。對於交付型別,輸入用於接收訂閱的的 URL。為了進行驗證域名驗證,你必須擁有自己的伺服器:
在你的伺服器上,為了接受端點,你需要新增一個處理器。在這個示例中,它是 /alerts/stackdriver。這是你伺服器上的一個鉤子。Cloud 釋出/訂閱會向 URL 傳送一個在請求體重包含日誌資料的 POST 請求。下面的程式碼片段顯示了使用 Node.js 的實現:
app.post('/alerts/stackdriver', (req, res) => {
console.log('post stackdriver called', req.body);
res.status(204).send('success');
if (!!req.body.message && !!req.body.message.data) {
const data = Buffer.from(req.body.message.data, 'base64')
.toString('utf8');
console.log('data: ', data);
// optionally use regexp here to find request id and failure reason
}
});
複製程式碼
我們現在可以測試這個釋出/訂閱主題是否有效。在你的智慧家居整合中,設定你的 SYNC 回覆返回一個無效的裝置型別,例如 LART。以下程式碼片段是這個響應示例:
const app = smarthome();
app.onSync(body => {
return {
requestId: body.requestId,
payload: {
agentUserId: '123',
devices: [{
type: 'action.devices.types.LART'
// More metadata
}]
}
}
})
複製程式碼
當你嘗試連線你的賬戶時,你會在 Google Assistant 設定中看到一個錯誤,然後在 StackDriver 中看到與之對應的錯誤:
在你的伺服器中,你也會看到此錯誤正在被記錄。當你遇到此錯誤時,你可以檢視已傳送的 SYNC,並確定該錯誤來自裝置型別的錯誤。你可以通過修復返回此裝置資訊的字串來修復 webhook 中的錯誤。你可以在以下程式碼片段中看到更正的內容:
const app = smarthome();
app.onSync(body => {
return {
requestId: body.requestId,
payload: {
agentUserId: '123',
devices: [{
type: 'action.devices.types.LIGHT'
// More metadata
}]
}
}
})
複製程式碼
一旦你開始獲取這些錯誤,你可以做許多事情來提高你的智慧家居整合的可靠性,例如新增電子郵件警告或建立常見問題的儀表盤。通過及時發現這些問題並獲取正在發生的事件的詳細資訊,你可以更快、更有信心地進行更正。
如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。
掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。