From d1e81368364f77cd8e9bd7777dfbef77bcbc83e6 Mon Sep 17 00:00:00 2001 From: zhang fugui Date: Sat, 28 Feb 2026 19:49:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=A3=9E=E4=B9=A6=E5=8D=A1?= =?UTF-8?q?=E7=89=87=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 支持飞书卡片消息 --- pkg/channels/feishu/feishu_64.go | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/pkg/channels/feishu/feishu_64.go b/pkg/channels/feishu/feishu_64.go index 1db1bf669..d84398cc5 100644 --- a/pkg/channels/feishu/feishu_64.go +++ b/pkg/channels/feishu/feishu_64.go @@ -32,6 +32,15 @@ type FeishuChannel struct { cancel context.CancelFunc } +type InteractiveMarkdownContent struct { + Elements []CardElement `json:"elements"` +} + +type CardElement struct { + Tag string `json:"tag"` + Content string `json:"content"` +} + func NewFeishuChannel(cfg config.FeishuConfig, bus *bus.MessageBus) (*FeishuChannel, error) { base := channels.NewBaseChannel("feishu", cfg, bus, cfg.AllowFrom, channels.WithGroupTrigger(cfg.GroupTrigger), @@ -102,17 +111,23 @@ func (c *FeishuChannel) Send(ctx context.Context, msg bus.OutboundMessage) error return fmt.Errorf("chat ID is empty") } - payload, err := json.Marshal(map[string]string{"text": msg.Content}) + var element CardElement + element.Tag = "markdown" + element.Content = msg.Content + var cardContent InteractiveMarkdownContent + cardContent.Elements = []CardElement{element} + // 将cardContent 序列化为JSON字符串 + cardContentJSON, err := json.Marshal(cardContent) if err != nil { - return fmt.Errorf("failed to marshal feishu content: %w", err) + return fmt.Errorf("failed to marshal feishu card content: %w", err) } req := larkim.NewCreateMessageReqBuilder(). ReceiveIdType(larkim.ReceiveIdTypeChatId). Body(larkim.NewCreateMessageReqBodyBuilder(). ReceiveId(msg.ChatID). - MsgType(larkim.MsgTypeText). - Content(string(payload)). + MsgType(larkim.MsgTypeInteractive). + Content(string(cardContentJSON)). Uuid(fmt.Sprintf("picoclaw-%d", time.Now().UnixNano())). Build()). Build()