Налаштування сповіщень про статус замовлення в Telegram 1С-Бітрікс
Покупець оформив замовлення і чекає листа на email, який іде в спам. Telegram-сповіщення доходить миттєво і читається в 5 разів частіше, ніж пошта. У Бітрікс стандартні сповіщення про замовлення працюють через b_event_message і надсилаються по email. Додати Telegram — означає підчепитися до події зміни статусу замовлення і надіслати повідомлення через Telegram Bot API.
Як працюють події замовлення в Бітрікс
При зміні статусу замовлення Бітрікс генерує подію OnSaleOrderStatusChange. Стандартний механізм сповіщень (/bitrix/admin/posting_list.php) розсилає email. Telegram підключається як додатковий канал через обробник події.
Створення Telegram-бота для сповіщень
Бот для сповіщень про замовлення — не діалоговий, а push-only: він лише надсилає, не приймає команди. Створюємо через @BotFather:
/newbot
Назва: Сповіщення MyShop
Username: myshop_orders_bot
Отримуємо токен вигляду 1234567890:AAHb-xxxxxx. Токен зберігається в налаштуваннях модуля або в /bitrix/.settings.php, не в коді шаблону.
Користувач повинен розпочати діалог із ботом (/start), щоб бот отримав його chat_id. Для цього — в особистому кабінеті покупця кнопка «Підключити Telegram-сповіщення», яка відкриває посилання https://t.me/myshop_orders_bot?start=uid_12345.
Збереження chat_id користувача
// Webhook бота приймає /start з параметром
$update = json_decode(file_get_contents('php://input'), true);
$text = $update['message']['text'] ?? '';
$chatId = $update['message']['chat']['id'];
if (preg_match('/^\/start uid_(\d+)$/', $text, $matches)) {
$userId = (int)$matches[1];
// Зберігаємо chat_id у користувацьке поле UF_TELEGRAM_CHAT_ID
\Bitrix\Main\UserTable::update($userId, [
'UF_TELEGRAM_CHAT_ID' => $chatId,
]);
// Підтвердження користувачу
TelegramApi::sendMessage($chatId, 'Telegram-сповіщення про замовлення підключено.');
}
Обробник зміни статусу замовлення
// /local/php_interface/init.php
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnSaleOrderStatusChange',
function (\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$statusId = $order->getField('STATUS_ID');
$userId = $order->getUserId();
// Читаємо chat_id користувача
$user = \Bitrix\Main\UserTable::getById($userId)->fetch();
$chatId = $user['UF_TELEGRAM_CHAT_ID'] ?? null;
if (!$chatId) {
return; // Користувач не підключив Telegram
}
// Формуємо текст за статусом
$messages = [
'N' => 'Замовлення #%d прийнято і очікує обробки.',
'P' => 'Замовлення #%d передано в доставку.',
'F' => 'Замовлення #%d виконано. Дякуємо за покупку!',
'X' => 'Замовлення #%d скасовано.',
];
$template = $messages[$statusId] ?? null;
if (!$template) {
return;
}
$text = sprintf($template, $order->getId());
$text .= "\n\nДокладніше: " . SITE_SERVER_NAME . '/personal/orders/' . $order->getId() . '/';
// Надсилаємо через Telegram Bot API
TelegramBotService::send($chatId, $text);
}
);
Клас надсилання через Telegram Bot API
class TelegramBotService
{
private static string $token = '1234567890:AAHb-xxxxxx';
public static function send(string $chatId, string $text, array $options = []): bool
{
$params = array_merge([
'chat_id' => $chatId,
'text' => $text,
'parse_mode' => 'HTML',
], $options);
$ch = curl_init('https://api.telegram.org/bot' . self::$token . '/sendMessage');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($params),
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true)['ok'] ?? false;
}
}
Токен зберігається не в коді, а в конфізі:
// /bitrix/.settings.php
'custom' => [
'value' => [
'telegram_bot_token' => '1234567890:AAHb-xxxxxx',
],
],
Терміни налаштування
Створення бота, користувацьке поле UF_TELEGRAM_CHAT_ID, сторінка підключення в особистому кабінеті, обробник подій замовлення — 6–10 годин.







