chenhg5/cc-connect · error

%s: get message api call: %w

Error message

%s: get message api call: %w

What it means

Feishu message-recall check wraps the lark SDK Im.Message.Get transport error inside the transient-retry and fresh-token retry layers; fires when the API call keeps failing at transport level (network or token problems).

Source

Thrown at platform/feishu/feishu.go:1145

	if p.isMessageRecalled(messageID) {
		return true, nil
	}
	if p.client == nil {
		return false, fmt.Errorf("%s: client not initialized", p.tag())
	}

	req := larkim.NewGetMessageReqBuilder().
		MessageId(messageID).
		UserIdType(larkim.UserIdTypeGetMessageOpenId).
		Build()

	var resp *larkim.GetMessageResp
	if err := p.withTransientRetry(ctx, "get message", func() error {
		return p.withFreshTenantAccessTokenRetry(ctx, "get message", func(client *lark.Client, options ...larkcore.RequestOptionFunc) error {
			var err error
			resp, err = client.Im.Message.Get(ctx, req, options...)
			if err != nil {
				return fmt.Errorf("%s: get message api call: %w", p.tag(), err)
			}
			if !resp.Success() {
				return fmt.Errorf("%s: get message failed code=%d msg=%s", p.tag(), resp.Code, resp.Msg)
			}
			return nil
		})
	}); err != nil {
		if resp != nil && isMessageWithdrawnCode(resp.Code, resp.Msg) {
			p.markMessageRecalled(messageID)
			return true, nil
		}
		if isMessageWithdrawnError(err) {
			p.markMessageRecalled(messageID)
			return true, nil
		}
		return false, err
	}

View on GitHub (pinned to 4000b2338a)

Solutions

  1. Wait for the built-in retries to absorb transient errors
  2. Verify app credentials if token refresh keeps failing
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at platform/feishu/feishu.go:1145 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of chenhg5/cc-connect@4000b2338a (2026-09-06). Data as JSON: /api/errors/7fce9c4f501b9fef. Report an issue: GitHub.