NemoClaw + Telegram: Fresh install on existing OpenClaw host — multiple 403 proxy blocks
Environment
- Host: Dell laptop (Ubuntu), previously running OpenClaw services
- Sandbox: OpenShell
jl-assistant, OpenClaw 2026.3.11 (29dc654)
- NemoClaw: 0.1.0 (installed via
/opt/nemoclaw)
- Inference: NVIDIA Cloud API (
nvidia/nemotron-3-super-120b-a12b) via inference.local
- Channel: Telegram plugin (
@openclaw/telegram)
- Proxy: OpenShell sandbox proxy at
10.200.0.1:3128 (TLS termination + binary-path allowlisting)
Summary
After setting up NemoClaw on an existing OpenClaw host, Telegram integration failed with persistent Network request for 'deleteWebhook' failed! errors. The inference endpoint also silently hung (bot shows "typing" forever).
Root cause: The sandbox proxy allowlists outbound traffic by binary path, but openclaw is a Node.js script (#!/usr/bin/env node shebang). The actual binary is /usr/local/bin/node, not /usr/local/bin/openclaw. The default sandbox policy was missing /usr/local/bin/node from the relevant network policy binaries lists.
Two compounding issues had to be fixed:
-
Telegram policy had NO binaries section at all — every other policy (nvidia, claude_code, github, etc.) had one, but telegram was missing it entirely. The proxy blocked all binaries from reaching api.telegram.org.
-
NVIDIA policy binaries only listed openclaw and claude — since the gateway runs as node (PID shows /usr/local/bin/node via /proc/<pid>/exe), inference calls to inference.local were also blocked with 403.
Steps to Reproduce
- Set up NemoClaw on OpenShell sandbox with NVIDIA API
- Enable Telegram plugin:
openclaw channels add telegram
- Start gateway:
openclaw gateway run
- Send message to bot →
deleteWebhook fails, or bot shows "typing" forever
Diagnosis
Confirming the proxy is the blocker
# Inside sandbox — curl uses /usr/bin/curl, not in any policy's binaries list
curl -sv https://api.telegram.org/bot<TOKEN>/getMe
# → HTTP 403 Forbidden (from proxy at 10.200.0.1:3128)
# Check what binary the gateway actually runs as
readlink /proc/<gateway-pid>/exe
# → /usr/local/bin/node (NOT /usr/local/bin/openclaw!)
Inspecting the default policy
# On the host (not inside sandbox)
openshell sandbox get <sandbox-name>
The telegram network policy section had endpoints and rules but no binaries list:
# BROKEN — missing binaries section
telegram:
name: telegram
endpoints:
- host: api.telegram.org
port: 443
protocol: rest
tls: terminate
enforcement: enforce
rules:
- allow:
method: GET
path: /bot*/**
- allow:
method: POST
path: /bot*/**
# ← no binaries! proxy blocks everything
Compare with nvidia policy which had binaries but was missing node:
nvidia:
binaries:
- path: /usr/local/bin/claude
- path: /usr/local/bin/openclaw
# ← missing /usr/local/bin/node — the actual binary that runs
Fix
Export the current policy, add node to the relevant binaries lists, and re-apply:
1. Add binaries to telegram policy
telegram:
name: telegram
endpoints:
- host: api.telegram.org
port: 443
protocol: rest
tls: terminate
enforcement: enforce
rules:
- allow:
method: GET
path: /bot*/**
- allow:
method: POST
path: /bot*/**
binaries: # ← ADD THIS
- path: /usr/local/bin/openclaw
- path: /usr/local/bin/node
2. Add node to nvidia policy binaries
nvidia:
binaries:
- path: /usr/local/bin/claude
- path: /usr/local/bin/openclaw
- path: /usr/local/bin/node # ← ADD THIS
3. Set NODE_EXTRA_CA_CERTS
The proxy does TLS termination using /etc/openshell-tls/openshell-ca.pem. Node.js needs to trust this CA:
# Inside sandbox — add to ~/.bashrc for persistence
export NODE_EXTRA_CA_CERTS=/etc/openshell-tls/openshell-ca.pem
4. Apply and restart
# On host
openshell policy set <sandbox-name> -g <gateway-name> --policy fixed-policy.yaml --wait
# Inside sandbox
kill <gateway-pid>
NODE_EXTRA_CA_CERTS=/etc/openshell-tls/openshell-ca.pem openclaw gateway run
5. Pair your Telegram user
After the first message, the bot responds with a pairing code:
openclaw pairing approve telegram <CODE>
Related Issues
Suggestion
The default NemoClaw sandbox policy template should:
- Include a
binaries section in the telegram policy (currently missing entirely)
- Include
/usr/local/bin/node in all policy binaries lists where openclaw is listed, since openclaw resolves to node at runtime via shebang
- Consider documenting the
NODE_EXTRA_CA_CERTS requirement for TLS-terminating proxies
This would save users from hitting silent 403 failures that are difficult to diagnose (no error in gateway logs for the inference hang — just "typing" forever).
Diagnosed and fixed by @95256155o with assistance from Claude Opus 4.6 (Anthropic).
NemoClaw + Telegram: Fresh install on existing OpenClaw host — multiple 403 proxy blocks
Environment
jl-assistant, OpenClaw 2026.3.11 (29dc654)/opt/nemoclaw)nvidia/nemotron-3-super-120b-a12b) viainference.local@openclaw/telegram)10.200.0.1:3128(TLS termination + binary-path allowlisting)Summary
After setting up NemoClaw on an existing OpenClaw host, Telegram integration failed with persistent
Network request for 'deleteWebhook' failed!errors. The inference endpoint also silently hung (bot shows "typing" forever).Root cause: The sandbox proxy allowlists outbound traffic by binary path, but
openclawis a Node.js script (#!/usr/bin/env nodeshebang). The actual binary is/usr/local/bin/node, not/usr/local/bin/openclaw. The default sandbox policy was missing/usr/local/bin/nodefrom the relevant network policybinarieslists.Two compounding issues had to be fixed:
Telegram policy had NO
binariessection at all — every other policy (nvidia,claude_code,github, etc.) had one, buttelegramwas missing it entirely. The proxy blocked all binaries from reachingapi.telegram.org.NVIDIA policy
binariesonly listedopenclawandclaude— since the gateway runs asnode(PID shows/usr/local/bin/nodevia/proc/<pid>/exe), inference calls toinference.localwere also blocked with 403.Steps to Reproduce
openclaw channels add telegramopenclaw gateway rundeleteWebhookfails, or bot shows "typing" foreverDiagnosis
Confirming the proxy is the blocker
Inspecting the default policy
The
telegramnetwork policy section had endpoints and rules but nobinarieslist:Compare with
nvidiapolicy which had binaries but was missingnode:Fix
Export the current policy, add
nodeto the relevant binaries lists, and re-apply:1. Add binaries to
telegrampolicy2. Add
nodetonvidiapolicy binaries3. Set NODE_EXTRA_CA_CERTS
The proxy does TLS termination using
/etc/openshell-tls/openshell-ca.pem. Node.js needs to trust this CA:4. Apply and restart
5. Pair your Telegram user
After the first message, the bot responds with a pairing code:
Related Issues
setGlobalDispatcheroverwrites proxy-aware undici dispatcher (may compound this issue)inference.localreturns 403 inside sandbox (same proxy mechanism)Suggestion
The default NemoClaw sandbox policy template should:
binariessection in thetelegrampolicy (currently missing entirely)/usr/local/bin/nodein all policy binaries lists whereopenclawis listed, sinceopenclawresolves tonodeat runtime via shebangNODE_EXTRA_CA_CERTSrequirement for TLS-terminating proxiesThis would save users from hitting silent 403 failures that are difficult to diagnose (no error in gateway logs for the inference hang — just "typing" forever).
Diagnosed and fixed by @95256155o with assistance from Claude Opus 4.6 (Anthropic).