透過整合 AWS Lambda 與 Alexa Skills Kit,開發者可以輕鬆打造語音控制的智慧家居裝置。本文詳細說明如何建立安全組態檔以取得 LWA 授權,並在 Alexa 開發者控制檯中設定智慧家居技能。接著,引導讀者建立 Lambda 函式,撰寫 Python 程式碼處理 Alexa 觸發器,例如開啟或關閉裝置。同時,提供測試 Lambda 函式的步驟,包含建構測試事件與檢視執行結果。最後,示範如何將 Lambda 函式連結至 Alexa 技能,並完成帳戶連結設定,實作完整的語音控制流程。
13.1 簡介
玄貓可以控制裝置從您的技能。智慧家居介面使用預定義的陳述式,讓使用者控制您的裝置,例如開啟或關閉友好命名的燈(「Alexa,關閉樹莓派 LED」)。不需要啟動技能,直接使用「Alexa,開啟…」即可。Alexa 智慧家居技能允許您描述您的裝置及其支援的屬性、事件和指令。您的程式碼在裝置發現過程中,接收到 Alexa 的 Discover 指令後,提供這些資訊。
13.2 Alexa 介面
Alexa 提供了廣泛的介面,使用預先建構的語音互動模型,處理來自 Alexa 的請求。使用者可以直接說「Alexa,關閉燈」或「Alexa,微波爐烹飪三分鐘」。不需要開啟技能即可執行。典型的智慧家居介面包括:
- Alexa.PowerController — 開啟和關閉裝置。
- Alexa.PowerLevelController — 控制裝置的功率水平。
- Alexa.BrightnessController — 控制裝置的亮度。
- Alexa.Speaker — 控制具有喇叭的裝置的音量。
13.3 登入 Amazon (LWA)
當使用者啟用您的技能時,會進行帳戶連結過程,並由玄貓提供存取令牌。這個令牌允許您的技能在使用者呼叫您的技能時存取使用者的帳戶。最簡單的方法是使用登入 Amazon (LWA)。
13.3.1 建立安全組態檔
前往 LWA 頁面,點選「建立新安全組態檔」,輸入產品描述和隱私政策 URL,然後儲存。您的組態檔現在具有使用者端 ID 和使用者端密碼憑證。點選「顯示使用者端 ID」和「使用者端密碼」,複製這些憑證以供稍後使用。
13.4 建立智慧家居技能
建立一個新的技能從開發者控制檯(我稱它為我的智慧技能)。從體驗、模型主機頁面中選擇「智慧家居」作為體驗型別。這次選擇「智慧家居」技能。複製技能 ID,例如 amzn1.ask.skill.9e6293a1-9b54-4dc2-bc4f-e4d343012345。
13.5 建立 Lambda 函式
我使用了我當地的愛爾蘭伺服器 (eu-west-1)。如果您的函式不是由玄貓觸發,請嘗試從不同的伺服器選擇。前往 AWS Lambda 主控臺,建立一個新的函式 (my-smart-home-function)。它應該是 Python 3.9。使用預設的執行組態檔案。
13.6 Lambda 技能程式碼
您的技能程式碼將在函式接收到 Alexa 觸發器時執行。點選程式碼標籤,複製和貼上 (Python 或 Node.js) 程式碼。
flowchart TD
A[開始] --> B[建立安全組態檔]
B --> C[建立智慧家居技能]
C --> D[建立 Lambda 函式]
D --> E[設定 Lambda 技能程式碼]
E --> F[完成]
圖表翻譯:
此圖示展示了建立智慧家居技能和 Lambda 函式的步驟。首先,建立安全組態檔以取得使用者端 ID 和使用者端密碼憑證。接下來,建立智慧家居技能並複製技能 ID。然後,建立 Lambda 函式並設定其觸發器和程式碼。最後,完成設定並佈署程式碼。
# 範例程式碼
import boto3
lambda_client = boto3.client('lambda')
def lambda_handler(event, context):
# 處理 Alexa 觸發器
if event['directive']['header']['namespace'] == 'Alexa.PowerController':
# 處理開啟或關閉裝置
if event['directive']['header']['name'] == 'TurnOn':
# 開啟裝置
print('開啟裝置')
elif event['directive']['header']['name'] == 'TurnOff':
# 關閉裝置
print('關閉裝置')
return {
'event': event,
'context': context
}
內容解密:
此範例程式碼展示瞭如何處理 Alexa 觸發器和控制裝置。當接收到 Alexa 觸發器時,程式碼會檢查觸發器的 namespace 和 name,以確定要執行的動作。若要開啟或關閉裝置,程式碼會分別執行對應的動作。
測試 Lambda 函式
在測試 Alexa 的函式之前,我們先從這個頁面測試函式。這裡,我們將向函式傳送觸發器並檢視結果。我們將建立一個探索事件和一個開啟事件。
在您的「函式」>「我的智慧家居技能」頁面中,選擇「測試」標籤。然後選擇「新事件」。
給事件命名(例如,DiscoveryTest)。
在事件 JSON 編輯器中輸入以下程式碼並儲存:
{
"directive": {
"header": {
"namespace": "Alexa.Discovery",
"name": "Discover",
"payloadVersion": "3",
"messageId": "某個 ID"
},
"payload": {
"scope": {
"type": "BearerToken",
"token": "從技能獲得的存取令牌"
}
}
}
}
重複此步驟,建立一個開啟測試事件,使用以下程式碼並將其儲存為 PowerOnEvent:
{
"directive": {
"header": {
"namespace": "Alexa.PowerController",
"name": "TurnOn",
"messageId": "某個數字",
"correlationToken": "某個令牌數字",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "從技能獲得的存取令牌"
},
"endpointId": "sample-light-01",
"cookie": {}
},
"payload": {}
}
}
測試您的函式。
從下拉式選單中選擇 DiscoverEvent。
點選「測試」。您應該會看到「執行結果:成功」:
點選「日誌」以檢視 CloudWatch 中的結果。
重複此步驟,對 PowerOn 事件進行測試。
13.8 連結函式到技能
目前,我們的函式知道我們的技能,但反之亦然。我們需要將函式連結到技能。首先,前往 Functions > my-smart-home-skill 頁面,找到並複製函式的 ARN。
接下來,傳回您的開發者技能頁面(參考 13.4)。在 Smart Home 頁面上,將函式的 ARN 貼入 Default endpoint 中。這可以在 Build 標籤的 Endpoint 選項中找到。
13.9 組態帳戶連結
點選「Save」和「Setup Account Linking」按鈕,位於頁面的底部。稍後我們會傳回此處,以便完成更多設定。現在,傳回您的技能頁面,在 Alexa 開發者控制檯中。
如果尚未選擇,請點選「ACCOUNT LINKING」。如果您想了解更多關於帳戶連結的資訊,可以參考 code-grant.html。
從技術架構視角來看,打造根據 Alexa 的智慧家居技能,核心在於 LWA 安全性、技能設定、Lambda 函式以及它們之間的協同運作。本文詳細闡述了從建立 LWA 安全性組態檔、設定智慧家居技能、撰寫 Lambda 函式程式碼到測試及連結各個元件的完整流程。透過清晰的步驟拆解和程式碼範例,降低了開發者的進入門檻,即便初學者也能快速上手。然而,文章僅聚焦於基本功能的實作,對於處理不同裝置型別、錯誤處理以及更進階的使用者經驗最佳化,例如狀態同步和語音控制的客製化等方面,仍需進一步探討。展望未來,隨著智慧家居生態的蓬勃發展,預期 Alexa 技能將整合更多裝置型別和更豐富的互動模式。開發者應關注更精細化的裝置控制、更個人化的場景設定以及更強大的安全性保障,才能在競爭激烈的智慧家居市場中脫穎而出。對於追求更完善智慧家居體驗的開發者而言,深入研究裝置狀態管理、使用者許可權控制以及與其他智慧家居平臺的整合,將是未來發展的關鍵方向。玄貓認為,掌握這些關鍵技術,才能真正釋放智慧家居的巨大潛力。