openclaw - 💡(How to fix) Fix Recurring: Telegram + Slack channels silently fail — grammy/@grammyjs/* and @slack/web-api missing from node_modules (regression of #75320, #76198, #69831, #70137)

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Same shape as #75320 / #76198 / #69831 / #75506 / #70137 (all closed): the Telegram channel silently fails to load because grammy + the @grammyjs/* runtime peers aren't present in OpenClaw's node_modules. Reproduced today on a fresh-ish install of [email protected] (npm-global) — alerts had been silently dead for ~5 days before discovery, since the only signal is buried in gateway.err.log.

Error Message

[gateway] [plugins] telegram failed to load from /opt/homebrew/lib/node_modules/openclaw/dist/extensions/telegram/index.js: Error: Cannot find module 'grammy' [telegram] [default] channel exited: Cannot find package '@grammyjs/runner' imported from .../monitor-polling.runtime-.js [telegram] [default] channel exited: Cannot find package '@grammyjs/transformer-throttler' imported from .../bot-.js

Root Cause

Same shape as #75320 / #76198 / #69831 / #75506 / #70137 (all closed): the Telegram channel silently fails to load because grammy + the @grammyjs/* runtime peers aren't present in OpenClaw's node_modules. Reproduced today on a fresh-ish install of [email protected] (npm-global) — alerts had been silently dead for ~5 days before discovery, since the only signal is buried in gateway.err.log.

Fix Action

Workaround

cd /opt/homebrew/lib/node_modules/openclaw
npm install --no-save --legacy-peer-deps \
  grammy @grammyjs/runner @grammyjs/transformer-throttler @grammyjs/types @slack/web-api
pkill -f openclaw-gateway && nohup openclaw-gateway &

After this the gateway logs [telegram] [default] starting provider (@<bot_username>) and outbound + inbound work as expected.

Code Example

# fresh npm global install
npm i -g openclaw@2026.4.2
# (existing ~/.openclaw config with channels.telegram.enabled = true)
openclaw-gateway
# tail ~/.openclaw/logs/gateway.err.log

---

[gateway] [plugins] telegram failed to load from /opt/homebrew/lib/node_modules/openclaw/dist/extensions/telegram/index.js: Error: Cannot find module 'grammy'
[telegram] [default] channel exited: Cannot find package '@grammyjs/runner' imported from .../monitor-polling.runtime-*.js
[telegram] [default] channel exited: Cannot find package '@grammyjs/transformer-throttler' imported from .../bot-*.js

---

cd /opt/homebrew/lib/node_modules/openclaw
npm install --no-save --legacy-peer-deps \
  grammy @grammyjs/runner @grammyjs/transformer-throttler @grammyjs/types @slack/web-api
pkill -f openclaw-gateway && nohup openclaw-gateway &

---

cd $(mktemp -d) && npm pack openclaw && npm i -g openclaw-*.tgz
node -e "require('/opt/homebrew/lib/node_modules/openclaw/dist/extensions/telegram/index.js')"
RAW_BUFFERClick to expand / collapse

Bug type

Regression (worked before, now fails) — recurring packaging issue

Summary

Same shape as #75320 / #76198 / #69831 / #75506 / #70137 (all closed): the Telegram channel silently fails to load because grammy + the @grammyjs/* runtime peers aren't present in OpenClaw's node_modules. Reproduced today on a fresh-ish install of [email protected] (npm-global) — alerts had been silently dead for ~5 days before discovery, since the only signal is buried in gateway.err.log.

Steps to reproduce

# fresh npm global install
npm i -g [email protected]
# (existing ~/.openclaw config with channels.telegram.enabled = true)
openclaw-gateway
# tail ~/.openclaw/logs/gateway.err.log

Actual behavior

Gateway boots, but Telegram channel never comes up. Repeating errors every retry:

[gateway] [plugins] telegram failed to load from /opt/homebrew/lib/node_modules/openclaw/dist/extensions/telegram/index.js: Error: Cannot find module 'grammy'
[telegram] [default] channel exited: Cannot find package '@grammyjs/runner' imported from .../monitor-polling.runtime-*.js
[telegram] [default] channel exited: Cannot find package '@grammyjs/transformer-throttler' imported from .../bot-*.js

Slack has the same shape: Cannot find module '@slack/web-api'.

The bot itself responds to getMe from the Telegram API directly — config is fine. The channel can't initialize because the runtime imports fail before it ever calls the API.

Workaround

cd /opt/homebrew/lib/node_modules/openclaw
npm install --no-save --legacy-peer-deps \
  grammy @grammyjs/runner @grammyjs/transformer-throttler @grammyjs/types @slack/web-api
pkill -f openclaw-gateway && nohup openclaw-gateway &

After this the gateway logs [telegram] [default] starting provider (@<bot_username>) and outbound + inbound work as expected.

Expected behavior

The Telegram and Slack channel runtimes should not import packages that aren't either (a) declared in openclaw/package.json so they install transitively, or (b) bundled into the dist build, or (c) listed in a runtime-deps manifest the installer hydrates post-install.

Why this keeps reproducing

The closed issues above show this bug has been "fixed" at least 5 times since April. Each fix appears to address a single missing dep (e.g. #75320 fixes grammy/runner/throttler) but a subsequent release reintroduces the same shape with the same or different deps. There doesn't appear to be a regression test that asserts every from '...' import in dist/extensions/**/*.js resolves against the published install. A one-line CI check like:

cd $(mktemp -d) && npm pack openclaw && npm i -g openclaw-*.tgz
node -e "require('/opt/homebrew/lib/node_modules/openclaw/dist/extensions/telegram/index.js')"

…would have caught every one of these regressions at publish time.

OpenClaw version

2026.4.2 (d74a122) — npm-global install on macOS 15.0 / Node 22.

Operating system

macOS Tahoe 15.0 / arm64 / node 22.x

Install method

npm i -g openclaw

Affected channels

  • Telegram (primary impact — alerts went silent)
  • Slack (same root cause: missing @slack/web-api)

Suggested fix

Either:

  1. Declare grammy + @grammyjs/runner + @grammyjs/transformer-throttler + @grammyjs/types + @slack/web-api in dependencies of the published openclaw package, OR
  2. Resurrect the plugin-runtime-deps hydration approach that worked between releases 4.27 → 4.29 and add a post-install assertion that hydration succeeded, OR
  3. Bundle them into the dist build so no runtime resolution is needed.

Plus a CI gate that loads every dist/extensions/**/index.js against the published install — this would prevent recurrence.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

The Telegram and Slack channel runtimes should not import packages that aren't either (a) declared in openclaw/package.json so they install transitively, or (b) bundled into the dist build, or (c) listed in a runtime-deps manifest the installer hydrates post-install.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING