C# 如何在MicrosoftBot框架中不使用PromptDialog提示用户
我有以下路易斯意图的实现-C# 如何在MicrosoftBot框架中不使用PromptDialog提示用户,c#,botframework,azure-language-understanding,C#,Botframework,Azure Language Understanding,我有以下路易斯意图的实现- [LuisIntent("MyIntent")] public async Task MyIntent(IDialogContext context, IAwaitable<IMessageActivity> res, LuisResult result) { var message = await res; try { await context.PostAs
[LuisIntent("MyIntent")]
public async Task MyIntent(IDialogContext context, IAwaitable<IMessageActivity> res, LuisResult result)
{
var message = await res;
try
{
await context.PostAsync("I see that you have below options <br/> 1. Do first task <br/> 2. Do second task <br/> 3. Do third task ");
PromptDialog.Text(context, taskdoer, "You can ask me like - <br/>Do task 2<br/>or simply enter 2");
}
catch (Exception e)
{
await context.PostAsync("Error is <br/> " + e.ToString());
context.Wait(MessageReceived);
}
}
[LuisIntent(“我的意图”)]
公共异步任务MyIntent(IDialogContext上下文、IAwaitable res、LuisResult结果)
{
var消息=等待res;
尝试
{
wait context.PostAsync(“我发现您有以下选项
1.执行第一个任务
2.执行第二个任务
3.执行第三个任务”);
Text(上下文,taskdoer,“您可以像-
执行任务2
或简单地输入2这样问我”);
}
捕获(例外e)
{
wait context.PostAsync(“错误为
”+e.ToString());
Wait(MessageReceived);
}
}
以及taskdoer的定义-
private async Task taskdoer(IDialogContext context, IAwaitable<string> result)
{
string strTaskNumber = await result;
if (strTaskNumber == "2")
{
await context.PostAsync("So, you have entered " + strTaskNumber);
await context.PostAsync("This is Task 2");
context.Wait(MessageReceived);
}
if (strTaskNumber == "3")
{
await context.PostAsync("So, you have entered " + strTaskNumber);
await context.PostAsync("This is Task 3");
context.Wait(MessageReceived);
}
}
专用异步任务执行器(IDialogContext上下文,IAwaitable结果)
{
字符串strTaskNumber=等待结果;
如果(strTaskNumber==“2”)
{
wait context.PostAsync(“因此,您输入了”+strTaskNumber);
wait context.PostAsync(“这是任务2”);
Wait(MessageReceived);
}
如果(strTaskNumber==“3”)
{
wait context.PostAsync(“因此,您输入了”+strTaskNumber);
wait context.PostAsync(“这是任务3”);
Wait(MessageReceived);
}
}
我想实现的是,在不使用新方法taskdoer的情况下,我如何在MyIntent方法本身中实现taskdoer逻辑,而在taskdoer中使用用户提示输入?
是否有任何方法可以在不使用Microsoft bot中的PromptDialog的情况下提示用户?您无法以您所看到的方式实现它。如果您需要用户的输入,则必须始终使用新方法对响应进行操作 您可以尝试使用匿名方法,尽管您仍然拥有一个方法,并通过一些技巧将其置于相同的范围内。这可能行不通
PromptDialog.Text(context, async (IDialogContext ctx, IAwaitable<string> resume) =>
{
// your magic here
}, "text");
PromptDialog.Text(上下文,异步(IDialogContext ctx,IAwaitable resume)=>
{
//你的魔法在这里
}“文本”);
如果您不想在intent方法中使用提示符
,另一种选择是:
提示符
,而是执行上下文.PostAsync
向用户显示问题上下文。等待
等待用户输入。您可以等待一个新方法(应该有两个参数,IDialogContext
和IAwaitable
),或者您可以使用从LUIS
接收的消息,覆盖它并在那里添加一些逻辑,以知道消息什么时候不应该发出LUIS
,并且您应该执行Doer
逻辑。我建议你有一个单独的方法我很好奇为什么您不想使用
提示符
。您不能按照您所看到的方式实现它。如果您需要用户的输入,则必须始终使用新方法对响应进行操作
您可以尝试使用匿名方法,尽管您仍然拥有一个方法,并通过一些技巧将其置于相同的范围内。这可能行不通
PromptDialog.Text(context, async (IDialogContext ctx, IAwaitable<string> resume) =>
{
// your magic here
}, "text");
PromptDialog.Text(上下文,异步(IDialogContext ctx,IAwaitable resume)=>
{
//你的魔法在这里
}“文本”);
如果您不想在intent方法中使用提示符
,另一种选择是:
提示符
,而是执行上下文.PostAsync
向用户显示问题上下文。等待
等待用户输入。您可以等待一个新方法(应该有两个参数,IDialogContext
和IAwaitable
),或者您可以使用从LUIS
接收的消息,覆盖它并在那里添加一些逻辑,以知道消息什么时候不应该发出LUIS
,并且您应该执行Doer
逻辑。我建议你有一个单独的方法提示符