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)或者你在node_modules-->lib-->response-->ResponseFactory.js裏面的ResponseFactory函數裏面的return的speak的return this前面加上下面一段代碼

 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的狀態,也就是我上面框出來的內容。

也可以參考alexa官方文檔(我給幾個當時我看的,不完全是,你可以在裏面找到你要的):https://developer.amazon.com/docs/custom-skills/define-the-dialog-to-collect-and-confirm-required-information.html

https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#confirmslot

https://developer.amazon.com/docs/custom-skills/define-the-dialog-to-collect-and-confirm-required-information.html

https://developer.amazon.com/docs/custom-skills/include-a-card-in-your-skills-response.html

同時npm上的文檔可能也對你有幫助:https://www.npmjs.com/package/alexa-sdk#dialog-interface

 

4、skill再提醒與skill出錯結束對話

再提醒功能主要是用做用戶喚醒技能後,在接下來5秒內用戶未發出命令或者意圖,Echo會再次提醒用戶需要做什麼嗎。提醒內容由你自定義,用到的是一個amazon寫好的方法:. reprompt()  括號裏面定義Echo再次提醒用戶的話。

技能出錯結束對話使我們在前面就已經已經介紹過,使用:.withShouldEndSession()  方法,只是說對應括號裏面的值改爲ture 就行。 當然需要你定義什麼時候是出錯的情況,我這裏做的是讓服務端給我返回一個狀態碼,判斷狀態碼,從而確定技能是否出錯。

 

5、Echo未識別用戶意圖

我們構建好技能後,一定會測試技能的kekao可靠性。在測試過程中你一定會發現Echo未能識別你的意圖的情況。默認的Echo會返回一個技能有問題之內的話。我們有兩種可以處理未識別用戶意圖的方法,一種是獲取到用戶的話,上傳到你的cloud處理,再返回給你,第二種就是使用amazon的默認意圖: amazon.fallback。 你只需要在你的skill裏面添加它就可以在lambda中使用。

在你啓用這個內置意圖後,在Echo未識別用戶意圖時,Echo返回你自定義的話。

6、發佈技能

子我們配置完技能,在發佈時,需要注意兩個地方。第一:你必須添加你的隱私政策url,不然在後面步驟會出錯。第二:如果你的技能需要授權token,授權網站你必須使用https協議,不然會出現以下錯誤。

 隱私政策網站你可以自己寫一個靜態的,可以參考:https://meater.com/privacy-policy/

 

授權token必須使用https協議 不然會報如上錯誤。     可以使用:https://myssl.com/ssl.html   查看網站協議。

 

創建skill  與aws 服務可以查看我另外兩篇博客

lambda中創建你skill裏Intent服務函數時千萬看清楚,不然會出現一些莫名其妙的錯誤。

注:前面說的httos協議你可以選擇騰訊雲的或者阿里的   只需要購買一個域名就行,他有免費一年的SSL,還有你必須有自己的服務器。購買一個域名很便宜 也就40來塊

 

 

alexa 項目告一段落了。接下來會搞國內的智能音響。天貓精靈和小愛同學,在開發過程中遇到的心得或者坑,我依舊會寫在博客中。

不好意思啊   不能在繼續開發智能音箱了,如果後續有機會,會繼續更新博客。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章