# Telegram

> Get alerts in a Telegram chat, group or channel, edited in place as an incident changes.

Web page: https://infrainbox.app/docs/notifications/telegram/

Alerts are sent by a Telegram bot that you own — InfraInbox never uses a shared bot, so nothing you receive passes through anyone else's account.

## Create the bot

1. In Telegram, open a chat with **@BotFather**, Telegram's own bot for making bots.
2. Send `/newbot`, then answer its two questions: a display name, and a username ending in `bot`.
3. BotFather replies with a token like `123456789:AAE…`.

Anyone with the token can post as your bot, so treat it like a password. If it ever leaks, send `/revoke` to @BotFather and paste the new token into InfraInbox.

## Add the destination

1. Go to **Add Telegram destination** (dashboard screen `/destinations/new`) and paste the bot token.
2. Click **Find my chats**. InfraInbox polls Telegram for a few seconds — while it does, message the bot directly, add it to a group, or make it an administrator of a channel, and it appears in the list. This works even on a LAN-only server: the check is entirely outbound.
3. Pick the chat (and, for a forum-style group, the topic) from the list.

If you'd rather not wait for discovery, enter the chat ID directly instead:

| Chat | ID looks like |
|---|---|
| A private chat | A plain number: your own user ID, e.g. `123456789` |
| A group | A negative number, e.g. `-123456789` |
| A supergroup or channel | A number starting `-100`, e.g. `-1001234567890` |
| A public channel | Its `@username` |

To find a supergroup or channel's number, copy a link to any message in it (Telegram Desktop or Web): `t.me/c/1234567890/55` means chat ID `-1001234567890`.

## Check it works

Save the destination, then click **Send test**. You should get a message in the chat within a few seconds; if you don't, re-check the chat ID and that the bot is actually a member (or admin, for a channel).

## What alerts look like

Each alert is one HTML message: a severity marker, the title, the source and resource it's about, the detail body, and links back to the incident and (where the source gave one) the sender's own view. **Telegram edits that same message in place** as the incident changes — acknowledged, snoozed, resolved — rather than sending a new one each time, so a chat doesn't fill up with a dozen messages about one problem. A message that would run past Telegram's 4096-character limit is split into up to three.

## Options

- **Send recovery and state updates** — off, and you're only told when something breaks, never when it clears.
- **Enabled** — off holds the destination without deleting it.
- **Quiet-hours threshold** — the severity floor this destination still hears during [quiet hours](https://infrainbox.app/docs/notifications/quiet-hours.md).

## Rotating the bot token

If the token leaks, get a fresh one from @BotFather (`/revoke` then `/newbot` output, or just ask BotFather for a new token on the same bot) and paste it into this destination's edit form — the chat stays the one you already picked.

## Limits

Telegram enforces roughly one message per second per chat and 20 per minute per group; InfraInbox paces sends to stay under that on its own.

## Next

- [Routing rules](https://infrainbox.app/docs/notifications/routing.md) — send specific incidents here
- [Signed webhook](https://infrainbox.app/docs/notifications/webhook.md) — if you need the raw event data instead of a formatted message
