Send Telegram alerts and run approval flows from workflows
Sends Telegram alerts and files from scripts, reads replies, and runs ask-and-wait approval flows via bash and curl.
Why it matters
Enable automated systems, CI pipelines, and long-running tasks to send notifications, files, and interactive approval requests to Telegram, so users can monitor progress and gate critical actions from their phone.
Outcomes
What it gets done
Send text alerts and files to Telegram chats from bash scripts or cron jobs
Ask yes/no questions with inline buttons and wait for user response before proceeding
Read incoming Telegram messages and replies programmatically
Hook Claude Code sessions to ping your phone when input is needed or tasks finish
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/ag-telegram-bot-messaging | bash Overview
Telegram
A skill for sending Telegram alerts and files, reading replies, and running ask-and-wait approval flows from scripts via bash, curl, and a bot token. Use when a workflow, hook, cron job, or CI pipeline needs to notify you or ask for approval on your phone before proceeding.
What it does
Sends messages, files, and alerts to Telegram, reads incoming replies, and runs ask-and-wait approval flows with inline-button options - all via pure bash, curl, and jq, with no install beyond a bot token (bash scripts/telegram.sh setup runs a guided BotFather walkthrough on first use). Before any setup, send, read, or hook is enabled, a safety gate requires the user's explicit approval of the target chat, bot account, and exact content or file - it never sends workspace, customer, credential, or secret data automatically, and treats the bot token itself as a secret (never echoed, committed, or left in shell history; the script passes token-bearing URLs to curl via stdin rather than process arguments). ask waits for a reply and exits 0 with the answer on stdout, or exits 2 on timeout, letting a script gate on the response - e.g. only deploying if the answer is "Yes".
When to use - and when NOT to
Use it when a workflow, hook, cron job, or CI pipeline needs to send a Telegram alert, or when a long-running task should notify you or ask for approval on your phone before proceeding - including wiring "notify me when done" or "ask me before proceeding" into Claude Code itself via Notification and Stop hooks in settings.json. Do not use it for unattended notifications or approval flows without the user's explicit, current authorization for that specific destination - this skill cannot verify that a configured chat ID actually belongs to the intended recipient, so a new destination needs to be confirmed before first use. Telegram is a third-party service: message and file contents leave the local machine and may be retained under Telegram's own policies, so it's not suitable for anything that must stay fully local.
Inputs and outputs
bash scripts/telegram.sh send "low priority" --silent # no notification sound
bash scripts/telegram.sh send "*bold* alert" --format md # MarkdownV2 (falls back to plain)
bash scripts/telegram.sh send "hi" --to alerts --bot work # named target + named bot
bash scripts/telegram.sh file report.pdf "Q3 report" # document (photos auto-detected)
bash scripts/telegram.sh read # new incoming messages since last read
ANSWER=$(bash scripts/telegram.sh ask "Deploy to prod?" --options "Yes,No" --timeout 300)
Configuration is environment variables first, then ~/.config/telegram/config (mode 600): TELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_ID as defaults, BOT_ALERTS_TOKEN/TARGET_FAMILY for named bots/targets, and TELEGRAM_APPROVER_IDS/APPROVERS_FAMILY restricting who can answer an ask. Replies are only accepted from configured chat IDs; in a private chat the sender must equal the chat ID, and in a group chat ask fails closed unless specific approver user IDs are listed, since a group chat ID is shared by every member.
Integrations
Talks directly to the Telegram Bot API via curl/jq, configured through BotFather-issued bot tokens; wires into Claude Code's own Notification and Stop hooks in settings.json to ping a phone when Claude needs input or finishes a task, and into any script or CI pipeline as an approval gate around an ask call.
Who it's for
Developers who want phone notifications or approval prompts from automated workflows, hooks, cron jobs, or CI pipelines - including pinging themselves when a long Claude Code session needs input or completes - without standing up anything beyond a bot token and a bash script.
Source README
Telegram
When to Use
- Use when you need to send a Telegram message, file, or alert from a workflow, hook, cron job, or CI pipeline
- Use when a long-running task should notify you or ask for approval on your phone (inline-button questions that wait for the answer)
- Use when wiring "notify me when done" or "ask me before proceeding" behavior into automated sessions
Send updates, alerts, and files to Telegram; read replies; run ask-and-wait
approval flows. Pure bash + curl + jq - no install beyond a bot token.
First run: bash scripts/telegram.sh setup (guided BotFather walkthrough).
Safety Gate
Before setup, sending a message or file, reading replies, or enabling a hook, obtain the
user's explicit approval for the target chat, bot account, and exact content or file. Never
send workspace, customer, credential, or secret data automatically. Treat a token as a secret:
do not echo it, commit it, or place it in shell history.
Commands
bash scripts/telegram.sh send "Deploy finished โ
" # basic alert
bash scripts/telegram.sh send "low priority" --silent # no notification sound
bash scripts/telegram.sh send "*bold* alert" --format md # MarkdownV2 (falls back to plain)
bash scripts/telegram.sh send "hi" --to alerts --bot work # named target + named bot
bash scripts/telegram.sh file report.pdf "Q3 report" # document (photos auto-detected)
bash scripts/telegram.sh read # new incoming messages since last read
ANSWER=$(bash scripts/telegram.sh ask "Deploy to prod?" --options "Yes,No" --timeout 300)
### exit 0 = answered (stdout = answer), 2 = timeout
Config
Env vars win, then ~/.config/telegram/config (mode 600):
TELEGRAM_BOT_TOKEN=123:ABC... # default bot
TELEGRAM_CHAT_ID=987654321 # default target
BOT_ALERTS_TOKEN=456:DEF... # --bot alerts (add via: setup --bot alerts)
TARGET_FAMILY=-100987... # --to family (any chat/group/channel id)
TELEGRAM_APPROVER_IDS=123456789 # default group approver user IDs (comma-separated)
APPROVERS_FAMILY=123456789,987654321 # approvers for --to family (overrides default)
Replies and answers are only accepted from configured chat IDs. Private chats preserve the
direct-chat behavior (the sender user ID must equal the chat ID). Because a group chat ID is
shared by every member, ask fails closed for groups unless TELEGRAM_APPROVER_IDS or the
target-specific APPROVERS_<NAME> explicitly lists the Telegram user IDs allowed to answer.
Claude Code hooks (settings.json)
Ping your phone when Claude needs input, and when it finishes:
{
"hooks": {
"Notification": [{"hooks": [{"type": "command",
"command": "bash ~/.claude/skills/telegram/scripts/telegram.sh send \"๐ Claude needs input in $(basename \\\"$PWD\\\")\""}]}],
"Stop": [{"hooks": [{"type": "command",
"command": "bash ~/.claude/skills/telegram/scripts/telegram.sh send \"โ
Claude finished in $(basename \\\"$PWD\\\")\" --silent"}]}]
}
}
Approval gate in any script/automation:
if [ "$(bash scripts/telegram.sh ask 'Deploy to prod?' --options 'Yes,No')" = "Yes" ]; then
./deploy.sh
fi
Limitations
- Telegram is a third-party service: message and file contents leave the local machine and may
be retained under Telegram's policies. - This skill cannot verify that a chat ID belongs to the intended recipient; confirm the target
before every new destination or automation. - Bot tokens grant control of the bot. Store them only in a protected local secret store or
mode-600 configuration file. The script supplies token-bearing API URLs to curl through
stdin rather than process arguments; rotate a token if exposure is suspected. - Do not use the examples to create unattended notifications or approval flows without the
user's explicit, current authorization.
Discussion
Questions & comments ยท 0
Sign In Sign in to leave a comment.