C# 如何在`对话框中使用卡片`

C# 如何在`对话框中使用卡片`,c#,bots,botframework,C#,Bots,Botframework,我正在尝试使用fluentapi创建一个简单的流。但我不想使用纯文本,而是想使用丰富的视觉组件。这里有一个例子 public async Task<HttpResponseMessage> Post([FromBody]Activity activity) { var yn = Chain .PostToChain() .Select(m => CreateYesNoPrompt(activity)

我正在尝试使用fluentapi创建一个简单的流。但我不想使用纯文本,而是想使用丰富的视觉组件。这里有一个例子

    public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
    {
        var yn = Chain
            .PostToChain()
            .Select(m => CreateYesNoPrompt(activity)) //This is a dialog which should provide some buttons to the user
            .PostToUser()
            .WaitToBot()
            .Select(x => x.Text)
            .Switch
            (
                Chain.Case
                (
                    s => s == "S",
                    new ContextualSelector<string, IDialog<string>>((context, item) => Chain.Return("Yes"))
                ),
                Chain.Default<string, IDialog<string>>((context, text) => Chain.Return("No"))
            )
            .Unwrap()
            .PostToUser();

        await Conversation.SendAsync(activity, () => yn);

        return Request.CreateResponse(HttpStatusCode.OK);
    }


    private static Activity CreateYesNoPrompt(Activity activity)
    {
        var reply = activity.CreateReply();

        var ybutton = new CardAction(type: "postBack", title: "Yes", value: "S");
        var nbutton = new CardAction(type: "postBack", title: "No", value: "N");

        var buttons = new List<CardAction>() { ybutton, nbutton };

        var card = new HeroCard("Would you like to start an order?", "Subtitle", buttons: buttons);

        reply.Attachments = new List<Attachment> { card.ToAttachment() };

        return reply;
    }
公共异步任务发布([FromBody]活动)
{
var yn=链
.PostToChain()
.Select(m=>CreateYesNoPrompt(activity))//这是一个对话框,应该为用户提供一些按钮
.PostToUser()
.WaitToBot()
.选择(x=>x.Text)
转换
(
链条箱
(
s=>s==“s”,
新上下文选择器((上下文,项)=>Chain.Return(“是”))
),
默认值((上下文,文本)=>Chain.Return(“否”))
)
.Unwrap()
.PostToUser();
等待对话。sendaync(活动,()=>yn);
返回Request.CreateResponse(HttpStatusCode.OK);
}
私有静态活动CreateYesNoPrompt(活动活动)
{
var reply=activity.CreateReply();
var ybutton=newcardaction(类型:“postBack”,标题:“Yes”,值:“S”);
var nbutton=新卡片操作(类型:“回发”,标题:“否”,值:“N”);
var buttons=new List(){ybutton,nbutton};
var card=新HeroCard(“您想开始订单吗?”,“副标题”,按钮:按钮);
reply.Attachments=新列表{card.ToAttachment()};
回复;
}
bot输出的不是预期的输出,而是
Microsoft.bot.Connector.Activity
,它是
Activity
对象的
ToString()
返回


如何在对话框中使用卡片?

当传递对话框上下文时,显示卡片:

    private static Activity ShowButtons(IDialogContext context, string strText)
{
    // Create a reply Activity
    Activity replyToConversation = (Activity)context.MakeMessage();
    replyToConversation.Text = strText;
    replyToConversation.Recipient = replyToConversation.Recipient;
    replyToConversation.Type = "message";
    // Call the CreateButtons utility method 
    // that will create 5 buttons to put on the Here Card
    List<CardAction> cardButtons = CreateButtons();
    // Create a Hero Card and add the buttons 
    HeroCard plCard = new HeroCard()
    {
        Buttons = cardButtons
    };
    // Create an Attachment
    // set the AttachmentLayout as 'list'
    Attachment plAttachment = plCard.ToAttachment();
    replyToConversation.Attachments.Add(plAttachment);
    replyToConversation.AttachmentLayout = "list";
    // Return the reply to the calling method
    return replyToConversation;
}
私有静态活动显示按钮(IDialogContext上下文,字符串strText)
{
//创建回复活动
Activity replyToConversation=(Activity)context.MakeMessage();
replyToConversation.Text=strText;
replyToConversation.Recipient=replyToConversation.Recipient;
replyToConversation.Type=“message”;
//调用CreateButtons实用程序方法
//这将创建5个按钮放在Here卡上
列表cardButtons=CreateButtons();
//创建英雄卡并添加按钮
HeroCard plCard=新HeroCard()
{
按钮=卡片按钮
};
//创建附件
//将AttachmentLayout设置为“列表”
附件plAttachment=plCard.ToAttachment();
replyToConversation.Attachments.Add(拼盘);
replyToConversation.AttachmentLayout=“列表”;
//将应答返回给调用方法
回复对话;
}
见: