diff --git a/pkg/channels/feishu/feishu_64.go b/pkg/channels/feishu/feishu_64.go index ac10504ea..5be698cb5 100644 --- a/pkg/channels/feishu/feishu_64.go +++ b/pkg/channels/feishu/feishu_64.go @@ -469,6 +469,13 @@ func (c *FeishuChannel) handleMessageReceive(ctx context.Context, event *larkim. content = "[empty message]" } + if replyTargetID(message) != "" || stringValue(message.ThreadId) != "" { + content, mediaRefs = c.prependReplyContext(ctx, message, chatID, content, mediaRefs) + } + if content == "" { + content = "[empty message]" + } + logger.InfoCF("feishu", "Feishu message received", map[string]any{ "sender_id": senderID, "chat_id": chatID, diff --git a/pkg/channels/feishu/feishu_reply.go b/pkg/channels/feishu/feishu_reply.go index 98dd89690..22dfe3e87 100644 --- a/pkg/channels/feishu/feishu_reply.go +++ b/pkg/channels/feishu/feishu_reply.go @@ -147,7 +147,8 @@ func (c *FeishuChannel) fetchMessageByID(ctx context.Context, messageID string) if resp.Data == nil || len(resp.Data.Items) == 0 || resp.Data.Items[0] == nil { return nil, fmt.Errorf("feishu get message: empty response") } - + // Items[0] contains the target message - the Feishu API returns a list + // but we request a single message by ID, so the list always has at most one item. msg := resp.Data.Items[0] c.messageCache.Store(messageID, &cachedMessage{msg: msg, expiry: time.Now().Add(messageCacheTTL)}) return msg, nil