![](/img/trans.png)
[英]How to forward from RootDialog to LuisDialog in Bot Framework
[英]Bot Framework Forward Type Arguments Error
嘗試使用MS Bot Framework Example調用其他對話框時,出現以下錯誤 。 這是我的代碼:
using System; using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Builder.Dialogs; using Microsoft.Bot.Connector; namespace ReadMeBot.Dialogs { [Serializable] public class RootDialog : IDialog<object> { public Task StartAsync(IDialogContext context) { context.Wait(MessageReceivedAsync); return Task.CompletedTask; } private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result) { var activity = await result as Activity; if (activity != null && activity.Text.ToLower().Contains("what is")) { await context.Forward(new InternetSearchDialog(), this.ResumeAfterInternetSearchDialog, activity, CancellationToken.None); } // calculate something for us to return int length = (activity.Text ?? string.Empty).Length; // return our reply to the user await context.PostAsync($"You sent {activity.Text} which was {length} characters. Thank you!"); context.Wait(MessageReceivedAsync); } private async Task ResumeAfterInternetSearchDialog(IDialogContext context, IAwaitable<string> result) { } } }
我該如何解決? 我四處搜尋,似乎沒有人遇到這個問題。 我究竟做錯了什么?
由於您要轉發到另一個對話框,因此無需在此對話框中等待。 您將要調用context.Wait在簡歷中。
如果將代碼更改為以下內容,則事情應該會按預期進行:
[Serializable]
public class RootDialog : IDialog<object>
{
public Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
return Task.CompletedTask;
}
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
var activity = await result as Activity;
if (activity != null && activity.Text.ToLower().Contains("what is"))
{
await
context.Forward(new InternetSearchDialog(), this.ResumeAfterInternetSearchDialog, activity, CancellationToken.None);
}
else
{
// calculate something for us to return
int length = (activity.Text ?? string.Empty).Length;
// return our reply to the user
await context.PostAsync($"You sent {activity.Text} which was {length} characters. Thank you!");
context.Wait(MessageReceivedAsync);
}
}
private async Task ResumeAfterInternetSearchDialog(IDialogContext context, IAwaitable<string> result)
{
context.Wait(MessageReceivedAsync);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.