2017-02-11 27 views
0

嗨,我有一個主動測驗機器人,我每隔幾小時發送一條消息,並且人們有機會參與測驗。有2種方式,開始使用機器人框架node.js的一個對話框,如果我沒有記錯啓動主動提示而不會破壞bot框架中的對話框

bot.send() 
bot.beginDialog() 

首屆一個不結束當前對話框,而第二個呢。我想給用戶一個問題,如什麼是1500 + 450和4個選項1800 1950 2500 3000,並且只有當人回答上述問題時纔開始對話。我怎樣才能做到這一點,而不會打破當前的對話框?

回答

1

你所要求的基本上是不可能的 - 使用主動消息不能讓你改變當前上下文的調用棧 - 它只能讓你發送消息給用戶。

我想繞過這個的唯一方法是使用middleware來攔截消息並決定是否應該改變callstack(使用beginDialog)。

這也不是最佳的,因爲您可能有以下情況: 1.當前調用堆棧問題:「您有多少年的經驗? 2.主動提示:「選擇答案:1)1000. 2)2000等。」

如果用戶鍵入「2」,他指的是哪個上下文?

也許一個很好的解決辦法是要求用戶輸入「提問回答:2」,這將使您在使用中間件攔截此消息:

bot.use({ 
    botbuilder: function (session, next) { 
     if (/^(quiz answer)/g.test(session.message.text)) { 
      session.beginDialog('/quizAnswer'); 
     } 
     else { 
      next(); 
     } 
    } 
}); 

對話框/quizAnswer結束後,將恢復正常流量。 請記住,即使在那種情況下 - 用戶可能不記得他在哪個上下文中,並且您將很難找出最後的消息/提示等等是什麼...

也許更好的解決方案是爲測驗提供一個單獨的機器人。

+0

好的快速問題我遇到了類似的問題,我想https://github.com/Microsoft/BotBuilder/issues/1352但我還沒有想出beginDialogAction應該如何解決這個問題,任何想法? – PirateApp

+1

我還沒有嘗試過,但是如果我沒有弄錯的話,這很像中間件 - 也就是說,無論你處於什麼狀態,如果機器人接收到某個工作,都會啓動一個新的對話框。就像endConversationAction一樣挑選像cancel/quit這樣的工作,它總是會清除當前的堆棧。 –