在 Bot Framework c# 的表单方法后回复英雄卡
Reply with hero card in after form method in Bot Framework c#
我有一个对话框,我从中开始表单,我想在用户完成表单后显示英雄卡片。我正在使用下面的代码启动表单,并分配 after form 方法。
var startFormDialog = Chain.From(() => FormDialog.FromForm(StartForm.BuildForm, FormOptions.PromptInStart));
context.Call<StartForm>(startFormDialog,AfterMenuForm);
//AfterMenuForm method implementation
private async Task AfterMenuForm(IDialogContext context, IAwaitable<StartForm> result)
{
message = (Activity)context.MakeMessage();
Activity replyToConversation = message.CreateReply("Should go to conversation, with a hero card");
replyToConversation.Recipient = message.From;
replyToConversation.Type = "message";
replyToConversation.Attachments = new List<Attachment>();
//List<CardImage> cardImages = new List<CardImage>();
replyToConversation.AttachmentLayout = "carousel";
List<CardAction> cardButtons = new List<CardAction>();
CardAction plButton = new CardAction()
{
Value = "https://en.wikipedia.org/wiki/Pig_Latin",
Type = "openUrl",
Title = "WikiPedia Page"
};
cardButtons.Add(plButton);
HeroCard plCard = new HeroCard()
{
Title = "I'm a hero card",
Subtitle = "Pig Latin Wikipedia Page",
//Images = cardImages,
Buttons = cardButtons
};
Attachment plAttachment = plCard.ToAttachment();
replyToConversation.Attachments.Add(plAttachment);
await context.PostAsync(replyToConversation);
}
问题是,为了能够向用户发送英雄卡片答案,我需要 activity 对象,而这在 AfterMenuForm 方法中不可用。有没有办法在此方法中显示 activity 对象?
您可以使用 IDialogContext
创建一个新的 IMessageActivity
并发送一个 HeroCard
。
尝试context.MakeMessage();
。收到消息后,您可以使用它来发送卡片。您不需要对该消息执行 CreateReply,这不是必需的。
此外,根据情况,您可能会访问原始内容 activity。在 context.Activity
.
上可用
最后,我不确定你为什么要使用 Chain.From;你应该只使用:
var startFormDialog = FormDialog.FromForm(StartForm.BuildForm, FormOptions.PromptInStart));
context.Call<StartForm>(startFormDialog,AfterMenuForm);
我有一个对话框,我从中开始表单,我想在用户完成表单后显示英雄卡片。我正在使用下面的代码启动表单,并分配 after form 方法。
var startFormDialog = Chain.From(() => FormDialog.FromForm(StartForm.BuildForm, FormOptions.PromptInStart));
context.Call<StartForm>(startFormDialog,AfterMenuForm);
//AfterMenuForm method implementation
private async Task AfterMenuForm(IDialogContext context, IAwaitable<StartForm> result)
{
message = (Activity)context.MakeMessage();
Activity replyToConversation = message.CreateReply("Should go to conversation, with a hero card");
replyToConversation.Recipient = message.From;
replyToConversation.Type = "message";
replyToConversation.Attachments = new List<Attachment>();
//List<CardImage> cardImages = new List<CardImage>();
replyToConversation.AttachmentLayout = "carousel";
List<CardAction> cardButtons = new List<CardAction>();
CardAction plButton = new CardAction()
{
Value = "https://en.wikipedia.org/wiki/Pig_Latin",
Type = "openUrl",
Title = "WikiPedia Page"
};
cardButtons.Add(plButton);
HeroCard plCard = new HeroCard()
{
Title = "I'm a hero card",
Subtitle = "Pig Latin Wikipedia Page",
//Images = cardImages,
Buttons = cardButtons
};
Attachment plAttachment = plCard.ToAttachment();
replyToConversation.Attachments.Add(plAttachment);
await context.PostAsync(replyToConversation);
}
问题是,为了能够向用户发送英雄卡片答案,我需要 activity 对象,而这在 AfterMenuForm 方法中不可用。有没有办法在此方法中显示 activity 对象?
您可以使用 IDialogContext
创建一个新的 IMessageActivity
并发送一个 HeroCard
。
尝试context.MakeMessage();
。收到消息后,您可以使用它来发送卡片。您不需要对该消息执行 CreateReply,这不是必需的。
此外,根据情况,您可能会访问原始内容 activity。在 context.Activity
.
最后,我不确定你为什么要使用 Chain.From;你应该只使用:
var startFormDialog = FormDialog.FromForm(StartForm.BuildForm, FormOptions.PromptInStart));
context.Call<StartForm>(startFormDialog,AfterMenuForm);