将变量传递到Microsoft BotBuilder C#.NET Core中的对话框

将变量传递到Microsoft BotBuilder C#.NET Core中的对话框,c#,.net-core,botframework,C#,.net Core,Botframework,我正试图用这个来构建我的机器人 现在的流程是: 用户编写一些东西foo 机器人进入对话框 我一直无法从中获取用户的第一条消息foo。您可以从turnContext获取用户输入,如下所示: string userInput = turnContext.Context.Activity.Text 例如: public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationTo

我正试图用这个来构建我的机器人

现在的流程是:

  • 用户编写一些东西
    foo
  • 机器人进入对话框

  • 我一直无法从中获取用户的第一条消息
    foo

    您可以从
    turnContext
    获取用户输入,如下所示:

    string userInput = turnContext.Context.Activity.Text
    
    例如:

     public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
     {
         string userInput = turnContext.Activity.Text;
     }
    
     private static async Task<DialogTurnResult> TransportStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
            {
                string userInput = string.Empty;
    
                // Options contains the information the waterfall dialog was called with
                if (stepContext.Options != null)
                {
                    userInput = stepContext.Options.ToString();
                }
            }
    
    至于将变量传递给用户档案对话框,可以通过以下方式进行:

    await innerDc.BeginDialogAsync(nameof(DialogFlowDialog), userInput );
    
    BeginDialogAsync接受一个可选参数(对象)传递给正在启动的对话框

    在您的UserProfileDialog中,您可以从stepContext

      public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
            {
    
                // this contains the text message the user sent
                string userInput = turnContext.Activity.Text;
    
                await base.OnTurnAsync(turnContext, cancellationToken);
    
                // Save any state changes that might have occured during the turn.
                await ConversationState.SaveChangesAsync(turnContext, false, cancellationToken);
                await UserState.SaveChangesAsync(turnContext, false, cancellationToken);
            }
    
    例如:

     public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
     {
         string userInput = turnContext.Activity.Text;
     }
    
     private static async Task<DialogTurnResult> TransportStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
            {
                string userInput = string.Empty;
    
                // Options contains the information the waterfall dialog was called with
                if (stepContext.Options != null)
                {
                    userInput = stepContext.Options.ToString();
                }
            }
    

    如果您想让我们帮助您,您应该向我们展示您的代码嗨,奥利,我的代码离示例不远了,您的意思是
    string userInput=turnContext.Activity.Text?所以我把它加进去了,但是我怎样才能把这个变量加进去?@Esbarro检查我编辑的回答,如果这是你需要的,请把它标记为答案!非常感谢你的帮助。由于在使用
    innerDc
    时遇到问题,“CS0103 C#当前上下文中不存在该名称”。谢谢您!我绝对肯定我在提问之前就这么做了,但是由于某种原因,变量在第一步返回了一个空字符串。但现在它起作用了。感谢您的时间和参与!