Настройка уведомлений о статусе заказа в 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 Appointment Booking Widget for a Medical Center
    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 часов.