C# Bot框架转发类型参数错误
我得到以下消息 尝试使用MS Bot框架示例调用其他对话框时。这是我的代码:C# Bot框架转发类型参数错误,c#,botframework,C#,Botframework,我得到以下消息 尝试使用MS Bot框架示例调用其他对话框时。这是我的代码: 使用系统; 使用系统线程; 使用System.Threading.Tasks; 使用Microsoft.Bot.Builder.Dialogs; 使用Microsoft.Bot.Connector; 名称空间ReadMeBot.Dialogs { [可序列化] 公共类RootDialog:IDialog { 公共任务StartSync(IDialogContext上下文) { Wait(MessageReceived
使用系统;
使用系统线程;
使用System.Threading.Tasks;
使用Microsoft.Bot.Builder.Dialogs;
使用Microsoft.Bot.Connector;
名称空间ReadMeBot.Dialogs
{
[可序列化]
公共类RootDialog:IDialog
{
公共任务StartSync(IDialogContext上下文)
{
Wait(MessageReceivedAsync);
返回Task.CompletedTask;
}
专用异步任务消息ReceivedAsync(IDialogContext上下文,IAwaitable结果)
{
var活动=等待作为活动的结果;
如果(activity!=null&&activity.Text.ToLower()包含(“是什么”))
{
等待
context.Forward(new InternetSearchDialog(),this.ResumeAftInternetSearchDialog,activity,CancellationToken.None);
}
//算点东西让我们回去
int length=(activity.Text??string.Empty).length;
//将我们的回复返回给用户
wait context.PostAsync($“您发送了{activity.Text},长度为{length}个字符。谢谢!”);
Wait(MessageReceivedAsync);
}
InternetSearchDialog(IDialogContext上下文,IAwaitable结果)之后的专用异步任务ResumeAfterInternetSearchDialog
{
}
}
}
由于您正在转发到另一个对话框,因此不需要在此对话框中等待。您需要调用上下文。但请在简历中等待
如果您将代码更改为以下内容,则一切应按预期进行:
[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);
}
}
[可序列化]
公共类RootDialog:IDialog
{
公共任务StartSync(IDialogContext上下文)
{
Wait(MessageReceivedAsync);
返回Task.CompletedTask;
}
专用异步任务消息ReceivedAsync(IDialogContext上下文,IAwaitable结果)
{
var活动=等待作为活动的结果;
如果(activity!=null&&activity.Text.ToLower()包含(“是什么”))
{
等待
context.Forward(new InternetSearchDialog(),this.ResumeAftInternetSearchDialog,activity,CancellationToken.None);
}
其他的
{
//算点东西让我们回去
int length=(activity.Text??string.Empty).length;
//将我们的回复返回给用户
wait context.PostAsync($“您发送了{activity.Text},长度为{length}个字符。谢谢!”);
Wait(MessageReceivedAsync);
}
}
InternetSearchDialog(IDialogContext上下文,IAwaitable结果)之后的专用异步任务ResumeAfterInternetSearchDialog
{
Wait(MessageReceivedAsync);
}
}
嗨,埃里克,谢谢你的评论。但是,上面的代码并没有解决问题。请在您的问题中发布您的InternetSearchDialog。