Amazon alexa skill開發中遇到的坑(持續更新...)
博主也是一個剛接觸amazon alexa skill開發的小白,從零開始。下面我說下我在開發我的alexash時所遇到的坑。
1、建立AWS lambda函式時沒有 alexa skill kit這個觸發器
通常我們建立lambda函式服務都需要新增對應觸發器。如圖:
可是我開始弄這個是是沒有alexa skill kit 相關的觸發器的。
原因就是你必須把你的aws 地址改成 美國東部(弗吉尼亞北部)、美國西部(俄勒岡)、亞太區域(東京)、歐洲(愛爾蘭) 不然會出現Dseigner裡面找不到alexa skill kit的情況。推薦用第一個
2、建立的skill怎樣持續對話
第一次喚醒技能後,能與你持續對話,直到你說出stop等退出之類的話語。
這個問題真的困擾了我很久,我也在是經過1、2天的時間後才弄出來的,期間加上大佬的提醒,才弄清楚是怎麼回事。alexa他預設的設定就是當他回覆使用者完後,自動會關閉對話,想要在次對話必須重新喚醒。 這裡面就是一個關鍵的返回值的問題:ShouldEndsession的返回值,它的返回值預設是turn,也就是為什麼對話一次後就會結束的原因,你需要把他設定成false。
我們看一下預設的ShouldEndsession返回值樣式型別
喚醒時返回值
使用者對話時返回值
由此可見,我們建立的技能的返回值沒有發現ShouldEndSession,我們就需要自己去設定。
如果你是自定義aws lambda編寫的skill服務,你需要在你的返回值裡面設定ShouldEndSession的值為false
如果你是使用藍圖或者無服務儲存庫建立的函式,你只需要加上一個.withShouldEndSession(false)
if (!isVideoAppLaunchDirectivePresent()) {
response.shouldEndSession = false;
}
或者在你的服務程式碼時加上.withShouldEndSession(false) 如下
3、skill對話方塊模型
對話方塊模型這個裡是一個困擾了我很久的難題,主要是要實現uers與alexa在一個Intent裡面的多輪對話。(我本人的理解)
我們開始建立的自定義skill是這樣的:
我在開始弄對話方塊模型時 建立的skill都是這樣的。 而我們建立包含對話方塊模型的skill必須有下面這些東西:
dialog是對話方塊模型最重要的東西
你要建立對話方塊模型 必須開啟你的槽填充
也就是 slot folling這個東西。其他的按照要求填寫就行,當然你skill建立對話方塊模型,你對應的lambda也應該要建立對應的服務(參考的github上的程式碼)
對話方塊模型的skill的每一個Intent都寫了兩個函式來服務他。這裡最重要的就是判斷 request.dialogState的狀態,也就是我上面框出來的內容。
4、skill再提醒與skill出錯結束對話
再提醒功能主要是用做使用者喚醒技能後,在接下來5秒內使用者未發出命令或者意圖,Echo會再次提醒使用者需要做什麼嗎。提醒內容由你自定義,用到的是一個amazon寫好的方法:. reprompt() 括號裡面定義Echo再次提醒使用者的話。
技能出錯結束對話使我們在前面就已經已經介紹過,使用:.withShouldEndSession() 方法,只是說對應括號裡面的值改為ture 就行。 當然需要你定義什麼時候是出錯的情況,我這裡做的是讓服務端給我返回一個狀態碼,判斷狀態碼,從而確定技能是否出錯。
5、Echo未識別使用者意圖
我們構建好技能後,一定會測試技能的kekao可靠性。在測試過程中你一定會發現Echo未能識別你的意圖的情況。預設的Echo會返回一個技能有問題之內的話。我們有兩種可以處理未識別使用者意圖的方法,一種是獲取到使用者的話,上傳到你的cloud處理,再返回給你,第二種就是使用amazon的預設意圖: amazon.fallback。 你只需要在你的skill裡面新增它就可以在lambda中使用。
在你啟用這個內建意圖後,在Echo未識別使用者意圖時,Echo返回你自定義的話。
lambda中建立你skill裡Intent服務函式時千萬看清楚,不然會出現一些莫名其妙的錯誤。
注:持續更新