C# 无法将所选值传递到bot framework V4 C中的主对话框#

C# 无法将所选值传递到bot framework V4 C中的主对话框#,c#,botframework,C#,Botframework,我有一套自适应卡,在机器人加载后显示。在action.submit上,我可以获得用户选择的卡的值,但无法将该值传递到主对话框中的下一步 OnTurnAsync编写了以下代码: public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken)) { await base.OnTurn

我有一套自适应卡,在机器人加载后显示。在action.submit上,我可以获得用户选择的卡的值,但无法将该值传递到主对话框中的下一步

OnTurnAsync编写了以下代码:

public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
    {
        await base.OnTurnAsync(turnContext, cancellationToken);
        var activity = turnContext.Activity;

        if (string.IsNullOrWhiteSpace(activity.Text) && activity.Value != null)
        {
            activity.Text = JsonConvert.SerializeObject(activity.Value);
        }

        // Save any state changes that might have occured during the turn.
        await ConversationState.SaveChangesAsync(turnContext, false, cancellationToken);
        await UserState.SaveChangesAsync(turnContext, false, cancellationToken);
        switch (activity.Text)
        {
            case "{\"choice\":1}":
                break;
            case "{\"choice\":2}":
               // var msg = $"Platform Assistance";
               // await turnContext.SendActivityAsync(MessageFactory.Text(msg), cancellationToken);
                var welcomeCard = CreateAdaptiveCardAttachment();
                var response = CreateResponse(turnContext.Activity, welcomeCard);
                await turnContext.SendActivityAsync(response, cancellationToken);
                //var response = CreateResponse(turnContext.Activity, welcomeCard);
                break;
        }
        await turnContext.SendActivityAsync(activity, cancellationToken);
    }
和在主对话框中

private async Task<DialogTurnResult> HandleResponseAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
    {
        var userResult = stepContext.Result;              

        await stepContext.Context.SendActivityAsync($"INPUT: {stepContext.Result}");
        return await stepContext.NextAsync();
    }
专用异步任务句柄ResponseAsync(WaterWallStepContext stepContext,CancellationToken CancellationToken)
{
var userResult=stepContext.Result;
等待stepContext.Context.SendActivityAsync($“输入:{stepContext.Result}”);
返回wait-stepContext.NextAsync();
}
我希望在显示所有卡片后,我会得到用户选择的选项,这将进一步传递给LUIS intents


我也尝试过使用文本提示,但代码似乎没有进入“HandlerResponseAsync”方法。

您遇到了一些问题

主要的 你这么说太早了:

//保存回合中可能发生的任何状态更改。
等待ConversationState.SaveChangesSync(turnContext,false,cancellationToken);
等待UserState.SaveChangesSync(turnContext,false,cancellationToken);
它们必须是
OnTurnAsync()
中的最后一项。将它们移到最后,用户的响应将进入下一步

附加的 wait turnContext.SendActivityAsync(activity,cancellationToken); 在
OnTurnAsync()
的末尾有这样一个选项,它将使bot中的所有内容看起来都来自用户。删除它就行了

资源 我们刚刚写了一篇博文,你可能会觉得有用


我还写了一个可以用来代替文本/选择提示的。让它在C语言中工作有点棘手,因为有些类是
内部的
/
受保护的
。您需要从
Prompt
更改一些常量,或者使用fork。不推荐。我也有一些使用AdaptiveCardPrompt的。同样,C#也有问题。希望它很快会出现在SDK中,但这仍然是待定的。

嗨,Richardson,我按照你的建议做了,但它仍然没有进入主对话框。还有什么遗漏吗?@user64870您能分享到您的回购协议的链接吗?我使用了你包含的代码并做了上面的更改,它对我来说很好。没有所有代码,很难进一步诊断。嗨,我的代码位置:我做了一些更改,现在不调用对话框。另外,当我发布这个机器人时,卡不会在用户不打招呼的情况下显示,但在emulator中,它可以正常工作。知道为什么吗?请注意:OP和我通过电子邮件联系后续问题。上面的答案解决了发布的问题,但还有其他问题阻止OP让它工作。