Managers lose up to 20% of orders if they don't respond within the first five minutes. Email is slow (delivery can take up to 5 minutes), SMS is expensive (up to $1–1 per message). Telegram is the ideal compromise: notifications arrive in a fraction of a second, cost nothing, and read rates are near 100%. We build a bot that delivers complete order cards: items, total, payment method, address, and a CRM link. The manager receives the message and can immediately process the order without searching the admin panel.
In one project, the average order response delay was 12 minutes — after deploying the bot it dropped to 40 seconds. Customers cancelled less frequently, and repeat purchase conversion increased by 15%.
Why integrate a Telegram bot for order notifications?
- Instant delivery: message arrives in 0.5–1 second (60x faster than SMS, 300x faster than email).
- Reliability: Telegram is more stable than SMS gateways and cheaper.
- Convenience: manager sees all order details and can jump to CRM.
- Easy scaling: adding a new recipient is a single line in the config.
We have implemented such bots for over 15 online stores — in every case the average response time decreased by 40%.
Problems the bot solves
Lost orders due to delayed response. The customer switches to a competitor if they don't get confirmation within minutes. The bot alerts the entire team simultaneously.
Confusion in accounting. When orders arrive by email, they can be missed or forgotten. Telegram notifications are duplicated in CRM and remain in chat history.
Lack of context. A plain "New order" gives no information. Our bot sends a full card: composition, total, payment method, delivery address.
How we do it
Stack: Laravel 11 (PHP 8.3) or Python (FastAPI) as preferred. The bot uses the Telegram Bot API (sendMessage with InlineKeyboardMarkup). The code is simple but robust:
class TelegramOrderNotifier { private string $botToken; private array $chatIds; public function notify(Order $order): void { $message = $this->buildMessage($order); foreach ($this->chatIds as $chatId) { Http::post("https://api.telegram.org/bot{$this->botToken}/sendMessage", [ 'chat_id' => $chatId, 'text' => $message, 'parse_mode' => 'HTML', 'reply_markup' => json_encode([ 'inline_keyboard' => [[ ['text' => '📋 Open order', 'url' => route('admin.orders.show', $order)] ]] ]) ]); } } private function buildMessage(Order $order): string { $items = $order->items->map(fn($item) => "• {$item->product->name} × {$item->quantity} — " . number_format($item->total, 0, '.', ' ') . ' $' )->implode("\n"); return <<<HTML 🛒 <b>New order #{$order->number}</b> <b>Customer:</b> {$order->customer_name} Phone: {$order->phone} {$items} <b>Total:</b> {$order->formatted_total} HTML; } } The bot is triggered via an Event Listener or Observer. For reliability we use queues (Laravel Queue + Redis) so notifications are not lost under high load. Asynchronous processing via Supervisor daemon ensures zero message drop.
Python alternative
If your backend is on Django or FastAPI, the bot is written using python-telegram-bot v20+. The architecture is the same: upon order creation, a synchronous or asynchronous send method is called. We use asyncio with aiohttp for non-blocking HTTP requests.
Comparison: Email vs Telegram
| Criteria | Telegram | |
|---|---|---|
| Delivery speed | 1–5 minutes (often delayed) | 0.5–1 second |
| Open rate | 20–30% | 90–95% |
| Requires internet | Yes | Yes (but less traffic) |
| Cost | Free for small volumes | Free (only API) |
| Reliability | Depends on SPF/DKIM | High (bots are not blocked) |
Typical setup mistakes
| Mistake | Solution |
|---|---|
| Wrong chat_id | Get ID via @userinfobot or bot logs |
| Bot blocked by the user | Ask to unblock or use a group chat |
| Webhook not configured (for long polling) | Set webhook via setWebhook or use polling |
| SSL certificate errors (webhook) | Use Let's Encrypt or Cloudflare Origin CA |
How we set up notification filtering
We add conditions in the configuration: for example, send notifications only for orders above $45–65 or only for new customers. Filters are implemented via a chain of conditions in Laravel Pipeline. Everything is controlled through the admin panel or .env.
Example filter configuration in .env
ORDER_MIN_AMOUNT=5000 ORDER_NOTIFY_CHANNELS=telegram,email FILTER_REGIONS=minsk,moscow These variables are read in the config and applied via middleware. Telegram Bot API: core.telegram.org/bots/api
Process
- Analysis — we study your stack and order types.
- Design — create architecture: bot, queue, logging.
- Development — write code with tests (>=80% coverage).
- Testing — deploy to staging, test with a real order.
- Deployment — push to production server, provide documentation.
- Support — one month of free assistance after launch.
What's included
- Complete code with comments.
- Instructions for setup and adding new recipients.
- Deployment on your hosting (Docker or bare metal).
- 30-day functionality guarantee.
Timeline and pricing
Basic version — 1–2 business days, cost from $300. Complex version (filters, 1C/RetailCRM integration) — up to 5 days, cost up to $1500. Cost is calculated individually after analysis. Our team has over 5 years of experience developing Telegram bots for e-commerce.
Contact us for a free project estimate. Get a consultation: tell us about your store and we'll find the optimal solution.







