31 tools· updated sep 2026

# monitoring-evals

Telegram Bot API

RUNNING

An agent that works in the background needs a voice, and the Telegram Bot API is the one my agents use: the daily numbers land in a group chat before nine, failures land in a direct message, and a report nobody reads might as well not have run. This is the review of Telegram as an output channel, not as a chatbot platform.

  • Verdict: RUNNING. Multiple scheduled reports and alert paths, in daily production use for months.
  • The job: close the loop. The work is not finished until a human has seen that it happened.
  • One POST request, a token and a chat id. The simplest API on this list by a distance.
  • The send rule: templated and scheduled goes out on its own, free-form to a human never does.
  • Best as the last step of every automated job, skip it as a customer-facing chatbot you have not designed.

If you are deciding how your agents should report to humans, here is the operator view. GetAgentTools lists only what I actually use, with a verdict and no sponsored placements. Verdict first, then the detail.

Verdict: RUNNING. In one line: the channel my agents report through.

What the Telegram Bot API is

You message BotFather inside Telegram, it hands you a token, and from that moment one HTTP POST sends a message to any chat the bot has been added to. That is the whole onboarding. No app store, no review queue, no SDK you must adopt, and the request is plain enough to send from anything that can make an HTTP call.

The API does far more, inline keyboards, webhooks for incoming messages, payments, whole chat applications. This review deliberately covers the narrow slice an agent stack needs: messages out, to people who should know what the agents did. That slice is the sendMessage method, a parse mode and two rate limits, and it has been enough for every reporting job I run.

Why the Telegram Bot API is RUNNING in my stack

Background work is invisible until a message says what happened. Daily numbers to a group, failures to my DM, one POST request each, read within minutes.

The concrete inventory: a daily numbers report that lands in a small group every morning, built by an agent from live sources and formatted the same way every day. Failure alerts from scheduled pipelines that go straight to me as a direct message. A deadline reminder that reads a plain file of dates every morning and speaks only when one is close. Different jobs, same channel, and the channel is why they get read: the messages sit where the conversation already is, not in a dashboard nobody opens.

Two operational lessons paid for the verdict. First, message length is the limit you will actually hit: a real daily report outgrows a single message, so mine ship as a fixed sequence, summary first, detail second, and the split is part of the template rather than an accident. Second, group chat ids are negative numbers, and every integration I have built tripped on that exactly once.

The output channel job

The pattern worth stealing is not technical. An agent that runs in the background is invisible, and invisible systems lose trust in both directions: nobody notices when they work, nobody notices when they stop. The report is what makes the work exist. Same numbers, same order, same time every day, so a reader scans it in one pass and anything unusual stands out by breaking the pattern.

The producer on my side is an agent sessionor a plain script, and the choice follows a cost rule: if the report is arithmetic on API responses, a script formats it; the model only enters when something needs judgment. Either way Telegram is the last step, and delivery is part of the job's definition of done. A pipeline whose final send failed did not finish, it just stopped.

Three agent producers sending through one Telegram bot to a team group and an operator DM, under a template-only send ruledaily reportsame time, same shapefailure alertwhen a pipeline diesreminderreads a file of datesbot apione POST, one tokenteam groupthe numbers, before nineoperator dmalerts a human acts onsend ruleapproved template on a schedule = auto. Free-form message to a human = never auto.
One channel, two audiences: scheduled numbers to the group, failures straight to the operator. The split is the design, because a report and an alert have different readers, different urgency and different costs when missed.

Send rules: what goes out on its own

Anything that reaches a human carries risk, so the sends are split into two classes with different rules. Templated and scheduled messages, the daily report to the same group at the same hour, go out automatically: the template and the audience were approved once, by a person, and the automation only fills in numbers. Free-form messages to a human being are never sent by an agent on its own, full stop. Drafts, yes. Sends, no.

That is gate six of the production checklist applied to messaging: approval lives in the setup, and the approved object here is the template. The day an agent can compose a novel message and deliver it to a person without review is the day the channel stops being trustworthy, and the trust is the entire value.

Who the Telegram Bot API is best for

Closing the loop on every automated job. If your team already lives in Telegram, every automated job you run should end with a message, and this API makes that a ten-minute addition. The same wiring pays for a solo operator running no-code scenarios or cron jobs: the notification step is the difference between automation you trust and automation you keep checking on manually.

When to skip the Telegram Bot API

Your team does not live in Telegram. If the team lives in another chat tool, wire the same pattern into that tool instead; the pattern transfers, the specific API does not matter. And if the plan is a customer-facing conversational bot, that is a product with design, moderation and abuse questions this page does not cover, not an afternoon of wiring.

Skip it too for anything that needs an archive or an audience wider than a chat. A monthly report someone will search for in a year belongs in email or a document, not in scrollback.

Cost and rate limits

Free at agent volume, with published guidance instead of hard billing: about one message per second per chat, twenty per minute in the same group, and roughly thirty per second across all chats. Above that sits paid broadcasting, gated by balance and audience thresholds most bots will never hold, so treat thirty a second as the ceiling. A reporting stack sends a handful of messages a day, so the practical constraints are elsewhere:

  • Message length. Long reports split, and the split should be designed, not discovered.
  • Retries. On a 429 the response carries a retry_after value, so honour it instead of inventing your own backoff. And a report that retries must not double-send, so the send step needs the same idempotency care as any other external call.
  • Group migrations. When a group becomes a supergroup its chat id changes, the old one stops working, and a hardcoded id dies quietly. The API sends the new id in the migration notice; handle it or at least alarm on it.
  • The token. It is a credential with the power to speak in your name to your team. Store it like a password, rotate it if it touches a log.

How to wire an agent report to Telegram

  1. Create the bot in BotFather, store the token where your other credentials live, and nowhere else.
  2. Add the bot to the group, then send /start@yourbotnamein it and read the chat id from getUpdates. A plain "test" message will not show up, because group bots run with privacy mode on by default; and if you have ever set a webhook, getUpdates returns a 409 until you delete it. Expect the group id to be negative.
  3. Send one hardcoded message end to end before automating anything, so the plumbing is proven before the content exists.
  4. Design the template with a person, once: what numbers, what order, what time. The approval happens here, not per send.
  5. Make the send the last step of the job and treat its failure as the job failing. Add a retry with backoff, and a guard so the retry cannot deliver twice.
  6. Make the probe measure delivery, not the token: alert when the scheduled send did not return ok for its chat id. A valid token with a dead delivery path is the failure you will actually have, and getMe cannot see it.

Telegram Bot API FAQ

What is the Telegram Bot API?

An HTTP API for Telegram bots: create a bot with BotFather, get a token, and a POST request sends a message to any chat the bot is in. No app to build, no review process, no infrastructure beyond whatever already runs your agent. For an agent it is the shortest path from 'the job finished' to 'a human saw the result'.

Is the Telegram Bot API free?

Yes, for everything an agent report needs. Sending, groups, formatting and files cost nothing. Paid tiers exist only for mass broadcasting above roughly thirty messages a second, which is a different business than telling your team the nightly job finished.

What are the Telegram bot rate limits?

The published guidance: about one message per second in a single chat, no more than twenty messages per minute in the same group, and around thirty messages a second across all chats without paid broadcasts. A daily report is nowhere near any of these. The limit that actually bites is message length, long reports have to be split.

How does an agent send a Telegram message?

One HTTP POST to the sendMessage method with the bot token in the URL and two fields: the chat id and the text. Group chat ids are negative numbers. Formatting is a parse_mode parameter, HTML in my case, and the token is a credential like any other: out of code, out of prompts, rotated if it ever leaks.

Why Telegram instead of email for agent reports?

Read latency. An emailed report competes with every newsletter in the inbox; a Telegram message sits where the team already talks, and in my team it gets read the way chat gets read, not the way email does. Email still wins for long documents and for recipients outside your chat culture. My split: operational pulse to Telegram, anything with an audience or an archive to email.

Can a Telegram bot check its own health?

Be precise about what you are checking. getMe validates the token and nothing else: a bot thrown out of its group still returns a green getMe. The health signal that matters is delivery, whether today's send returned ok for the right chat id. getMe earns its keep as a debugging call; it once told me a token I had written off as retired was still valid, so it got reused instead of recreated.

Back to the list