當你的智能家居設備與 Google Assistant 集成時,你可能會遇到如下錯誤:「沒法更新設置,請檢查你的鏈接。」前端
Google Assistant 設置中報告的常見錯誤android
這個錯誤可能源於帳號鏈接和 SYNC 同步過程的許多緣由。ios
爲了更好地瞭解這些錯誤,你可使用 Stackdriver,Google Cloud 的日誌系統。當帳戶鏈接或隨後的 SYNC 事件發生錯誤時,它會自動記錄錯誤並向你提供信息。git
可能來自堆棧驅動程序的錯誤報告消息的屏幕截圖github
你收到的日誌會自動清除並移除任何我的可識別信息(PII),並且不會包含詳細的追蹤。web
啓動時,你能夠導航到項目的 Google Cloud 控制檯,在抽屜導航的 Stackdriver 部分中選擇 Logging 選項:後端
你能夠經過 Google Assistant Action > All version_id 來查看專門爲你的智能家居實現而出現的錯誤:api
儘管很方便,但必須轉到單獨的頁面去查看錯誤可能不適合你的開發流,並且它可能不會爲你提供易於訪問的數據,例如,包含在每週統計報表中的數據。讓咱們看看如何將你的日誌從 Stackdriver 導出到你的基礎設施中,讓你在這些數據之上構建額外的集成。bash
使用 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、前端、後端、區塊鏈、產品、設計、人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。