Get the FREE Ultimate OpenClaw Setup Guide →

add-telegram

npx machina-cli add skill qwibitai/nanoclaw/add-telegram --openclaw
Files (1)
SKILL.md
6.7 KB

Add Telegram Channel

This skill adds Telegram support to NanoClaw using the skills engine for deterministic code changes, then walks through interactive setup.

Phase 1: Pre-flight

Check if already applied

Read .nanoclaw/state.yaml. If telegram is in applied_skills, skip to Phase 3 (Setup). The code changes are already in place.

Ask the user

Use AskUserQuestion to collect configuration:

AskUserQuestion: Do you have a Telegram bot token, or do you need to create one?

If they have one, collect it now. If not, we'll create one in Phase 3.

Phase 2: Apply Code Changes

Run the skills engine to apply this skill's code package. The package files are in this directory alongside this SKILL.md.

Initialize skills system (if needed)

If .nanoclaw/ directory doesn't exist yet:

npx tsx scripts/apply-skill.ts --init

Or call initSkillsSystem() from skills-engine/migrate.ts.

Apply the skill

npx tsx scripts/apply-skill.ts .claude/skills/add-telegram

This deterministically:

  • Adds src/channels/telegram.ts (TelegramChannel class with self-registration via registerChannel)
  • Adds src/channels/telegram.test.ts (46 unit tests)
  • Appends import './telegram.js' to the channel barrel file src/channels/index.ts
  • Installs the grammy npm dependency
  • Updates .env.example with TELEGRAM_BOT_TOKEN
  • Records the application in .nanoclaw/state.yaml

If the apply reports merge conflicts, read the intent file:

  • modify/src/channels/index.ts.intent.md — what changed and invariants

Validate code changes

npm test
npm run build

All tests must pass (including the new telegram tests) and build must be clean before proceeding.

Phase 3: Setup

Create Telegram Bot (if needed)

If the user doesn't have a bot token, tell them:

I need you to create a Telegram bot:

  1. Open Telegram and search for @BotFather
  2. Send /newbot and follow prompts:
    • Bot name: Something friendly (e.g., "Andy Assistant")
    • Bot username: Must end with "bot" (e.g., "andy_ai_bot")
  3. Copy the bot token (looks like 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11)

Wait for the user to provide the token.

Configure environment

Add to .env:

TELEGRAM_BOT_TOKEN=<their-token>

Channels auto-enable when their credentials are present — no extra configuration needed.

Sync to container environment:

mkdir -p data/env && cp .env data/env/env

The container reads environment from data/env/env, not .env directly.

Disable Group Privacy (for group chats)

Tell the user:

Important for group chats: By default, Telegram bots only see @mentions and commands in groups. To let the bot see all messages:

  1. Open Telegram and search for @BotFather
  2. Send /mybots and select your bot
  3. Go to Bot Settings > Group Privacy > Turn off

This is optional if you only want trigger-based responses via @mentioning the bot.

Build and restart

npm run build
launchctl kickstart -k gui/$(id -u)/com.nanoclaw  # macOS
# Linux: systemctl --user restart nanoclaw

Phase 4: Registration

Get Chat ID

Tell the user:

  1. Open your bot in Telegram (search for its username)
  2. Send /chatid — it will reply with the chat ID
  3. For groups: add the bot to the group first, then send /chatid in the group

Wait for the user to provide the chat ID (format: tg:123456789 or tg:-1001234567890).

Register the chat

Use the IPC register flow or register directly. The chat ID, name, and folder name are needed.

For a main chat (responds to all messages):

registerGroup("tg:<chat-id>", {
  name: "<chat-name>",
  folder: "telegram_main",
  trigger: `@${ASSISTANT_NAME}`,
  added_at: new Date().toISOString(),
  requiresTrigger: false,
  isMain: true,
});

For additional chats (trigger-only):

registerGroup("tg:<chat-id>", {
  name: "<chat-name>",
  folder: "telegram_<group-name>",
  trigger: `@${ASSISTANT_NAME}`,
  added_at: new Date().toISOString(),
  requiresTrigger: true,
});

Phase 5: Verify

Test the connection

Tell the user:

Send a message to your registered Telegram chat:

  • For main chat: Any message works
  • For non-main: @Andy hello or @mention the bot

The bot should respond within a few seconds.

Check logs if needed

tail -f logs/nanoclaw.log

Troubleshooting

Bot not responding

Check:

  1. TELEGRAM_BOT_TOKEN is set in .env AND synced to data/env/env
  2. Chat is registered in SQLite (check with: sqlite3 store/messages.db "SELECT * FROM registered_groups WHERE jid LIKE 'tg:%'")
  3. For non-main chats: message includes trigger pattern
  4. Service is running: launchctl list | grep nanoclaw (macOS) or systemctl --user status nanoclaw (Linux)

Bot only responds to @mentions in groups

Group Privacy is enabled (default). Fix:

  1. @BotFather > /mybots > select bot > Bot Settings > Group Privacy > Turn off
  2. Remove and re-add the bot to the group (required for the change to take effect)

Getting chat ID

If /chatid doesn't work:

  • Verify token: curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getMe"
  • Check bot is started: tail -f logs/nanoclaw.log

After Setup

If running npm run dev while the service is active:

# macOS:
launchctl unload ~/Library/LaunchAgents/com.nanoclaw.plist
npm run dev
# When done testing:
launchctl load ~/Library/LaunchAgents/com.nanoclaw.plist
# Linux:
# systemctl --user stop nanoclaw
# npm run dev
# systemctl --user start nanoclaw

Agent Swarms (Teams)

After completing the Telegram setup, use AskUserQuestion:

AskUserQuestion: Would you like to add Agent Swarm support? Without it, Agent Teams still work — they just operate behind the scenes. With Swarm support, each subagent appears as a different bot in the Telegram group so you can see who's saying what and have interactive team sessions.

If they say yes, invoke the /add-telegram-swarm skill.

Removal

To remove Telegram integration:

  1. Delete src/channels/telegram.ts and src/channels/telegram.test.ts
  2. Remove import './telegram.js' from src/channels/index.ts
  3. Remove TELEGRAM_BOT_TOKEN from .env
  4. Remove Telegram registrations from SQLite: sqlite3 store/messages.db "DELETE FROM registered_groups WHERE jid LIKE 'tg:%'"
  5. Uninstall: npm uninstall grammy
  6. Rebuild: npm run build && launchctl kickstart -k gui/$(id -u)/com.nanoclaw (macOS) or npm run build && systemctl --user restart nanoclaw (Linux)

Source

git clone https://github.com/qwibitai/nanoclaw/blob/main/.claude/skills/add-telegram/SKILL.mdView on GitHub

Overview

This skill adds Telegram as a channel to NanoClaw, allowing you to send notifications or trigger actions. It can replace WhatsApp entirely or run alongside it, and can be configured as a control-only channel or a passive notification channel. The setup uses the skills engine to deterministically apply code changes and configure a bot token.

How This Skill Works

The skill deterministically applies a code package that adds src/channels/telegram.ts and tests, updates the channel barrel, and installs grammy. It then guides through setup to collect or create a Telegram bot token, wire TELEGRAM_BOT_TOKEN in .env, and register chat IDs for main chats or groups.

When to Use It

  • You want to replace WhatsApp with Telegram as the main notification channel.
  • You want Telegram to run alongside WhatsApp for redundancy.
  • You want a control-only Telegram channel that triggers actions in NanoClaw.
  • You want a passive Telegram channel that only receives notifications.
  • You need to operate in group chats and manage privacy by disabling Group Privacy for full message access.

Quick Start

  1. Step 1: Initialize and apply the skill: npx tsx scripts/apply-skill.ts .claude/skills/add-telegram
  2. Step 2: Provide a Telegram bot token or create one via BotFather during Phase 3
  3. Step 3: Configure environment and build: add TELEGRAM_BOT_TOKEN to .env, sync to data/env, then run npm run build and restart

Best Practices

  • Decide early whether Telegram will replace or supplement existing channels.
  • Store and rotate the bot token securely; use TELEGRAM_BOT_TOKEN in .env.
  • Test in a dev environment with unit tests and a test Telegram chat.
  • Follow Phase 3 setup steps for group privacy and obtaining chat IDs.
  • Monitor Telegram interactions and handle chat IDs with proper validation.

Example Use Cases

  • Send real-time incident alerts to a Telegram direct chat or group when critical events occur.
  • Trigger automated actions in NanoClaw from Telegram commands or @mentions.
  • Broadcast status updates to a Telegram channel or group for on-call teams.
  • Deliver user-specific notifications to a direct Telegram chat with the bot.
  • Manage group conversations by adding the bot and retrieving chat IDs for targeted dispatch.

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers