Налаштування повідомлень про статус замовлення в Telegram 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування повідомлень про статус замовлення в Telegram 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування сповіщень про статус замовлення в 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 годин.