Skip to content

telegram control·

⏱ setup once

Text wave from the couch. Robot waves. No SSH, no laptop.

Prereqs: G1 on WiFi with outbound internet, a bot token from @BotFather, your ID from @userinfobot.

setup·

# .env on the robot
TELEGRAM_BOT_TOKEN=1234567890:ABC-DEF...
TELEGRAM_ALLOWED_USERS=149632499      # comma-separated usernames or IDs; omit = allow any
TELEGRAM_DEFAULT_CHAT_ID=149632499    # where the voice persona relays briefings
TELEGRAM_HISTORY_LIMIT=20             # messages injected per chat into the prompt

Then start the listener (spawns a fresh telegram-persona agent per message):

make tg                               # foreground
make tg-bg                            # nohup background
# or via docker compose — the neon-telegram service runs it automatically:
docker compose restart neon-telegram
docker compose logs -f neon-telegram | grep -i telegram   # "listener starting"

use it·

you:  check state       → FSM 500, arm_ready, 86%. All green.
you:  wave hello        → waved 👋
you:  what do you see    → (photo) A person at a desk with a laptop.

allowlist·

Only IDs/usernames in TELEGRAM_ALLOWED_USERS are processed; others dropped silently. Comma-separate for multiple. Leaving it unset allows any sender.

walking over chat·

Walking still passes through the same FSM safety gate as everywhere else — the telegram persona must confirm and reach FSM 501 before the robot moves. Keep approvals explicit; chat is an awkward place for a fall.

privacy·

Messages transit Telegram's servers (not E2E). Camera frames in replies leave your network. Sensitive? Stick to the REPL over SSH.