2017-02-14 46 views
0

我有一段簡單的代碼,我想在開始時運行第一次運行操作,並讓默認對話框處理其他所有事情。在下面的代碼中。IntentDialog在機器人框架的開始處僅匹配一次

bot.dialog('/firstRun', [firstRun1]) 
function firstRun1(session) { 
    session.replaceDialog('/') 
} 

bot.dialog('/', new builder.IntentDialog() 
    .matches(/wishlist/, '/wishlist') 
    .matches(/exclusive/, '/exclusive') 
    .onDefault('/runCampaign') 
) 
bot.dialog('/wishlist', (session, args) => { 
    session.endDialog('Add to wishlist') 
}) 

bot.dialog('/exclusive', (session, args) => { 
    session.endDialog('Exclusive') 
}) 

bot.dialog('/runCampaign', [runCampaign1]) 

function runCampaign1(session) { 
    session.send('default') 
} 

我的問題就在這裏。當這個人輸入排他性時,我相信默認對話框會運行它的匹配,並且理想情況下不管發生多少次都會觸發獨佔,但由於某種原因,它不會按照下面的屏幕截圖發生。一旦一個人在開始時輸入排他或願望清單,它總是在底部運行默認設置,我該如何解決這個問題。另外如何在IntentDialog中的不同匹配子句之間共享數據,可以說我想在匹配和默認值之間有一些變量session.dialogData.name enter image description here UPDATE 1 而不是在2個區域內說session.endDialog在我上面的代碼中,我只寫了session.send()而沒有結束任何對話框,現在當我輸入exclusive或wishlist時沒有任何反應。我錯過了什麼嗎? enter image description here

回答

1

如果要返回到調用(上一個)對話框,則應始終致電session.endDialog

在你的第一個例子:

|current dialog|user input|next dialog| 
|first run  |go  |/  | 
|/   |whishlist |/  | 
|/   |freak  |runCampaign| 
|runCampaign |<any>  |runCampaign| 

因爲你沒有在runCampaign對話框打電話session.endDialog,你總是會在它和任何用戶輸入「默認」將被打印出來。

在你的第二個例子中,你錯過了鍵入「whishlist」,所以你立即進入runCampaign對話框。所以,你更改爲send那裏沒有呼叫。但是,如果您在「怪胎」之前輸入「whislist」,那麼您應該已經進入wishlist,並且您總是在任何輸入上打印「添加到願望清單」。

+0

但我想我們不應該關閉默認對話框。它是好的,如果我們關閉它 – PirateApp

+0

OMG它的作品!非常感謝!您保存了我的一天 – PirateApp

+1

實際上,您不會結束默認對話框,您可以結束從根對話框的onDefault調用的runCampaign對話框。根對話框仍在運行。 –