This Laravel channel sends Telegram messages the Bot API way
✈️ Telegram Notifications Channel for Laravel
At a glance
- What is it?
- The Telegram notification channel for Laravel wraps the Telegram Bot API in a notification channel, with fluent message builders for text, buttons, media, polls, dice, location, venue, contacts and media groups, plus on-demand sending and a proxy or bridge option for regions where the API is blocked. It is a package under the MIT licence with a version line that tracks Laravel majors.
- Who is it for?
- Adopt the Telegram channel for Laravel if your application already sends through Laravel notifications and you want Telegram without writing a channel by hand, since the message builders cover most of the Bot API surface. Do not adopt it if you need Telegram for interactive bot conversations rather than one-way notifications, because the update-fetching helper is explicitly for retrieving chat IDs and does not work while a webhook is configured.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 49 days ago.
- What is it written in?
- Mainly PHP, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The chat ID is the first thing to solve
Sending a Telegram notification needs the chat ID of a user, channel or group, and getting one is the part of the setup that trips people up. The documented route is to fetch the bot's updates with the `getUpdates` method from the Bot API, and the package ships a `TelegramUpdates` helper to make that easier. An update is an object whose shape depends on the event type, such as a message, a callback query or a poll, and the example shows the chain of optional calls, with a method to get only the latest update, which forgets all previous ones, a method to limit to two updates where the default starts with the earliest unconfirmed update, and a method to add request parameters such as a timeout:
$updates = TelegramUpdates::create()
->limit(2)
->options([
'timeout' => 0,
])
->get();There is a constraint in the documentation that is easy to miss. The user must interact with the bot first before you can obtain their chat ID and store it for future notifications, and the update method will not work while an outgoing webhook is configured. So a bot that answers people through a webhook cannot use this helper to collect IDs, and that is a design constraint of the Bot API rather than of the package.
Configuration is a service entry with three optional knobs
The package is installed from Packagist with a single Composer command, and the configuration lives in `config/services.php` under a `telegram` key. The token comes from the environment, and you get it by talking to BotFather. The other two settings are the ones that matter in practice. A `base_uri` entry points the package at a bridge or a self-hosted Bot API server, and an `http` array passes Guzzle options such as a request timeout, a connection timeout and a proxy. The defaults are a 30 second request timeout and a 10 second connection timeout. The documentation also notes that the legacy `services.telegram-bot-api.*` keys are still supported for backward compatibility, but `services.telegram.*` is the preferred format. There is also a proxy section, because in some regions the Bot API is unreachable, and the options are to configure a proxy the Guzzle way, set `HTTPS_PROXY` in the environment file, or point at a bridge through the base URI.
The message builder is where most of the API surface is
The bulk of the documentation is a list of fluent methods, and the structure of the list is itself informative. There are common methods, then groups per Telegram capability: message methods, location methods, venue methods, file methods, media group methods, contact methods, dice methods, poll methods, and rich message methods. The example notification shows the shape of the API, with a `to` method taking the recipient, a `content` method for the first line, a `line` method for a second one, a `lineIf` for a conditional line, an `escapedLine` for text that must not be interpreted as markup, a `view` method for a Blade template, and a `button` method for an inline button. The commented helpers show the newer Telegram features being covered, including a business connection id, a message thread id, content protection, a direct messages topic id, paid broadcast permission and a message effect id. There is also a dice method, a poll method, and a rich message with streaming drafts.
Sending is either queued or on demand
The usage section ends with the parts that decide when a message goes out. On-demand notifications cover the case where you do not want a message sent as part of the normal notification flow, and sending to multiple recipients handles a notification that has to reach more than one chat. Using the Telegram client directly is documented for the case where you want the underlying client rather than the notification wrapper, which is useful when you need an API call the channel does not wrap. The two ways of handling failure are separated too. There is a NotificationFailed event and there is an onError callback, and knowing which one to use depends on whether you want to react globally to a failed delivery or handle it at the point of failure.
The package follows Laravel's major versions
The release history shows a version line that tracks Laravel majors, which is the convention the notification channels follow. The recent tags are 8.0.0 from 2026-09-04, 7.0.0 from 2026-03-19 and 6.0.0 from 2025-02-25, so a new major of Laravel brings a new major of the package, and the topic tags confirm the current target with laravel-13. The last push to the master branch was on 2026-09-04. The repository itself is a standard PHP package with a `composer.json`, a `src/` directory and a `tests/` directory, and the tooling in the root is what you would expect from a Laravel ecosystem package: a `pint.json` for code style, `phpstan.neon.dist` with a baseline file, and a `phpunit.xml.dist` for the test configuration. The licence is MIT, and there are badges for the PHP chat, the Telegram chat, the Packagist version, the licence and the download count.
Editorial conclusion
Adopt the Telegram channel for Laravel if your application already sends through Laravel notifications and you want Telegram without writing a channel by hand, since the message builders cover most of the Bot API surface. Do not adopt it if you need Telegram for interactive bot conversations rather than one-way notifications, because the update-fetching helper is explicitly for retrieving chat IDs and does not work while a webhook is configured. Verify first that your users have interacted with your bot before you can store their chat ID, that the API is reachable from your server or that you have a proxy or bridge configured, and that the version you install matches your Laravel major.
Frequently asked questions
How do I install the Telegram channel for Laravel?
With `composer require laravel-notification-channels/telegram`, then put the bot token in `config/services.php` under the `telegram` key using the `TELEGRAM_BOT_TOKEN` environment variable. The package also still reads the legacy `services.telegram-bot-api.*` keys for backward compatibility.
How do I get a Telegram chat ID in Laravel?
Use the `TelegramUpdates` helper, which fetches bot updates and exposes the chat IDs. The user must interact with the bot before their chat ID is available, and the helper will not work while an outgoing webhook is configured.
What if the Telegram Bot API is blocked in my region?
You can configure a proxy through the Guzzle options, set `HTTPS_PROXY` in your environment file, or point the package at a bridge or self-hosted Bot API server by setting the `base_uri` config entry.
Which Telegram features can the channel send?
Text with inline and escaped lines and buttons, plus the fluent helpers for dice, polls, location, venue, contacts, audio, photos, documents, video, GIF files, stickers, media groups and rich messages with streaming drafts. Newer options include business connection ids, message thread ids, content protection and direct messages topic ids.
Which Laravel version does the Telegram channel support?
The package follows Laravel majors, with recent releases 8.0.0 from 2026-09-04, 7.0.0 from 2026-03-19 and 6.0.0 from 2025-02-25. The licence is MIT.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/laravel-notification-channels-telegram)Was this useful?