Awesome-openclaw-skills telegram-compose
install
source · Clone the upstream repo
git clone https://github.com/sundial-org/awesome-openclaw-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/telegram-compose" ~/.claude/skills/sundial-org-awesome-openclaw-skills-telegram-compose && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/telegram-compose" ~/.openclaw/skills/sundial-org-awesome-openclaw-skills-telegram-compose && rm -rf "$T"
manifest:
skills/telegram-compose/SKILL.mdsource content
Telegram Compose
Rich, scannable Telegram messages via direct API with HTML formatting.
Credentials
Bot tokens: Stored in Clawdbot config at
channels.telegram.accounts.<name>.botToken
# Get token from config BOT_TOKEN=$(jq -r '.channels.telegram.accounts.alerts.botToken' ~/.clawdbot/clawdbot.json) # Or for main bot: BOT_TOKEN=$(jq -r '.channels.telegram.accounts.main.botToken' ~/.clawdbot/clawdbot.json)
Chat IDs: See TOOLS.md → Telegram section for configured chat IDs.
Direct API Call
# Get token and send BOT_TOKEN=$(jq -r '.channels.telegram.accounts.alerts.botToken' ~/.clawdbot/clawdbot.json) CHAT_ID="TARGET_CHAT_ID" # See TOOLS.md curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \ -H "Content-Type: application/json" \ -d "$(jq -n --arg chat "$CHAT_ID" --arg text "$MESSAGE" '{ chat_id: $chat, text: $text, parse_mode: "HTML" }')"
HTML Tags
<b>bold</b> <i>italic</i> <u>underline</u> <s>strike</s> <code>mono</code> <pre>code block</pre> <tg-spoiler>hidden until tapped</tg-spoiler> <blockquote>quote</blockquote> <blockquote expandable>collapsed by default</blockquote> <a href="url">link</a> <a href="tg://user?id=123">mention by ID</a>
Escape in text:
< → < > → > & → &
Structure Pattern
EMOJI <b>HEADING IN CAPS</b> <b>Label:</b> Value <b>Label:</b> Value <b>SECTION</b> • Bullet point • Another point <blockquote>Key quote or summary</blockquote> <blockquote expandable><b>Details</b> Hidden content here... Long details go in expandable blocks.</blockquote> <a href="https://...">Action Link →</a>
Examples
Status update:
📋 <b>TASK COMPLETE</b> <b>Task:</b> Deploy v2.3 <b>Status:</b> ✅ Done <b>Duration:</b> 12 min <blockquote>All health checks passing.</blockquote>
Alert:
⚠️ <b>ATTENTION NEEDED</b> <b>Issue:</b> API rate limit at 90% <b>Action:</b> Review usage <a href="https://dashboard.example.com">View Dashboard →</a>
List:
✅ <b>PRIORITIES</b> • <s>Review PR #234</s> — done • <b>Finish docs</b> — in progress • Deploy staging <i>2 of 3 complete</i>
Style Rules
- Faux headings:
with blank line afterEMOJI <b>CAPS TITLE</b> - Emojis: 1-3 per message as visual anchors, not decoration
- Whitespace: Blank lines between sections
- Long content: Use
<blockquote expandable> - Links: Own line, with arrow:
Link Text →
Limits
- Message: 4,096 chars
- Caption: 1,024 chars
When to Use Direct API vs Clawdbot
| Direct API | Clawdbot message tool |
|---|---|
| Structured messages | Quick acknowledgments |
| Status/alerts/reports | Simple replies |
| Need underline/spoiler/expandable | Basic formatting sufficient |
| Visual hierarchy matters | Throwaway messages |