Botframework 主动式机器人创建PromptDialog。选择

Botframework 主动式机器人创建PromptDialog。选择,botframework,direct-line-botframework,Botframework,Direct Line Botframework,我有一个控制器,从另一个应用程序接收post请求 因此,我能够通过以下操作与添加了bot的用户启动对话: ChannelAccount userAccount = new ChannelAccount(); ChannelAccount botAccount = new ChannelAccount(); IMessageActivity message = Activity.CreateMessageActivity(); userAccount = new ChannelAccount(id

我有一个控制器,从另一个应用程序接收post请求

因此,我能够通过以下操作与添加了bot的用户启动对话:

ChannelAccount userAccount = new ChannelAccount();
ChannelAccount botAccount = new ChannelAccount();
IMessageActivity message = Activity.CreateMessageActivity();
userAccount = new ChannelAccount(id: "a", name: "b");
botAccount = new ChannelAccount(id: "28:...", name: "bot1");
var connector = new ConnectorClient("uriexample");
var conversationId = await connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount);
message.From = botAccount;
message.Recipient = userAccount;
message.Conversation = new ConversationAccount(id: conversationId.Id);
message.ReplyToId = userAccount.Id;
message.Text = "text";
message.Locale = "en-Us";
await connector.Conversations.SendToConversationAsync((Activity)message);
这允许我在我的ApiController中向用户提示消息,而无需用户首先启动与bot的对话。接下来,我通过调用以下命令将此信息发送到另一个类:

 await Conversation.SendAsync(message, () => new Dialogs.NewDialog());
新建对话框:

[Serializable]
    public class NewDialog : IDialog<object>
    {
        public async Task StartAsync(IDialogContext context)
        {
            ChannelAccount userAccount = new ChannelAccount();
            ChannelAccount botAccount = new ChannelAccount();
            IMessageActivity message = Activity.CreateMessageActivity();
            userAccount = new ChannelAccount(id:"a", name: "b");
            botAccount = new ChannelAccount(id: "28:...", name: "bot1");
            var connector = new ConnectorClient("uriexample");
            var conversationId = await connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount);

            PromptOptions<string> options = new PromptOptions<string>("Hello! yes or no?",
                "Not valid",
                "Exceeded",
                true ?
                new List<string>() { AppConstants.YesOption, AppConstants.NoFraudOption, AppConstants.ExitOption, } :
                new List<string>() { AppConstants.YesOption, AppConstants.ExitOption, },
                3);
                PromptDialog.Choice(context, this.OnOptionSelec, options);

         }

         private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
        {
            var message = await result;

            context.Wait(MessageReceivedAsync);
        }

        private async Task OnOptionSelec(IDialogContext context, IAwaitable<string> result)
        {
            try
            {
                string optionSelected = await result;

                switch (optionSelected)
                {
                    case AppConstants.YesOption:
                         context.Call(new YesDialog(), this.ResumeAfterOptionDialog);
                         break;

                    case AppConstants.NoOption:
                         context.Call(new NoDialog(), this.ResumeAfterOptionDialog);
                         break;

                    case AppConstants.ExitOption:
                         context.Call(new ExitDialog(), this.ResumeAfterOptionDialog);
                         break;
                }
            }
            catch (TooManyAttemptsException)
            {
            }
        }
    }
}

我不明白你为什么在初始化对话时包含IDialogs?顺便说一句:当您创建对话时,您应该有如下内容:
var userAccount=newchannelaccount(toId,toName);var botAccount=新的ChannelAccount(fromId,fromName)因为有一个外部应用程序想要连接到我的bot,并且bot将广播给多个用户。对于该请求,我必须向用户提示选项。我使用IDialogs是因为在收到来自另一个应用程序的请求后,我希望将对话作为正常的机器人流程进行处理。请更好地解释流程您向用户发送了什么消息?您正在向API控制器发送消息;不适合用户。我猜你的意思是你过去做过这件事。我认为发送一个即时选择是不可能的。您必须发送消息,让用户进行交互,然后发送提示选择。在代码中,您只是创建对话,但也没有向其发送消息
Microsoft.Rest.ValidationException: 'ReplyToId' cannot be null.
   at Microsoft.Bot.Connector.ConversationsExtensions.ReplyToActivityAsync(IConversations operations, Activity activity, CancellationToken cancellationToken)