Skip to content

fix: resolve Telegram outbound fetch failure on Node 22 (#25676)#25682

Closed
lairtonlelis wants to merge 2 commits intoopenclaw:mainfrom
lairtonlelis:fix/25676-telegram-fetch-regression
Closed

fix: resolve Telegram outbound fetch failure on Node 22 (#25676)#25682
lairtonlelis wants to merge 2 commits intoopenclaw:mainfrom
lairtonlelis:fix/25676-telegram-fetch-regression

Conversation

@lairtonlelis
Copy link
Contributor

@lairtonlelis lairtonlelis commented Feb 24, 2026

Problem

After updating from 2026.2.9 to 2026.2.23, all outbound Telegram API calls fail with TypeError: fetch failed from Node's undici. Inbound polling works fine.

Root Cause

Node 22's built-in globalThis.fetch uses undici's internal Agent whose connect options are frozen at construction time. The existing workaround calls net.setDefaultAutoSelectFamily(true), but this only affects new net.connect() calls — it does not retroactively update the already-initialized internal undici dispatcher. As a result, outbound Telegram API calls go through the stale dispatcher with autoSelectFamily: false, failing on networks with broken IPv6 routing.

Fix

Replace the global undici dispatcher (via setGlobalDispatcher) with a new Agent that explicitly sets autoSelectFamily: true and autoSelectFamilyAttemptTimeout: 300 in its connect options. This ensures all subsequent globalThis.fetch calls inherit the correct IPv4 fallback behavior (Happy Eyeballs).

Changes

  • src/telegram/fetch.ts: After setting net.setDefaultAutoSelectFamily, also call setGlobalDispatcher with an Agent carrying the correct autoSelectFamily setting. Applied once (idempotent guard).
  • src/telegram/fetch.test.ts: Added tests verifying the global dispatcher is set with correct options and is only applied once.

Testing

  • All 516 Telegram tests pass (45 test files)
  • All SSRF dispatcher/pinning tests pass
  • Lint clean

Closes #25676


Posted via Ailton

Greptile Summary

Replaces the global undici dispatcher with an Agent that has autoSelectFamily: true and autoSelectFamilyAttemptTimeout: 300 to fix Telegram outbound fetch failures on Node 22. The fix addresses a critical issue where net.setDefaultAutoSelectFamily() doesn't affect undici's already-initialized internal agent.

  • Added setGlobalDispatcher call with properly configured undici Agent in src/telegram/fetch.ts:42-57
  • Added idempotent guard appliedGlobalDispatcher to ensure dispatcher is only set once
  • Added comprehensive tests for dispatcher configuration and idempotency
  • Fix aligns with existing SSRF pinned dispatcher pattern (both use identical autoSelectFamily settings)

Confidence Score: 5/5

  • Safe to merge - well-tested fix for critical network connectivity issue on Node 22
  • The fix correctly addresses the root cause by replacing the global dispatcher with properly configured settings. The implementation follows existing patterns in the codebase (matches createPinnedDispatcher in src/infra/net/ssrf.ts:332-340), includes comprehensive tests, and has proper idempotent guards. All 516 Telegram tests pass.
  • No files require special attention

Last reviewed commit: 2621873

Node 22's built-in globalThis.fetch uses undici's internal Agent whose
connect options are frozen at construction time. Calling
net.setDefaultAutoSelectFamily(true) after the agent is already created
has no effect on it, causing outbound Telegram API calls to fail with
`TypeError: fetch failed` on networks with broken IPv6 routing.

Fix: replace the global undici dispatcher with a new Agent that has
autoSelectFamily: true and autoSelectFamilyAttemptTimeout: 300 set
explicitly in its connect options. This ensures all subsequent
globalThis.fetch calls use IPv4 fallback via Happy Eyeballs.

Inbound polling was unaffected because grammyjs/runner re-creates
connections on each poll cycle, while outbound send calls hit the
stale internal dispatcher.
@openclaw-barnacle openclaw-barnacle bot added channel: telegram Channel integration: telegram size: S labels Feb 24, 2026
@lairtonlelis lairtonlelis marked this pull request as ready for review February 24, 2026 19:10
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

The inner condition on line 42 checked autoSelectDecision.value !== null,
but this is already guaranteed by the parent condition on line 23.

Simplify to just check !appliedGlobalDispatcher as suggested in review.
steipete added a commit that referenced this pull request Feb 25, 2026
…25682)

Land PR #25682 from @lairtonlelis after maintainer rework:
track dispatcher updates when network decision changes to avoid stale global fetch behavior.

Co-authored-by: Ailton <lairton@telnyx.com>
@steipete
Copy link
Contributor

Landed manually via /landpr flow after maintainer re-review and full local gate.

Validation done:

  • Re-read Telegram fetch wiring (resolveTelegramFetch + bot client injection).
  • Re-checked Node 22/undici behavior and global dispatcher interaction.
  • Ran full gate on landing branch: pnpm lint && pnpm build && pnpm test.

What landed on main:

  • 007807068f0e3900a6f09c5de1eeb61f6bf80346
  • Includes PR intent (undici dispatcher replacement) and adds one correction: dispatcher now updates when decision flips (avoids stale global dispatcher values across config/account changes).
  • Changelog entry added in 2026.2.24 (Unreleased).

Original PR commits reviewed:

  • 2621873253ebac06e8e54fb4f436e59d0d137f5f
  • c969577caf89f95e7b8113881b7dd828dcf29616

Thanks for the report + fix direction, @lairtonlelis.

@steipete steipete closed this Feb 25, 2026
gavinwxx-vybers added a commit to Vybers-AI/openclaw that referenced this pull request Feb 25, 2026
* ui: block svg data image opens and harden tests

* changelog: credit both chat-image fix contributors

* test(ui): reject base64 SVG data URLs

* changelog: include openclaw#25847 in chat image safety entry (openclaw#25847) (thanks @shakkernerd)

* refactor(ios): drop legacy talk payload and keychain fallbacks

* chore: sync plugin versions to 2026.2.24

* chore: refresh lockfile after plugin devDependency cleanup

* fix(config): soften antigravity removal fallout (openclaw#25538)

Land openclaw#25538 by @chilu18 to keep legacy google-antigravity-auth config entries non-fatal after removal (see openclaw#25862).

Co-authored-by: chilu18 <chilu.machona@icloud.com>

* fix(security): lock sandbox tmp media paths to openclaw roots

* docs(security): document openclaw temp-folder boundary

* fix(security): restrict default safe-bin trusted dirs

* fix: enforce local media root checks for attachment hydration

* fix(synology-chat): fail closed empty allowlist

* docs(changelog): add synology-chat allowlist fail-closed note

* fix: harden routing/session isolation for followups and heartbeat

* feat(sandbox): block container namespace joins by default

* refactor(sandbox): centralize network mode policy helpers

* fix(channels,sandbox): land hard breakage cluster from reviewed PR bases

Lands reviewed fixes based on openclaw#25839 (@pewallin), openclaw#25841 (@joshjhall), and openclaw#25737/@25713 (@DennisGoldfinger/@peteragility), with additional hardening + regression tests for queue cleanup and shell script safety.

Fixes openclaw#25836
Fixes openclaw#25840
Fixes openclaw#25824
Fixes openclaw#25868

Co-authored-by: Peter Wallin <pwallin@gmail.com>
Co-authored-by: Joshua Hall <josh@yaplabs.com>
Co-authored-by: Dennis Goldfinger <dennisgoldfinger@gmail.com>
Co-authored-by: peteragility <peteragility@users.noreply.github.com>

* refactor(synology-chat): centralize DM auth and fail fast startup

* test: add routing/session isolation edge-case regressions

* refactor: centralize followup origin routing helpers

* refactor(outbound): centralize attachment media policy

* refactor: harden safe-bin trusted dir diagnostics

* fix(zalo): enforce group sender policy in groups

* docs: update changelog for safe-bin hardening

* test(line): align tmp-root expectation after sandbox hardening

* fix(web-search): reduce provider auto-detect log noise

* test(matrix,discord,sandbox): expand breakage regression coverage

* refactor(matrix,tests): extract helpers and inject send-queue timing

* refactor(zalo): split monitor access and webhook logic

* Gateway/Security: protect /api/channels plugin root

* fix(telegram): block unauthorized DM media downloads

* Security: sanitize inherited host exec env

* Changelog: add entry for exec env sanitization

* fix(security): classify hook sessions case-insensitively

* refactor(outbound): unify attachment hydration flow

* refactor(telegram): simplify DM media auth precheck flow

* fix(automation): harden announce delivery + cron coding profile (openclaw#25813 openclaw#25821 openclaw#25822)

Co-authored-by: Shawn <shenghuikevin@shenghuideMac-mini.local>
Co-authored-by: 不做了睡大觉 <user@example.com>
Co-authored-by: Marcus Widing <widing.marcus@gmail.com>

* security(voice-call): detect Telnyx webhook replay

* Auto-reply: add exact stop trigger for do not do that

* Auto-reply tests: assert exact do not do that behavior

* Gateway tests: cover exact do not do that stop matching

* Telegram tests: route exact do not do that to control lane

* Changelog: note exact do not do that stop trigger

* refactor(tmp): harden temp boundary guardrails

* fix(whatsapp): stop retry loop on non-retryable 440 close

* test(types): fix ts narrowing regressions in followup and matrix queue tests

* fix(onboard): avoid false 'telegram plugin not available' block

* fix: normalize "bedrock" provider ID to "amazon-bedrock"

Add "bedrock" and "aws-bedrock" as aliases for the canonical
"amazon-bedrock" provider ID in normalizeProviderId().

Without this mapping, configuring a model as "bedrock/..." causes
the auth resolution fallback to miss the Bedrock-specific AWS SDK
path, since the fallback check requires normalized === "amazon-bedrock".
This primarily affects the main agent when the explicit auth override
is not preserved through config merging.

Fixes openclaw#15716

* docs(changelog): backfill landed fix PR entries

* fix(security): harden system.run companion command binding

* fix(discord): land proxy/media/reaction/model-picker regressions

Reimplements core Discord fixes from openclaw#25277 openclaw#25523 openclaw#25575 openclaw#25588 openclaw#25731 with expanded tests.

- thread proxy-aware fetch into inbound attachment/sticker downloads
- fetch /gateway/bot via proxy dispatcher before ws connect
- wire statusReactions emojis/timing overrides into controller
- compact model-picker custom_id keys with backward-compatible parsing

Co-authored-by: openperf <openperf@users.noreply.github.com>
Co-authored-by: chilu18 <chilu18@users.noreply.github.com>
Co-authored-by: Yipsh <Yipsh@users.noreply.github.com>
Co-authored-by: lbo728 <lbo728@users.noreply.github.com>
Co-authored-by: s1korrrr <s1korrrr@users.noreply.github.com>

* docs(changelog): add reporter credit for exec companion hardening

* fix(macos): guard voice audio paths with no input device (openclaw#25817)

Co-authored-by: Stefan Förster <103369858+sfo2001@users.noreply.github.com>

* fix(macos): prefer openclaw binary while keeping pnpm fallback (openclaw#25512)

Co-authored-by: Peter Machona <7957943+chilu18@users.noreply.github.com>

* Auth: bypass cooldown tracking for OpenRouter

* Auth: use cooldown helper in explicit profile order

* Tests: cover OpenRouter cooldown display bypass

* Tests: skip OpenRouter failure cooldown persistence

* Tests: keep OpenRouter runnable with legacy cooldown markers

* Tests: preserve OpenRouter explicit auth order under cooldown fields

* Changelog: note OpenRouter cooldown bypass

* Changelog: remove unrelated session entries from PR

* Update CHANGELOG.md

* fix(macos): default voice wake forwarding to webchat (openclaw#25440)

Co-authored-by: Peter Machona <7957943+chilu18@users.noreply.github.com>

* fix(macos): keep Return for IME marked text commit (openclaw#25178)

Co-authored-by: jft0m <9837901+bottotl@users.noreply.github.com>

* fix(security): block env depth-overflow approval bypass

* fix(macos): resolve webchat panel corner clipping (openclaw#22458)

Co-authored-by: apethree <3081182+apethree@users.noreply.github.com>
Co-authored-by: agisilaos <3073709+agisilaos@users.noreply.github.com>

* Agents: trust explicit allowlist refs beyond catalog

* Tests: cover allowlist refs missing from catalog

* Gateway tests: accept allowlisted refs absent from catalog

* Gateway tests: include synthetic allowlist models in models.list

* Changelog: note allowlist stale-catalog model selection fix

* fix(discord): harden voice DAVE receive reliability (openclaw#25861)

Reimplements and consolidates related work:
- openclaw#24339 stale disconnect/destroyed session guards
- openclaw#25312 voice listener cleanup on stop
- openclaw#23036 restore @snazzah/davey runtime dependency

Adds Discord voice DAVE config passthrough, repeated decrypt failure
rejoin recovery, regression tests, docs, and changelog updates.

Co-authored-by: Frank Yang <frank.ekn@gmail.com>
Co-authored-by: Do Cao Hieu <admin@docaohieu.com>

* fix(macos): clean warnings and harden gateway/talk config parsing

* docs(discord): document DAVE defaults and decrypt recovery

* test: bridge discord voice private casts via unknown

* docs(changelog): remove next-release shipping sentence

* refactor(exec): split system.run phases and align ts/swift validator contracts

* fix(windows): skip unreliable dev comparison in fs-safe openVerifiedLocalFile

On Windows, device IDs (dev) returned by handle.stat() and fs.lstat()
may differ even for the same file, causing false-positive 'path-mismatch'
errors when reading local media files.

This fix introduces a statsMatch() helper that:
- Always compares inode (ino) values
- Skips device ID (dev) comparison on Windows where it's unreliable
- Maintains full comparison on Unix platforms

Fixes openclaw#25699

* fix: align windows safe-open file identity checks

* refactor: dedupe exec wrapper denial plan and test setup

* fix: harden iMessage echo dedupe and reasoning suppression (openclaw#25897)

* test(media): add win32 dev=0 local media regression

* refactor: extract iMessage echo cache and unify suppression guards

* test: normalize tmp media path assertion for windows

* fix(render): seed Control UI origin config on first boot

The gateway requires controlUi.allowedOrigins when binding to LAN.
On Render, the persistent disk starts empty with no openclaw.json.
Seed a minimal config with dangerouslyAllowHostHeaderOriginFallback
on first boot (safe behind Render's HTTPS reverse proxy).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore(deps): update dependencies except carbon

* fix(agents): normalize SiliconFlow Pro thinking=off payload (openclaw#25435)

Land PR openclaw#25435 from @Zjianru.
Changelog: add 2026.2.24 fix entry with contributor credit.

Co-authored-by: codez <codezhujr@gmail.com>

* fix(telegram): refresh global undici dispatcher for autoSelectFamily (openclaw#25682)

Land PR openclaw#25682 from @lairtonlelis after maintainer rework:
track dispatcher updates when network decision changes to avoid stale global fetch behavior.

Co-authored-by: Ailton <lairton@telnyx.com>

* fix(synology-chat): land @bmendonca3 fail-closed allowlist follow-up (openclaw#25827)

Carry fail-closed empty-allowlist guard clarity and changelog attribution for PR openclaw#25827.

Co-authored-by: Brian Mendonca <brianmendonca@Brians-MacBook-Air.local>

* fix(agents): reduce billing false positives on long text (openclaw#25680)

Land PR openclaw#25680 from @lairtonlelis.
Retain explicit status/code/http 402 detection for oversized structured payloads.

Co-authored-by: Ailton <lairton@telnyx.com>

* fix(render): add docker entrypoint script for config seeding

The inline shell command in render.yaml's dockerCommand wasn't
reliably creating the seed config. Replace with a proper entrypoint
script that creates a minimal openclaw.json with
dangerouslyAllowHostHeaderOriginFallback on first boot, then starts
the gateway bound to LAN on the PORT env var.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(ui): inherit default model fallbacks in agents overview (openclaw#25729)

Land PR openclaw#25729 from @Suko.
Use shared fallback-resolution helper and add regression coverage for default, override, and explicit-empty cases.

Co-authored-by: suko <miha.sukic@gmail.com>

* fix(heartbeat): default target none and internalize relay prompts

* test(windows): normalize risky-path assertions

---------

Co-authored-by: Shakker <shakkerdroid@gmail.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: chilu18 <chilu.machona@icloud.com>
Co-authored-by: Peter Wallin <pwallin@gmail.com>
Co-authored-by: Joshua Hall <josh@yaplabs.com>
Co-authored-by: Dennis Goldfinger <dennisgoldfinger@gmail.com>
Co-authored-by: peteragility <peteragility@users.noreply.github.com>
Co-authored-by: Brian Mendonca <brianmendonca@Brians-MacBook-Air.local>
Co-authored-by: Shawn <shenghuikevin@shenghuideMac-mini.local>
Co-authored-by: 不做了睡大觉 <user@example.com>
Co-authored-by: Marcus Widing <widing.marcus@gmail.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: Mark Musson <mark@musson.co.za>
Co-authored-by: suko <miha.sukic@gmail.com>
Co-authored-by: Fred White <fwhite13@users.noreply.github.com>
Co-authored-by: openperf <openperf@users.noreply.github.com>
Co-authored-by: chilu18 <chilu18@users.noreply.github.com>
Co-authored-by: Yipsh <Yipsh@users.noreply.github.com>
Co-authored-by: lbo728 <lbo728@users.noreply.github.com>
Co-authored-by: s1korrrr <s1korrrr@users.noreply.github.com>
Co-authored-by: Stefan Förster <103369858+sfo2001@users.noreply.github.com>
Co-authored-by: Peter Machona <7957943+chilu18@users.noreply.github.com>
Co-authored-by: jft0m <9837901+bottotl@users.noreply.github.com>
Co-authored-by: apethree <3081182+apethree@users.noreply.github.com>
Co-authored-by: agisilaos <3073709+agisilaos@users.noreply.github.com>
Co-authored-by: Frank Yang <frank.ekn@gmail.com>
Co-authored-by: Do Cao Hieu <admin@docaohieu.com>
Co-authored-by: Gavin X. Wang <gavinvybers@Gavins-MacBook-Pro.local>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: codez <codezhujr@gmail.com>
Co-authored-by: Ailton <lairton@telnyx.com>
joshavant pushed a commit that referenced this pull request Feb 25, 2026
…25682)

Land PR #25682 from @lairtonlelis after maintainer rework:
track dispatcher updates when network decision changes to avoid stale global fetch behavior.

Co-authored-by: Ailton <lairton@telnyx.com>
margulans pushed a commit to margulans/Neiron-AI-assistant that referenced this pull request Feb 25, 2026
…penclaw#25682)

Land PR openclaw#25682 from @lairtonlelis after maintainer rework:
track dispatcher updates when network decision changes to avoid stale global fetch behavior.

Co-authored-by: Ailton <lairton@telnyx.com>
widingmarcus-cyber added a commit to widingmarcus-cyber/openclaw that referenced this pull request Feb 25, 2026
…penclaw#26207)

The fix for openclaw#25682 replaced the global undici dispatcher with a bare
Agent that ignores HTTP_PROXY/HTTPS_PROXY env vars, breaking all
outbound requests for users behind proxies.

Replace Agent with EnvHttpProxyAgent which inherits the same
autoSelectFamily connect options while also respecting proxy
environment variables.
thebtf pushed a commit to thebtf/openclaw that referenced this pull request Feb 25, 2026
openclaw#25988

- openclaw#26229: replace Agent with EnvHttpProxyAgent in global undici dispatcher
  so HTTP_PROXY/HTTPS_PROXY env vars are respected for all outbound fetch
  calls (regression fix from openclaw#25682 that overwrote proxy-aware dispatcher)

- openclaw#26264: lower text fragment aggregation threshold 4000→3600 chars to
  reliably catch structured content that Telegram splits at ~3800 chars

- openclaw#25988: fail closed group allowlist against DM pairing store — group
  sender checks now use only explicit groupAllowFrom config, not the DM
  pairing store (security: DM-paired senders cannot bypass group allowlist)
widingmarcus-cyber added a commit to widingmarcus-cyber/openclaw that referenced this pull request Feb 25, 2026
…penclaw#26207)

The fix for openclaw#25682 replaced the global undici dispatcher with a bare
Agent that ignores HTTP_PROXY/HTTPS_PROXY env vars, breaking all
outbound requests for users behind proxies.

Replace Agent with EnvHttpProxyAgent which inherits the same
autoSelectFamily connect options while also respecting proxy
environment variables.
widingmarcus-cyber added a commit to widingmarcus-cyber/openclaw that referenced this pull request Feb 25, 2026
…penclaw#26207)

The fix for openclaw#25682 replaced the global undici dispatcher with a bare
Agent that ignores HTTP_PROXY/HTTPS_PROXY env vars, breaking all
outbound requests for users behind proxies.

Replace Agent with EnvHttpProxyAgent which inherits the same
autoSelectFamily connect options while also respecting proxy
environment variables.
Jackson3195 pushed a commit to Jackson3195/openclaw-with-a-personal-touch that referenced this pull request Feb 25, 2026
…penclaw#25682)

Land PR openclaw#25682 from @lairtonlelis after maintainer rework:
track dispatcher updates when network decision changes to avoid stale global fetch behavior.

Co-authored-by: Ailton <lairton@telnyx.com>
MarkShawn2020 added a commit to MarkShawn2020/openclaw that referenced this pull request Feb 25, 2026
… is enabled

Replacing the global dispatcher unconditionally (even with autoSelectFamily=false)
swaps in a bare Agent that discards any configuration the original default dispatcher
carried. This breaks other HTTP clients in the same process — notably LLM provider
fetches (e.g. Anthropic API) which return HTTP 403 after the dispatcher swap.

Only replace the dispatcher when autoSelectFamily is explicitly true, which is the
only case where the workaround is actually needed.

Fixes openclaw#23600
Related: openclaw#25682, openclaw#25676

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
brianleach pushed a commit to brianleach/openclaw that referenced this pull request Feb 26, 2026
…penclaw#25682)

Land PR openclaw#25682 from @lairtonlelis after maintainer rework:
track dispatcher updates when network decision changes to avoid stale global fetch behavior.

Co-authored-by: Ailton <lairton@telnyx.com>
widingmarcus-cyber added a commit to widingmarcus-cyber/openclaw that referenced this pull request Feb 26, 2026
…penclaw#26207)

The fix for openclaw#25682 replaced the global undici dispatcher with a bare
Agent that ignores HTTP_PROXY/HTTPS_PROXY env vars, breaking all
outbound requests for users behind proxies.

Replace Agent with EnvHttpProxyAgent which inherits the same
autoSelectFamily connect options while also respecting proxy
environment variables.
widingmarcus-cyber added a commit to widingmarcus-cyber/openclaw that referenced this pull request Feb 26, 2026
…penclaw#26207)

The fix for openclaw#25682 replaced the global undici dispatcher with a bare
Agent that ignores HTTP_PROXY/HTTPS_PROXY env vars, breaking all
outbound requests for users behind proxies.

Replace Agent with EnvHttpProxyAgent which inherits the same
autoSelectFamily connect options while also respecting proxy
environment variables.
execute008 pushed a commit to execute008/openclaw that referenced this pull request Feb 27, 2026
…penclaw#25682)

Land PR openclaw#25682 from @lairtonlelis after maintainer rework:
track dispatcher updates when network decision changes to avoid stale global fetch behavior.

Co-authored-by: Ailton <lairton@telnyx.com>
r4jiv007 pushed a commit to r4jiv007/openclaw that referenced this pull request Feb 28, 2026
…penclaw#25682)

Land PR openclaw#25682 from @lairtonlelis after maintainer rework:
track dispatcher updates when network decision changes to avoid stale global fetch behavior.

Co-authored-by: Ailton <lairton@telnyx.com>
zooqueen pushed a commit to hanzoai/bot that referenced this pull request Mar 6, 2026
…penclaw#25682)

Land PR openclaw#25682 from @lairtonlelis after maintainer rework:
track dispatcher updates when network decision changes to avoid stale global fetch behavior.

Co-authored-by: Ailton <lairton@telnyx.com>
thebenjaminlee pushed a commit to escape-velocity-ventures/openclaw that referenced this pull request Mar 7, 2026
…penclaw#25682)

Land PR openclaw#25682 from @lairtonlelis after maintainer rework:
track dispatcher updates when network decision changes to avoid stale global fetch behavior.

Co-authored-by: Ailton <lairton@telnyx.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: telegram Channel integration: telegram size: S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2026.2.23 regression: all outbound Telegram API calls fail with TypeError: fetch failed (Node 22 undici)

2 participants