0

爲了演示目的,我應該在對話的基礎上發佈Alexa技能。 所有的alexa回覆都是硬編碼的。Alexa技能 - Keep Intent alive對話

技能的模板是這樣的:

第1部分: 用戶:Alexa的,問MySkill {}問題1。 Alexa:硬編碼答案。

第2部分: 用戶:Alexa的,問MySkill {} Question2.1,頁面 :爲Question2.1硬編碼的答案。 用戶:Alexa,問MySkill {Qeustion2.2} Alexa:硬編碼答案。

我能夠創建第1部分。但在第2部分中,我有一些問題。 問題2.1和2.2我需要單獨的意圖嗎?還是有可能保持技能的活力?

回答

0

看起來您正在使用單圈互動(即您不保持會話打開,請檢查shouldEndSessionhttps://www.npmjs.com/package/alexa-app)。無論如何,您需要將會話對象中的當前狀態保存或將其存儲在其他地方(綁定到唯一的request.userId)。

使用不同的意圖可能是另一種解決方案,但如果您有類似的話語可能會錯誤地錯誤映射到另一個解決方案,它很容易失敗。

0

我將首先假定您在開發過程中使用了alexa-sdk。如果你不知道,那就是,請查看以下鏈接:

https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs

有多種方法可以打破的問題,以你的技能在你的意圖的模式。它們既可以是單獨的意圖,例如「QuestionOneIntent」和「QuestionTwoIntent」,也可以是單個意圖「QuestionIntent」,其中這些意圖中的槽值對應於單個問題。由於原文並未提供太多信息,我不能說哪種結構是最好的設置。

在alexa-sdk中有兩種常見類型的響應。 「:告訴」將使Alexa說出迴應,並立即回到她的閒置狀態(不聽你的)。 「:詢問」會說出回覆,等待8秒鐘,然​​後在等待您發出另一個命令的同時跟進重新提示消息。

至於保持會話有效的對話,你可以簡單地通過使用

var speechOutput = "This is the answer to Question" 
var speechOutputReprompt = "Do you have any more questions?" 
this.emit(":ask", speechOutput, speechOutputReprompt) 

這將使您的會話保持打開狀態,用戶可以繼續問更多的問題發出你的迴應。如果您對reprompt回答「No」,您將不得不做出另一個關閉會話的意圖,從而使shouldEndSession變量爲true。以下是我如何構造代碼的示例:

"QuestionIntent": function(){ 
var responseName = "" 
var slots = this.event.request.intent.slots 
for (var slot in slots){ 
    if(slots[slot].value != undefined){ 
     responseName = slots[slot].name; 
     switch(responseName){ 
      case "QuestionOneIntent": 
       var QuestionOneAnswer = "Answer to question one"; 
       this.emit(":tell", QuestionOneAnswer); 
       break; 
      case "QuestionTwoIntent": 
       var QuestionTwoAnswer = "Answer to question two"; 
       this.emit(":ask", QuestionTwoAnswer, QuestionTwoAnswerReprompt); 
       break; 
      default: 
       console.log("error"); 
       break; 
     } 
    } 
} 
}