Skip to content

Telegram retry regex misses grammY HttpError format — retries never fire for network errors #51525

@JiraiyaETH

Description

@JiraiyaETH

Summary

The Telegram retry runner (createTelegramRetryRunner) is well-built but shouldRetry never fires for the most common transient failure class because the regex doesn't match grammY's HttpError message format.

Environment

  • OpenClaw 2026.3.13
  • Node 22, grammY, undici
  • High-latency path (Malaysia → Amsterdam, ~530ms RTT)

Details

resolveTelegramShouldRetry checks error messages against:

const TELEGRAM_RETRY_RE = /429|timeout|connect|reset|closed|unavailable|temporarily/i;

grammY wraps underlying network errors in HttpError with the message:

Network request for 'sendMessage' failed!

This string contains none of the regex keywords. The actual error codes (ECONNRESET, UND_ERR_CONNECT_TIMEOUT, ETIMEDOUT) are in .cause, but formatErrorMessage only checks the top-level message.

Result: shouldRetry returns false. Retries never fire for network errors despite TELEGRAM_RETRY_DEFAULTS being correctly configured (3 attempts, 400ms base).

Observed log pattern (~40 failures/day)

[telegram] sendMessage failed: Network request for 'sendMessage' failed!
[telegram] block reply failed: HttpError: Network request for 'sendMessage' failed!
[telegram] message processing failed: HttpError: Network request for 'sendMessage' failed!

Suggested fix

Either:

  1. formatErrorMessage should traverse .cause to include nested error codes/messages (cleaner, benefits all retry paths), OR
  2. Add "Network request" to TELEGRAM_RETRY_RE (targeted fix)

Related: #17521 (locked, covers missing retry logic — this issue identifies why the existing retry logic doesn't fire)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions