私は4つのダイアログを持っていますが、特定の条件が満たされた場合はそれぞれが子として生成されます。 私がローカルでテストすると、すべてうまく動作しますが、私が紺碧にパブリッシュすると、うまく動作しません。 は、私は一般的なエラーが出る:Microsoft Bot Frameworkの終了ダイアログと親を破棄します
Sorry, my bot code is having an issue.
私は、問題がどこにあるか、私が発見したと信じていたので、私はクライアントにメッセージを投稿してから、すべてを終了します。 私はこの方法を持っている:
/// <summary>
/// Gets our products
/// </summary>
/// <returns></returns>
private async Task<List<ProductResponseModel>> GetCurrentProducts(IDialogContext context)
{
try
{
// If we don't have any products, get them
if (_products == null)
_products = await _productProvider.ListAsync();
} catch (Exception ex)
{
// Throw our error
await context.PostAsync(ex.Message);
// Exit our dialog
await ResumeAfter(context, null);
}
// Return our filtered products
return _products;
}
/// <summary>
/// When the child dialog has completed, mark this as done
/// </summary>
/// <param name="context">The current context</param>
/// <param name="result">The result object</param>
/// <returns></returns>
private async Task ResumeAfter(IDialogContext context, IAwaitable<object> result) => context.Done<IMessageActivity>(null);
エラーがある場合、それはユーザーにエラーメッセージを投稿する必要があり、それはcontext.Done
を呼び出しResumeAfterを起動します。私はそれが現在のダイアログと他のすべてのものを終了すべきだと思う。これは正しいですか?あるいは、私がそれをやっていなければならない別の方法があります。すべてのダイアログが実装されていますIDialog<object>
try catchブロックで商品を返すことはできません。なぜなら、(context.Failを使用していても)すべてのコードパスが結果を返すとは限らないからです。それ以外は、あなたが提案したものはすべて素晴らしいものでした。 – r3plica