You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:41:33