2016-11-14 88 views
7

我正在爲Alexa開發一個簡單的自定義技能。我已經啓動並運行,並在AWS Lambda上託管處理程序。它的工作正常,除了...Alexa技能套件(ASK)和話語

在測試用戶界面中,如果我輸入一個有效的話語,例如幫助,取消,游泳,運行(兩個自定義話語),一切正常;但是,如果我輸入無意義的話語,例如dsfhfdsjhf,則Alexa服務始終將無意義映射到意向架構中的第一個有效意圖。

在我的lambda代碼中,我有一個處理未知意圖的處理程序;然而,意圖從來不知道。這是測試界面的人工產物嗎?還有其他事情發生?

感謝, 約翰

+2

我無法回答這個問題,但在使用測試用戶界面和實際設備時,我遇到過類似的差異。 +1提問。我打算引導你走向Alexa技能工具包開發論壇,但看起來你已經在那裏發佈了這個問題。 :-) – TimHayes

+0

我在想這是測試界面的工件。你有沒有嘗試過在你的設備上進行測試? –

+0

@John你有沒有找到解決方案? – Dhawal

回答

0

代替打字dsfhfdsjhf(這是不發音的,頁面中的任何懂得語言),如果你的話語是趴或搖晃時會發生什麼?

在現實世界的情況下,我不認爲Alexa會不會通過dsfhfdsjhf,因此可能很難準確計劃行爲。

+0

這是如何沒有用? – AppleBaggins

2

基於在您的方法中包含未處理的意圖,聽起來像您正在使用Alexa Skills Kit SDK for Node.js。您的問題不是測試界面的人爲因素。是的,還有其他事情正在發生。

雖然尚未得到亞馬遜的承認,但這是許多人在SDK中公認的問題。見this open issue。從個人經驗到上述建議,如果您使用真實的文字或亂碼沒有關係,未處理的意圖永遠不會被調用。在解決這個問題之前,我的建議是建立一個處理程序,這個處理程序是針對你的技能的高級提示,並且爲用戶重申他們擁有的有效選項。把它定位爲全面。希望我們會看到更好的這個SDK的繼續維護。

0

所以你想將所有的垃圾輸入管道到一個單一的意圖。你很幸運。在繼續之前,您應該瞭解以下幾件事。

在Node.js中,如果由Alexa語音服務返回的意圖在給定的MODE中不可用,則未處理的處理程序在MODE內被觸發。
示例MODE將是確認模式。在許多可用的意圖中,是和否是唯一被接受的意圖。

var ConfirmationHandlers = Alexa.CreateStateHandler(states.CONFIRMATIONMODE, { 
    'YesIntent': function() { 
     this.handler.state = states.CLOSINGCOSTSMODE; 
     message = ` So you will be buying this house. Great! `; 
     reprompt = `Please carry on with the other intents found in the house buyer skill. `; 
     this.emit(':ask', message, reprompt); 
    }, 
    'NoIntent': function() { 
     this.handler.state = states.GENERALSEARCHMODE; 
     message = ` So you won't be buying this house. That's Ok, Continue searching for your dream house in the House buyer skill. !`; 
     reprompt = `Continue searching for your dream house in the House buyer skill.`; 
     this.emit(':ask', message, reprompt); 
    }, 
    'Unhandled': function() { 
     console.log("UNHANDLED"); 
     var reprompt = ` All other intents are disabled at this moment. Would you like to buy this house Yes or No? `; 
     this.emit(':ask', reprompt, reprompt); 
    } 
}); 

但是,在到達lambda函數之前,Alexa語音服務必須解釋您的話語並將其映射到其中一個可用意圖。如果你的話語是垃圾,並沒有映射到任何特定的意圖,它目前被映射到第一個意圖。

解決方案:如果您想添加垃圾意圖,應該由意向模式來處理,而不是由未處理的意圖處理。要添加垃圾意圖,您可以按照這篇亞馬​​遜文章中的說明操作。

https://developer.amazon.com/blogs/post/Tx3IHSFQSUF3RQP/Why-a-Custom-Slot-is-the-Literal-Solution

方案3:我只是想要的一切。如上所述使用 語法的自定義插槽類型通常可滿足此願望,並使您能夠通過NLP培訓提高準確性。如果你仍然只想要 的一切,你可以創建一個自定義的插槽,稱爲「CatchAll」和相應的意圖和話語:CatchAllIntent {CatchAll}。如果您使用的訓練數據與LITERAL使用的 相同,則會得到相同的結果。人們通常會發現,添加更多特定場景的訓練數據可提高準確性。

如果你還沒有得到結果,試圖設置包羅萬象 值約二十2〜8字隨機短語(從隨機字 發電機 - 是真正隨機的)。當用戶說出與您的其他話語相匹配的內容時,這些意圖仍將被髮送。當 與其中任何一個不匹配時,它將落入CatchAll插槽。如果你走這條路線,你將失去準確性,因爲你不是 充分利用Alexa的NLP,所以你需要大量測試。

未映射到你的更具體的意圖之一,像YESNO任何投入,很可能會映射到這個CatchAll意圖。