2016-09-21 2 views
14

में "क्षमा करें, मेरे बॉट कोड में कोई समस्या है" से बचने के लिए कैसे करें मेरे पास एक बॉट है जो Azure + Bot Framework + LUIS (LuisDialog के माध्यम से) पर चलता है।माइक्रोसॉफ्ट बॉट फ्रेमवर्क

उपयोगकर्ता, वे अपने फेसबुक मैसेंजर या वेब एम्बेड पर यह त्रुटि संदेश दिखाई (पहले बॉट जवाब देने के लिए एक मौका है) एक त्वरित उत्तराधिकार में दो संदेश भेजने के लिए यदि ऐसा होता है:

Sorry, my bot code is having an issue.

जब के माध्यम से डिबगिंग बॉट चैनल एमुलेटर, मैं देख रहा हूँ त्रुटि यह है कि:

"text": "Error: Response status code does not indicate success: 429 (Too Many Requests). at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) Microsoft.Bot.Builder.Luis.LuisService.d__4.MoveNext()

स्टैक ट्रेस के अंत से पता चलता है कि त्रुटि मेरी MessageController.cs में इस लाइन से शुरू हुआ:

await Conversation.SendAsync(activity,() => new LuisRootDialogEnglish()); 

यह अजीब है क्योंकि मैं LUIS का एक भुगतान संस्करण उपयोग कर रहा हूं जो प्रति सेकंड 10 कॉल तक की अनुमति देता है।

return Request.CreateResponse(HttpStatusCode.OK); 

फिर भी, उन त्रुटि संदेश "देखें:

किसी भी मामले में, मैं एक आज़माएं/कैच ब्लॉक में MessageController.cs में पूरे कोड लपेटकर, और इस मूल्य एक अपवाद की परवाह किए बिना लौटने की कोशिश की क्षमा करें, मेरे बॉट कोड में कोई समस्या है "जिसका मूल रूप से मतलब है कि एक अनचाहे अपवाद है।

मैं इस संदेश को उपयोगकर्ताओं को दिखाए जाने से कैसे रोक सकता हूं, या अपवाद पकड़ सकता हूं?

उत्तर

10

संदेश PostUnhandledExceptionToUserTask में उपयोगकर्ता के लिए भेज दिया जाता है सिर्फ इसलिए अपवाद जड़ संवाद ए आप रूट संवाद ए बचने

एक विकल्प से अपवाद बिना क्रिया रोकने के द्वारा इस स्थिति से बचने कर सकते हैं बच निकला है एक जोड़ने के लिए है अलग-अलग रूट संवाद बी जो बस आपके संवाद ए को कॉल करता है और फिर परिणाम को अनदेखा करता है जो ResumeAfter<R> कॉलबैक पर पास हो जाता है।

Chain.DefaultIfException संवाद बी

1

के एक कार्यान्वयन आप आंतरिक रूप से अपवाद को संभालने के लिए बॉट ढांचे के लिए DefaultIfException कार्यक्षमता का उपयोग कर सकते हैं प्रदान करता है। ऐसा लगता है:

await Conversation.SendAsync(
    activity,() => new Dialogs.RootDialog().DefaultIfException() 
); 
संबंधित मुद्दे