Amazon Echo的beta版本為該流行的語音命令設備展示了一些的新用法。我們的專家解釋了如何配置Amazon Echo以及為什么ASK API對其功能有幫助。
AWS Lambda首次亮相的新進展是Alexa Skill Kit API,該API可以做到開發者在Echo beta程序中能夠鼓搗的一切。Echo采集語音識別并擁有一個非常自然的文本到語音的轉換程序。但它并不是完美的,它缺乏一些最終用戶可能想要的基本任務。讓我們進入ASK API,Echo開發的關鍵。
ASK API讓開發人員可以編寫軟件響應用戶在Echo上的輸入并將結果以語音的方式輸出給用戶。使用ASK,開發者需要一個Echo的API來調用函數,但是他們也可以使用亞馬遜Web服務(AWS)Lambda。那意味著如果該軟件沒有被使用,那就沒有開銷。如果被使用了,AWS客戶會根據他們所使用的計算資源收費。許多公司都只用到免費的層級,因為亞馬遜允許每個月有100萬次的函數調用。
啟動ASK API當我第一次聽說ASK API的工作原理時,我想到的第一件事是把Alexa集成到Twilio來發送SMS消息。畢竟,我總是會向誰問東問西的呢?很自然只要說一句“Alexa,問我太太……”,那讓我們開始構建這個系統吧。
我們假設你已經注冊了AWS,Lambda和Echo ASK系統。除此之外,在這個例子里我用到的所有代碼,包括最終產品,都是一個開源的項目,在Github上可以獲取。
首先,將代碼拿到本地然后看一眼一個Alexa Skill Kit的Lambda函數的典型結構。Lambda函數可以直接被hook到Amazon Echo或者通過簡單通知服務,簡單存儲服務或者DynamoDB事件觸發。你還可以將Lambda資源附加到Amazon API Gateway或者直接使用該API來運行。在下載完源代碼后,壓縮并通過Lambda控制臺上傳到你的AWS帳號。
在blueprint部分,點擊“Skip”按鈕:
在下一頁,點擊“Upload”按鈕并將你從Github代碼庫取得的代碼壓縮文件附上。然后填寫名稱,將“Handler”改成“app.handler”。
“Role”是指身份和權限管理(IAM)相關的Lambda函數的角色。選擇“Basic Execution Role”,你可以讓Lambda創建一個默認的角色,按照提示往下走,系統會自動生成一個角色。
我在使用Google Chrome自動生成IAM角色時碰到了一些問題,但是切換到Safari就好了。如果你的瀏覽器有彈出窗口阻止,你可能需要禁用才能讓自動生成的功能工作。
在填完criteria后,點擊“Next”按鈕在Lambda里創建函數。一旦函數被創建,點擊“Event Sources”tab頁,然后添加一個“Alexa”事件源。
添加ASK配置一旦配好Lambda函數,就可以開始設置ASK。登錄到Amazon Echo Skills Console并點擊Alexa Skill Kit下的“Get Started”。
然后點擊“Add a New Skill.”
在下一個界面,填寫Alexa Skill的基本信息,包括名稱,調用名(用戶要激活你的應用時需要說什么),版本字符串和程序的終止點。對于終止點,請確保要切換到AWS Lambda并從Lambda應用中復制到Amazon Resource Networks。在下一頁中,“Intent Schema”和“Sample Utterances”是兩個很重要的需要完成的字段。
復制以下代碼到Intent Schema
"intents": [
{
"intent": "SetPhoneNumber",
"slots": [
{
"name": "PhoneNumber",
"type": "LITERAL"
}
]
},
{
"intent": "AskMyWifeQuestion",
"slots": [
{
"name": "Question",
"type": "LITERAL"
}
]
}
]
}
該schema設定了兩個不同的Alexa可以調用的intent。第一個是簡單的“SetPhoneNumber”intent,接收一個參數“PhoneNumber”。第二個Intent叫“AskMyWifeQuestion”,接受一個參數“Question”。
設置的第二部分是“Sample Utterances”,這主要是幫助Alexa決定要觸發哪個intent以及要給每個參數傳入什么樣的文本。在這一部分,輸入一些Alexa應該接受的文本類型的樣本,以及如何填寫每個參數的映射。這個字段的第一個單詞是intent名稱。每一行的格式應該是一個intent名,后面跟著匹配那個intent的文本。注意intent名必須是一個單詞,不能有空格。任何你想要作為參數傳入的內容,應該寫成{sample string|SLOTNAME}。
例如:
SetPhoneNumber My Wife's Number Is {five five five five five five five five five five|PhoneNumber}
AskMyWifeQuestion {What's for Dinner|Question}
AskMyWifeQuestion {Hello|Question}
第一行通過說“My Wife’s Number Is……”和一個數字(我們必須要拼寫出這個數字作為樣本)來調用“SetPhoneNumber”intent。第二個允許一個通用的字符串類型,“What’s for Dinner?”你可以添加任何你喜歡的樣本字符串,包括那些只取文本的某部分作為發送到Question參數的字符串,比如:
AsMyWifeQuestion to {come home|Question}
這會忽略“to”的部分并只發送“come home”作為問題。
設置完這些字段后,點擊“Next”,然后Skill Kit應用就可以在Amazon Echo上測試了。
增加功能當Alexa接收到一個命令,Lambda函數執行“Skill”庫。額外的intent可以作為第二個參數被添加到Skill庫中。App.js文件里的askMyWifeQuestion函數包含了讓一個Alexa intent工作的基本框架,被調用后,它會觸發AskMyWifeQuestion intent。第一個參數是intent對象,第二個參數是一個在和Alexa交互時保存的會話對象。第三個參數是一個響應用戶的回調函數。
要包含一個額外的intent,將其添加到Schema和Sample Utterances中,然后在app.js的技能定義里指定。你可以獲取代碼并根據自己的需求修改,還可以發布和共享。