Azure Bot Framework v3:如何在欢迎消息中使用CardAction?
在Azure Bot Framework v3中给欢迎消息添加CardAction
我来帮你搞定这个问题!你现在的欢迎消息是纯文本,要换成带CardAction的卡片其实很容易——因为CardAction是依附于卡片(比如HeroCard、ThumbnailCard)存在的,咱们直接修改HandleSystemMessage里的欢迎逻辑就行。
修改后的完整代码
using System; using System.Linq; using System.Net.Http; using System.Threading.Tasks; using System.Web.Http; using Microsoft.Bot.Connector; public class MessagesController : ApiController { public virtual async Task<HttpResponseMessage> Post([FromBody] Activity activity) { if (activity != null && activity.GetActivityType() == ActivityTypes.Message) { await Conversation.SendAsync(activity, () => new EchoDialog()); } else { await HandleSystemMessage(activity); // 改为async方法适配异步发送逻辑 } return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted); } // 调整为async Task方法,因为内部包含异步操作 private async Task HandleSystemMessage(Activity message) { if (message.Type == ActivityTypes.DeleteUserData) { // 可在此添加删除用户数据的自定义逻辑 } else if (message.Type == ActivityTypes.ConversationUpdate) { // 判断是否是Bot被加入对话的场景 if (message.MembersAdded.Any(o => o.Id == message.Recipient.Id)) { // 1. 创建HeroCard(也可替换为ThumbnailCard等其他卡片类型) var welcomeCard = new HeroCard { Title = "欢迎使用我的Bot!", Subtitle = "点击下方按钮开始互动吧", Buttons = new[] { // 添加ImBack类型的CardAction,点击后向Bot发送指定文本 new CardAction(ActionTypes.ImBack, "开始对话", value: "start"), // 添加OpenUrl类型的CardAction,点击后打开指定链接 new CardAction(ActionTypes.OpenUrl, "查看帮助", value: "https://example.com/help") } }; // 2. 将卡片转换为消息支持的Attachment格式 var attachment = welcomeCard.ToAttachment(); // 3. 创建回复消息并添加卡片附件 var reply = message.CreateReply(); reply.Attachments.Add(attachment); // 4. 异步发送欢迎卡片 ConnectorClient connector = new ConnectorClient(new Uri(message.ServiceUrl)); await connector.Conversations.ReplyToActivityAsync(reply); } } // 可在此添加其他系统消息类型的处理逻辑 } }
关键修改说明
- 把
HandleSystemMessage改为async Task方法,适配异步发送回复的逻辑,避免阻塞。 - 不再发送纯文本回复,而是创建
HeroCard并在Buttons集合中添加CardAction,支持多种动作类型:ImBack:点击按钮后会将value字段的内容作为用户消息发送给Bot,你可以在EchoDialog中监听并处理这个消息。OpenUrl:点击按钮后直接打开指定的外部链接。- 还支持
PostBack、Call等其他动作类型,可根据需求选择。
- 通过
ToAttachment()方法将卡片转换为消息兼容的格式,再添加到回复的Attachments集合中,实现卡片消息的发送。
这样当用户第一次加入对话时,Bot就会发送带有可交互按钮的欢迎卡片,替代原来的纯文本消息啦!
内容的提问来源于stack exchange,提问作者kim
相关产品推荐
相关产品推荐

