Skill

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.

Works with telegram

87
Spark score
out of 100
Updated 16 days ago
Version 1.2.0

Add to Favorites

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

01

Send text alerts and files to Telegram chats from bash scripts or cron jobs

02

Ask yes/no questions with inline buttons and wait for user response before proceeding

03

Read incoming Telegram messages and replies programmatically

04

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.