[英]Add Card attachment to message using Microsoft Bot Framework
Problem: 问题:
I am having trouble doing attachment within in a LUIS Intent task. 我在执行LUIS Intent任务时遇到麻烦。
Goal 目标
Code 码
Where my card should be displayed from 我的卡应该从哪里显示
[LuisIntent("None")]
public async Task NoneHandler(IDialogContext context, LuisResult result) {
string worriedFace = "\U0001F61F";
string smilingFace = "\U0001F642";
await context.PostAsync("I'm sorry, I didn't get that " + worriedFace + '.');
await context.PostAsync("Here are some things I know how to talk about!" + smilingFace);
var message = context.MakeMessage();
var attachment = new CardDialog().ReceiptCard();
message.Attachments.Add(attachment);
await context.PostAsync(message);
}
Card Class of the View object I'ved created that I am trying to display. 我创建的要显示的View对象的Card Class。
namespace LUISBankingBot.Views
{
using System.Collections.Generic;
using Microsoft.Bot.Connector;
using Microsoft.Bot.Builder.Dialogs;
using System;
using System.Threading.Tasks;
public class CardDialog : IDialog<object>
{
public Task StartAsync(IDialogContext context)
{
throw new NotImplementedException();
}
public Attachment ReceiptCard()
{
var receiptCard = new ReceiptCard
{
Title = "John Doe",
Facts = new List<Fact> { new Fact("Order Number", "1234"), new Fact("Payment Method", "VISA 5555-****") },
Items = new List<ReceiptItem>
{
new ReceiptItem("Data Transfer", price: "$ 38.45", quantity: "368", image: new CardImage(url: "https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png")),
new ReceiptItem("App Service", price: "$ 45.00", quantity: "720", image: new CardImage(url: "https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png")),
},
Tax = "$ 7.50",
Total = "$ 90.95",
Buttons = new List<CardAction>
{
new CardAction(
ActionTypes.OpenUrl,
"More information",
"https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/images/offer-icon-freetrial.png",
"https://azure.microsoft.com/en-us/pricing/")
}
};
return receiptCard.ToAttachment();
}
}
}
A couple things. 几件事。 First, you are probably getting a null ref exception when you are trying to add the attachment as the attachments array hasn't been initialized yet. 首先,由于附件数组尚未初始化,当您尝试添加附件时,可能会收到null ref异常。
message.Attachments = new List<Attachment>();
Also, you don't need to create the CardDialog. 另外,您无需创建CardDialog。 Here's an example that works: 这是一个有效的示例:
[LuisIntent("None")]
public async Task NoneHandler(IDialogContext context, LuisResult result)
{
string worriedFace = "\U0001F61F";
string smilingFace = "\U0001F642";
await context.PostAsync("I'm sorry, I didn't get that " + worriedFace + '.');
await context.PostAsync("Here are some things I know how to talk about!" + smilingFace);
var message = context.MakeMessage();
var receiptCard = new ReceiptCard
{
Title = "John Doe",
Facts = new List<Fact> { new Fact("Order Number", "1234"), new Fact("Payment Method", "VISA 5555-****") },
Items = new List<ReceiptItem>
{
new ReceiptItem("Data Transfer", price: "$ 38.45", quantity: "368", image: new CardImage(url: "https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png")),
new ReceiptItem("App Service", price: "$ 45.00", quantity: "720", image: new CardImage(url: "https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png")),
},
Tax = "$ 7.50",
Total = "$ 90.95",
Buttons = new List<CardAction>
{
new CardAction(
ActionTypes.OpenUrl,
"More information",
"https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png",
"https://azure.microsoft.com/en-us/pricing/")
}
};
message.Attachments = new List<Attachment>();
message.Attachments.Add(receiptCard.ToAttachment());
await context.PostAsync(message);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.