1. 程式人生 > >Amazon alexa skill開發中遇到的坑(持續更新...)

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

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服務函式時千萬看清楚,不然會出現一些莫名其妙的錯誤。

注:持續更新