2016-09-21 20 views
14

'da "Üzgünüz, benim bot kodum bir sorun yaşıyor" un önlenmesi Azure + Bot Framework + LUIS (LuisDialog aracılığıyla) üzerinde çalışan bir botum var. Microsoft Bot Framework

kullanıcı, kendi Facebook Messenger veya web gömmesinde bu hata mesajını bakın (bot cevaplamak için bir şansı var önce) hızlı bir şekilde iki kez mesaj göndermek için olursa

:

Sorry, my bot code is having an issue.

içinden ayıklarken bot kanal emülatörü, hata bu olduğu görülmektedir:

"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()

yığın izleme uç hatası zaman MessageController.cs bu satırında kökenli gösterir:

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

Bu garip çünkü LUIS'in ücretli bir sürümünü kullanarak saniyede 10 çağrıya izin veriyor.

return Request.CreateResponse(HttpStatusCode.OK); 

Yine, kullanıcılar hata mesajı "bakın

: Her durumda

, ben bir deneme/yakalama bloğuna MessageController.cs bütün kod sarılması ve bir istisna olursa olsun bu değeri dönen çalıştı Üzgünüm, benim bot kodumda bir sorun var "temelde işlenmemiş bir istisna olduğu anlamına gelir.

Bu iletinin kullanıcılara gösterilmesini nasıl önleyebilirim veya özel durumu yakalayabilir miyim? istisna Kök iletişim A.

Bir seçenek kaçmasını istisnalar işlenmeyen önleyerek bu durumu önleyebilirsiniz kök iletişim A. kaçtı çünkü sadece

cevap

10

mesajı eklemek için PostUnhandledExceptionToUserTask kullanıcıya edilir gönderilir Sadece A iletişim kutusunu çağırır ve daha sonra ResumeAfter<R> geri arama geçirilen IAwaitable<R> sonucunu yok sayar farklı kök iletişim B.

Chain.DefaultIfException dahili olarak özel durum işlenecek bot çerçevesi için DefaultIfException işlevini kullanabilirsiniz iletişim B.

1

bir uygulamasını sağlar. Şun gibi görünüyor:

await Conversation.SendAsync(
    activity,() => new Dialogs.RootDialog().DefaultIfException() 
); 
İlgili konular