2016-05-09 11 views
10

इसलिए अभी मैं Microsoft.Bot.Builder.Dialogs.Conversation.SendAsync और Microsoft.Bot.Builder.Dialogs.Conversation.ResumeAsync उपयोग कर रहा हूँ रोक सकते हैं और बातचीत फिर से शुरू करने के लिए एक रास्ता लागू करने के लिए, लेकिन यह 'exit' करने के लिए असंभव लगता है या पहले वाली स्थिति में वापस जाने के। यह वार्तालाप संवाद में फंस गया है।बॉट फ्रेमवर्क: कैसे वार्तालाप बाहर निकलने के लिए?

मैं बस को लागू करें एक 'रद्द करें' आदेश? यदि हां, तो क्या डेटा मैं बहुत स्पष्ट करने की जरूरत है कि यह मूल स्थिति में वापस हो जाएगा करते हैं?

public static readonly IDialog<string> dialog = Chain 
     .PostToChain() 
     .Switch(
      new Case<Message, IDialog<string>>((msg) => 
      { 
       var regex = new Regex("login", RegexOptions.IgnoreCase); 
       return regex.IsMatch(msg.Text); 
      }, (ctx, msg) => 
      { 
       return Chain.ContinueWith(new ChatDialog(msg), 
          async (context, res) => 
          { 
           var token = await res; 
           //var valid = await Helpers.ValidateAccessToken(token); 
           //var name = await Helpers.GetProfileName(token); 
           var name = "User"; 
           context.UserData.SetValue("name", name); 
           return Chain.Return($"You are logged in as: {name}"); 
          }); 
      }) 
     ).Unwrap().PostToUser(); 

इसलिए यदि मैं एक 'लॉगिन' यह जाना होगा और एक नया ChatDialog बातचीत शुरू लेकिन यह इस राज्य में फंस रहा है भेजें। यहां तक ​​कि अगर मैं एक और कमांड भेजने की कोशिश करता हूं, तो यह लॉगिन मांगेगा। मैं एक और Case वर्ग एक 'रद्द करें' आदेश को संभालने के लिए लागू करते हैं? या यह स्वचालित रूप से बातचीत रद्द कर देना चाहिए उपयोगकर्ता एक बार से अधिक एक ही 'लॉगिन' कमांड भेजता है? एक 'रद्द' कमांड को अलग से भेजने के लिए थोड़े से घबराहट लगता है।

+0

बस सोच रहा है, क्या आपको बाद में समाधान मिला है? मुझे एक ही समस्या है। – K48

उत्तर

2

मुझे लगता है कि आप डिफॉल्टकेस खो रहे हैं। this देखें। यह फेसबुक एथ नमूने के लिए डिफॉल्टकेस के कार्यान्वयन को दिखाता है। बीटीडब्ल्यू, उस नमूने में उनके पास लॉगआउट कमांड भी है।

0

मैं विचार करता हूं कि आपके उपयोगकर्ता वार्तालाप के अंत की व्याख्या कैसे करेंगे, और उन परिदृश्यों के बारे में सोचें और लोग बातचीत कैसे समाप्त करते हैं।

आप रीसेटिंग या विशिष्ट कीवर्ड के आधार पर वार्तालाप के अंत को संभालने के लिए कोड जोड़ सकते हैं, और GlobalMessageHandler पैटर्न का उपयोग करके।

https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/core-GlobalMessageHandlers

इसके अलावा, उपयोगकर्ताओं बस "लटका" करने के लिए/विंडो को बंद एक बार वे किया जाता है की उम्मीद है।

मेट्रिक्स का एक अच्छा सेट मालिकों के लिए बॉट का उपयोग करने के तरीके के बारे में जानकारी एकत्र करने में मदद कर सकता है। i.e: क्या इंटरैक्शन एक्स लीड अपेक्षित इंटरैक्शन वाई पर था, या हमने इस वार्तालाप के लिए आखिरी बातचीत क्या देखी ... आदि

संबंधित मुद्दे