Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when operating, debugging, deploying, or monitoring a Telegram bot or Telegram-to-agent gateway. Triggers on "telegram bot down", "bot not responding", "debug bot", "check webhook", "polling vs webhook", "restart bot", "deploy bot", "bot logs", "agent gateway", "Telegram Bot API error", "send test message", "бот не отвечает", "проверь бота", "логи бота", "перезапусти бота". Covers health checks, logs, webhook/polling diagnostics, environment validation, safe restart/deploy checklists, Bot AP
.claude/skills/serejaris-tg-bot-ops/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-11 | ✓→✓ | = Same ✓ | 53% | 0% |
| case-22 | ✓→✓ | = Same ✓ | 26% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 100% | 0% |
Use this skill when the real question is whether a Telegram bot is receiving updates, processing them in the intended runtime, and sending visible responses to the right chat, user, or forum topic.
.env values, connection strings, raw logs, private DMs,payment payloads, session files, or full user records.
<TELEGRAM_BOT_TOKEN>,<TELEGRAM_USER_ID>, <CHAT_ID>, <TOPIC_ID>, <WEBHOOK_URL>.
edit BotFather settings, or deploy until the user has authorized that exact action.
user it must be rotated before public release.
If the repo or runtime is unclear, identify:
TELEGRAM_BOT_TOKEN;current git state.
polling, MTProto bot session, or MTProto user session.
getMe using a masked token path.getWebhookInfoand inspect runtime logs.
409 Conflict by reading the error text:webhook conflict means webhook/deleteWebhook path; competing getUpdates means find the polling owner.
E2E when user-visible behavior matters.
When the bot is a gateway from Telegram into an agent runtime, read references/hermes-gateway.md. The reference is Hermes-compatible but intentionally generic: bot handle, host, service name, home directory, chat ids, topic ids, env paths, and logs must be placeholders or redacted.
getUpdates, webhooks,sendMessage, getMe, callbacks, payments, and join requests.
start(bot_token=...) or a user-session E2E harness for what a Telegram user sees.
polling, MTProto bot session, or MTProto user session. Do not mix without a clear deduplication plan.
Safe read-only checks should avoid putting the token-bearing URL in shell history, process listings, or copied logs. Prefer a tiny local helper:
pythonimport json, os, urllib.request token = os.environ["TELEGRAM_BOT_TOKEN"] for method in ("getMe", "getWebhookInfo"): with urllib.request.urlopen(f"https://api.telegram.org/bot{token}/{method}") as response: data = json.load(response) print(method, {"ok": data.get("ok"), "result_keys": sorted((data.get("result") or {}).keys())})
Do not paste the token-bearing URL into notes or issues. In reports, write:
textgetWebhookInfo: webhook_url=<set|empty>, pending_update_count=<n>, last_error=<redacted>
Direct getUpdates diagnostics can consume pending updates. Use it only with a fresh nonce, short timeout, known update owner, and restore plan.
message_thread_id.message_thread_id. Preserve message_thread_id for non-General topics.
inline messages via the bot, service messages, private chats, and channel messages where they are a member. Admin bots can receive all group messages.
requires explicit user authorization.
Before restarting or deploying:
getMe, webhook/polling, and one visible smoke test.Answer with:
not checked, local only, runtime checked, verified in Telegram, or blocked..env, logs, user messages, payment payloads, or DB rows.message_thread_id when the bot lives in Telegram forum topics.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-11 | pass→pass | 19,955 | 13,667 | -32% | 1 | 1 | 0% | 2,427 | 3,714 | +53% | 0 | 0 | — |
case-22 | pass→pass | 23,959 | 17,441 | -27% | 1 | 1 | 0% | 3,451 | 4,360 | +26% | 0 | 0 | — |
case-01 | fail→pass | 17,081 | 19,561 | +15% | 1 | 1 | 0% | 2,857 | 3,988 | +40% | 0 | 0 | — |
case-02 | fail→fail | 8,388 | 13,761 | +64% | 1 | 1 | 0% | 451 | 1,978 | +339% | 0 | 0 | — |
case-03 | fail→fail | 16,735 | 15,342 | -8% | 1 | 1 | 0% | 2,900 | 2,054 | -29% | 0 | 0 | — |
case-04 | pass→pass | 10,908 | 9,819 | -10% | 1 | 1 | 0% | 1,057 | 2,114 | +100% | 0 | 0 | — |
case-05 | pass→pass | 10,645 | 7,432 | -30% | 1 | 1 | 0% | 1,928 | 2,659 | +38% | 0 | 0 | — |
case-06 | fail→pass | 21,945 | 19,369 | -12% | 1 | 1 | 0% | 2,554 | 3,672 | +44% | 0 | 0 | — |
case-07 | pass→pass | 14,752 | 6,782 | -54% | 1 | 1 | 0% | 1,540 | 2,438 | +58% | 0 | 0 | — |
case-08 | pass→pass | 12,685 | 10,997 | -13% | 1 | 1 | 0% | 1,279 | 2,847 | +123% | 0 | 0 | — |
case-09 | pass→pass | 14,911 | 9,010 | -40% | 1 | 1 | 0% | 1,987 | 2,888 | +45% | 0 | 0 | — |
case-10 | pass→pass | 11,240 | 10,602 | -6% | 1 | 1 | 0% | 983 | 2,090 | +113% | 0 | 0 | — |
case-12 | pass→pass | 10,477 | 12,302 | +17% | 1 | 1 | 0% | 676 | 2,715 | +302% | 0 | 0 | — |
case-13 | pass→pass | 8,964 | 11,017 | +23% | 1 | 1 | 0% | 1,412 | 3,247 | +130% | 0 | 0 | — |
case-14 | pass→pass | 14,195 | 7,165 | -50% | 1 | 1 | 0% | 2,067 | 2,829 | +37% | 0 | 0 | — |
case-15 | pass→pass | 18,422 | 4,872 | -74% | 1 | 1 | 0% | 2,740 | 2,291 | -16% | 0 | 0 | — |
case-16 | pass→pass | 16,916 | 10,979 | -35% | 1 | 1 | 0% | 2,489 | 3,244 | +30% | 0 | 0 | — |
case-17 | pass→pass | 15,473 | 10,937 | -29% | 1 | 1 | 0% | 2,440 | 2,965 | +22% | 0 | 0 | — |
case-18 | pass→pass | 10,491 | 7,855 | -25% | 1 | 1 | 0% | 1,721 | 2,478 | +44% | 0 | 0 | — |
case-19 | pass→pass | 12,816 | 8,807 | -31% | 1 | 1 | 0% | 2,048 | 2,529 | +23% | 0 | 0 | — |
case-20 | pass→pass | 17,796 | 15,880 | -11% | 1 | 1 | 0% | 2,689 | 4,248 | +58% | 0 | 0 | — |
case-21 | pass→pass | 17,505 | 27,687 | +58% | 1 | 1 | 0% | 3,821 | 5,438 | +42% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 20 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.