-
Notifications
You must be signed in to change notification settings - Fork 2.2k
NemoClaw + Telegram: Fresh install on existing OpenClaw host — multiple 403 proxy blocks due to missing node in policy binaries #391
Description
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) viainference.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
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
- 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 →
deleteWebhookfails, 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 everythingCompare 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 runsFix
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/node2. Add node to nvidia policy binaries
nvidia:
binaries:
- path: /usr/local/bin/claude
- path: /usr/local/bin/openclaw
- path: /usr/local/bin/node # ← ADD THIS3. 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.pem4. 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 run5. Pair your Telegram user
After the first message, the bot responds with a pairing code:
openclaw pairing approve telegram <CODE>Related Issues
- applyTelegramNetworkWorkarounds overwrites proxy-aware undici dispatcher, breaking LLM requests and Telegram API calls through HTTP proxy openclaw/openclaw#30338 — Telegram plugin
setGlobalDispatcheroverwrites proxy-aware undici dispatcher (may compound this issue) - Bug: Telegram plugin setGlobalDispatcher breaks Anthropic API calls (HTTP 403) openclaw/openclaw#29510 — Same root cause from different angle
- [Bug] inference.local returns HTTP 403 inside sandbox when using Ollama local inference on DGX Spark #314 —
inference.localreturns 403 inside sandbox (same proxy mechanism)
Suggestion
The default NemoClaw sandbox policy template should:
- Include a
binariessection in thetelegrampolicy (currently missing entirely) - Include
/usr/local/bin/nodein all policy binaries lists whereopenclawis listed, sinceopenclawresolves tonodeat runtime via shebang - Consider documenting the
NODE_EXTRA_CA_CERTSrequirement 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).