2016-06-10 66 views
6

我試圖創建基於https://github.com/amzn/alexa-skills-kit-java一個HelloWorld的技能,但是當我測試的lambda函數它表明這個錯誤Alexa的技能套件-Lambda功能 - 無法驗證SpeechletRequest(JAVA)

{ 
    "errorMessage":"com.amazon.speech.speechlet.SpeechletRequestHandlerException: Could not validate SpeechletRequest null using verifier ApplicationIdSpeechletRequestVerifier, rejecting request", 

    "errorType": "java.lang.RuntimeException", 

    "stackTrace": [ "com.amazon.speech.speechlet.lambda.SpeechletRequestStreamHandler.handleRequest(SpeechletRequestStreamHandler.java:101)", 
"helloworld.HelloWorldSpeechletRequestStreamHandler.handleRequest(HelloWorldSpeechletRequestStreamHandler.java:43)" 

], 

    "cause": { 

    "errorMessage": "Could not validate SpeechletRequest null using 
verifier ApplicationIdSpeechletRequestVerifier, rejecting request", 
    "errorType": "com.amazon.speech.speechlet.SpeechletRequestHandlerException", 

    "stackTrace": [ 
     "com.amazon.speech.speechlet.SpeechletRequestHandler.handleSpeechletCall(SpeechletRequestHandler.java:73)", 
     "com.amazon.speech.speechlet.lambda.SpeechletRequestStreamHandler.handleRequest(SpeechletRequestStreamHandler.java:98)", 
     "helloworld.HelloWorldSpeechletRequestStreamHandler.handleRequest(HelloWorldSpeechletRequestStreamHandler.java:43)" 
    ] 
    } 
} 

這是我的Java文件

public final class HelloWorldSpeechletRequestStreamHandler extends SpeechletRequestStreamHandler { 
    private static final Set<String> supportedApplicationIds = new HashSet<String>(); 
    static { 
     /* 
     * This Id can be found on https://developer.amazon.com/edw/home.html#/ "Edit" the relevant 
     * Alexa Skill and put the relevant Application Ids in this Set. 
     */ 
     supportedApplicationIds.add("amzn1.echo-sdk-ams.app.[amzn1.echo-sdk-ams.app.56bcdaf9-97fc-47f9-9918-43cb6a90d9f5]"); 
    } 


    public HelloWorldSpeechletRequestStreamHandler() { 
     super(new HelloWorldSpeechlet(), supportedApplicationIds); 
    } 
} 

我在想什麼?

+0

你找出解決方案嗎?如果是這樣,你能分享嗎?我有同樣的問題。 – RommelTJ

回答

8

對我來說,我得到了這個異常,因爲我試圖運行我的lambda函數,沒有正確的測試事件JSON在動作選項卡下。如果您單擊「操作」選項卡,然後單擊「配置測試事件」,則應該以JSON格式輸入您可以解釋的函數輸入。看了很多後,我發現你可以通過開發者控制檯獲得這個JSON,在那裏你使你的技能具備了你所有的技能配置。在左側點擊'測試'選項卡,然後進入'服務模擬器'部分。有一個文本框顯示'輸入話語',你可以在這裏輸入一個語音命令給你的功能,例如'Alexa tell yourApp'說你好。點擊'Ask [yourApp]'按鈕,在左邊框上將生成一個Lambda請求JSON,輸出在右邊。然後,將左側的JSON複製並粘貼到您的lambda控制檯中的測試事件中,然後您應該很好。

+0

謝謝@Dan,我的代碼中有兩個問題。 1.將應用程序ID放在「[]」中,但不應該如此。 2.測試事件中錯誤的json格式。最後它的工作。 – PKTomar

0

我會將static代碼放到您創建的延伸SpeechletLambda的類中。我相信,這是評估發生的地方,在這個類被加載並且它的靜態代碼被執行之前得到解決。

或者,您可以關閉驗證。如果有人知道你的開發環境足夠好,可以調用你的私有lambda函數,他們可能知道足以欺騙你的應用程序ID。所以驗證它沒有太多的安全價值。有關關閉它的示例,請參閱here

+0

我試圖將我的自定義技能部署爲AWS lambda函數,而不是作爲Web服務**,所以擴展'Speechlet'而不是'SpeechServlet'。所以它不起作用。並且我想要關閉驗證而開發。什麼需要做任何建議請: - –

+0

我的壞。我已經更新了我的答案,並鏈接了一個Lambda示例。這幾乎是一回事。 –

8

您在支持的應用程序ID中有錯誤的ID。該ID必須是「技能信息」頁面上的「Alexa技能」應用程序的ID。它應該看起來像這樣:

supportedApplicationIds.add("amzn1.ask.skill.c236d019-7d2a-5c96-a02f-ef8ab6f8e023"); 

我知道演示已經與[place id here]但你真的替換了整個事情。

+0

謝謝@mmaceachran – PKTomar

1

我試圖創建一個包含在https://github.com/amzn/alexa-skills-kit-java中的地址技巧,但我得到了相同類型的錯誤。

事實證明,問題出現在DeviceAddressSpeechletRequestStreamHandler中,並在靜態{}塊中創建了Set<String> supportedApplicationIds的實例。

當我移動new HashSet<>();來聲明類的屬性時,它開始工作。