From b35379087ed1fdfa95c8d27524241a34cd381e6c Mon Sep 17 00:00:00 2001 From: ywj <138745068+yangwenjie1231@users.noreply.github.com> Date: Fri, 20 Mar 2026 11:42:02 +0800 Subject: [PATCH] fix(feishu): keep interactive card content as valid JSON --- pkg/channels/feishu/feishu_64.go | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/pkg/channels/feishu/feishu_64.go b/pkg/channels/feishu/feishu_64.go index 334076a8c..63a41add8 100644 --- a/pkg/channels/feishu/feishu_64.go +++ b/pkg/channels/feishu/feishu_64.go @@ -373,22 +373,18 @@ func (c *FeishuChannel) handleMessageReceive(ctx context.Context, event *larkim. mediaRefs = c.downloadInboundMedia(ctx, chatID, messageID, messageType, rawContent, store) } - // Append media tags to content (like Telegram does) - content = appendMediaTags(content, messageType, mediaRefs) - - // For interactive cards, append external image URLs directly for LLM + // For interactive cards, pass external image URLs via media refs. + // Keep content as valid raw JSON for downstream parsing. if messageType == larkim.MsgTypeInteractive { _, externalURLs := extractCardImageKeys(rawContent) if len(externalURLs) > 0 { - urlTags := "\n[external images:" - for _, u := range externalURLs { - urlTags += " " + u - } - urlTags += "]" - content += urlTags + mediaRefs = append(mediaRefs, externalURLs...) } } + // Append media tags to content (like Telegram does) + content = appendMediaTags(content, messageType, mediaRefs) + if content == "" { content = "[empty message]" }