Потеря заказов из-за задержки уведомлений — типовая боль интернет-магазинов на Битрикс. По статистике, до 15% клиентов отказываются от покупки, если не получают подтверждение в течение 10 минут. Сотрудники проверяют почту раз в час, новые заказы зависают, клиенты уходят. Однажды мы внедрили канал уведомлений для сети магазинов с 300 заказами в день: время реакции сократилось с 45 минут до 2 минут, а возвраты снизились на 22%. Telegram-канал уведомлений о заказах для команды — решение: уведомления приходят мгновенно, все видят статусы в реальном времени. Но реализация требует учёта особенностей API Битрикс и Telegram. Мы разрабатываем такие каналы под ключ.
Telegram-канал уведомлений о заказах — не то же самое, что бот с личными сообщениями. Канал предназначен для команды: менеджеры, операторы склада, курьеры получают уведомления о новых заказах, сменах статусов и критичных событиях в общий поток. Это в 3 раза быстрее, чем email, и не требует от каждого сотрудника подключения личного бота. Разработка такого канала — архитектурная задача с несколькими не очевидными нюансами на стороне Битрикс.
Какой формат уведомлений выбрать для команды?
- Личный бот — сообщения уходят в chat_id конкретного пользователя. Нужен opt-in, нужно хранить chat_id каждого сотрудника.
- Канал — сообщения публикуются в канале, все подписчики видят их одновременно. Бот должен быть добавлен в канал как администратор с правом публикации. chat_id канала — статичный, не меняется.
- Супергруппа — гибрид: сотрудники могут отвечать, обсуждать заказы, бот публикует события. Для команды — предпочтительнее канала.
Для уведомлений о заказах чаще выбирают супергруппу: менеджер может ответить на сообщение «принимаю» или добавить комментарий прямо в чат.
Почему супергруппа лучше канала для операционной команды?
В супергруппе каждый сотрудник может оперативно отреагировать: взять заказ в работу, уточнить детали, отметить проблему. Бот публикует события, а люди общаются в том же потоке. Это снижает время реакции на 35% по сравнению с каналом, где только чтение. Для склада и доставки такой формат особенно удобен.
| Формат | Преимущества | Недостатки |
|---|---|---|
| Личный бот | Индивидуальные уведомления, персонализация | Требует opt-in, хранение chat_id каждого сотрудника |
| Канал | Все видят одновременно, прост в настройке | Только чтение, нет обратной связи |
| Супергруппа | Возможность комментировать и обсуждать | Требует модерации, больший трафик |
Схема работы
[Событие в Битрикс] → [Обработчик события] → [Форматирование сообщения] ↓ [Telegram Bot API: sendMessage / sendPhoto] ↓ [Канал / Группа команды] Бот — технический аккаунт с токеном. Канал/группа — место получения. Согласно Telegram Bot API, бот должен быть администратором. Бот добавляется в канал/группу через @telegram → Добавить участника → @your_bot.
Форматирование сообщений о заказах
Telegram поддерживает HTML и Markdown. Для заказов — структурированное HTML-сообщение:
class OrderNotificationFormatter { public static function newOrder(\Bitrix\Sale\Order $order): string { $basket = $order->getBasket(); $props = $order->getPropertyCollection(); $name = $props->getPayerName()?->getValue() ?? 'Не указано'; $phone = $props->getPhone()?->getValue() ?? '—'; $email = $props->getUserEmail()?->getValue() ?? '—'; $itemLines = []; foreach ($basket as $item) { $itemLines[] = sprintf( ' • %s × %d = %s руб.', htmlspecialchars($item->getField('NAME')), (int)$item->getQuantity(), number_format($item->getFinalPrice(), 0, '.', ' ') ); } $deliveryName = $order->getDeliverySystemName() ?? 'Не выбрана'; $paySystemName = $order->getPaySystemName() ?? 'Не выбрана'; return sprintf( "🛒 <b>Новый заказ #%d</b>\n\n" . "👤 %s\n" . "📞 %s\n" . "✉️ %s\n\n" . "<b>Состав:</b>\n%s\n\n" . "💰 <b>Итого: %s руб.</b>\n" . "🚚 %s\n" . "💳 %s\n\n" . "<a href=\"https://%s/bitrix/admin/sale_order_detail.php?ID=%d\">Открыть в админке</a>", $order->getId(), htmlspecialchars($name), htmlspecialchars($phone), htmlspecialchars($email), implode("\n", $itemLines), number_format($order->getPrice(), 0, '.', ' '), htmlspecialchars($deliveryName), htmlspecialchars($paySystemName), $_SERVER['HTTP_HOST'], $order->getId() ); } public static function statusChange(\Bitrix\Sale\Order $order, string $oldStatus): string { $statusList = \CSaleStatus::GetListArray(); $oldName = $statusList[$oldStatus]['NAME'] ?? $oldStatus; $newName = $statusList[$order->getField('STATUS_ID')]['NAME'] ?? $order->getField('STATUS_ID'); return sprintf( "🔄 <b>Заказ #%d</b>: %s → <b>%s</b>", $order->getId(), htmlspecialchars($oldName), htmlspecialchars($newName) ); } public static function lowStock(int $productId, string $productName, float $quantity): string { return sprintf( "⚠️ <b>Мало товара:</b> %s\nОстаток: %s шт.\nID: %d", htmlspecialchars($productName), number_format($quantity, 0), $productId ); } } Обработчик событий с отправкой в канал
// /local/php_interface/init.php use Local\Telegram\ChannelBot; use Local\Telegram\OrderNotificationFormatter; $em = \Bitrix\Main\EventManager::getInstance(); // Новый заказ $em->addEventHandler('sale', 'OnSaleOrderSaved', function (\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); if (!$order->isNew()) { return; } $message = OrderNotificationFormatter::newOrder($order); ChannelBot::post($message); }); // Смена статуса $em->addEventHandler('sale', 'OnSaleOrderStatusChange', function (\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); $oldStatus = $event->getParameter('OLD_STATUS'); $message = OrderNotificationFormatter::statusChange($order, $oldStatus); ChannelBot::post($message); }); Класс отправки в канал (ChannelBot)
// /local/lib/Telegram/ChannelBot.php namespace Local\Telegram; use Bitrix\Main\Config\Configuration; class ChannelBot { private static function getConfig(): array { return Configuration::getValue('telegram_channel') ?? []; } public static function post(string $text, array $options = []): ?array { $config = self::getConfig(); $token = $config['bot_token'] ?? ''; $chatId = $config['channel_id'] ?? ''; // например: -1001234567890 if (!$token || !$chatId) { return null; } $payload = array_merge([ 'chat_id' => $chatId, 'text' => $text, 'parse_mode' => 'HTML', 'disable_web_page_preview' => true, ], $options); $ch = curl_init('https://api.telegram.org/bot' . $token . '/sendMessage'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_HTTPHEADER => ['Content-Type: application/json'], CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 5, ]); $raw = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode !== 200) { \Bitrix\Main\Diag\Debug::writeToFile( "Telegram channel error {$httpCode}: {$raw}", '', '/local/logs/telegram.log' ); return null; } return json_decode($raw, true); } public static function postPhoto(string $photoUrl, string $caption = ''): ?array { $config = self::getConfig(); return self::callApi('sendPhoto', [ 'chat_id' => $config['channel_id'], 'photo' => $photoUrl, 'caption' => $caption, 'parse_mode' => 'HTML', ]); } private static function callApi(string $method, array $payload): ?array { $config = self::getConfig(); $ch = curl_init('https://api.telegram.org/bot' . $config['bot_token'] . '/' . $method); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_HTTPHEADER => ['Content-Type: application/json'], CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 5, ]); $raw = curl_exec($ch); curl_close($ch); return json_decode($raw, true); } } Конфигурация в /bitrix/.settings.php:
'telegram_channel' => [ 'value' => [ 'bot_token' => '7654321:AAbcdef...', 'channel_id' => '-1001234567890', ], ], channel_id для канала начинается с -100. Узнать его можно, переслав сообщение из канала в @userinfobot.
Как настроить отправку уведомлений в Telegram
- Создайте бота через BotFather: отправьте
/newbot, получите токен. - Создайте канал или супергруппу в Telegram.
- Добавьте бота как администратора (с правом публикации сообщений).
- Перешлите любое сообщение из канала в @userinfobot — получите channel_id (начинается с -100).
- Запишите токен и channel_id в
/bitrix/.settings.php(как в примере выше). - Разместите код форматтера и обработчика событий в
init.phpили в отдельном модуле. - Проверьте отправку: создайте тестовый заказ в админке.
Какие события транслировать в канал операционной команды?
| Событие | Триггер | Описание |
|---|---|---|
| Новый заказ | OnSaleOrderSaved | Сообщение с составом, суммой, доставкой |
| Смена статуса | OnSaleOrderStatusChange | Старый → новый статус |
| Низкий остаток | Агент раз в час | Проверка b_catalog_store_product |
| Ошибка 1С | b_event_log SALE_EXCHANGE_ERROR | Лог ошибок экспорта |
| Крупный заказ | Порог суммы (например, >50000 руб.) | Отдельное уведомление |
Сроки разработки
| Этап | Содержание | Срок |
|---|---|---|
| Настройка бота и канала | BotFather, права, channel_id | 1–2 часа |
| Форматтер сообщений | HTML-шаблоны по всем событиям | 4–6 часов |
| Обработчики событий продаж | Новый заказ, статусы, оплата | 4–6 часов |
| Дополнительные события | Остатки, ошибки, крупные заказы | 4–8 часов |
| Тестирование и отладка | Все сценарии с реальными заказами | 2–4 часа |
Наш опыт и гарантии
Мы работаем с Битрикс более 10 лет, выполнили более 50 интеграций с Telegram. Сертифицированные специалисты «1С-Битрикс». Гарантируем стабильную работу уведомлений при любой нагрузке — до 1000 сообщений в день без задержек. Предоставляем полный пакет документации и исходных кодов. Средняя экономия на операционных затратах — до 45 000 рублей в месяц для отдела из пяти сотрудников. Для детальной информации обратитесь к документации события Битрикс.
Закажите разработку под ключ — мы настроим бота, форматтеры и обработчики под ваши задачи. Получите консультацию по интеграции Telegram с Битрикс. Свяжитесь с нами для обсуждения вашего проекта.







