Настройка автоматической отправки чека в мессенджер 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка автоматической отправки чека в мессенджер 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка автоматической отправки чека в мессенджер 1С-Битрикс

После онлайн-оплаты покупатель по 54-ФЗ получает электронный чек на email. Многие email-уведомления уходят в спам, либо у клиента нет удобного почтового клиента на телефоне. Отправка чека в мессенджер — Telegram или WhatsApp — решает проблему доставляемости: мессенджеры читают чаще и быстрее.

Когда возникает чек в Битрикс

Фискальный чек создаётся кассовым модулем в момент подтверждения оплаты. Битрикс работает с онлайн-кассами через модули: atol.online, evotor.kassa, orangedata и аналоги. После фискализации модуль сохраняет URL чека в таблицу b_sale_pay_system_action или в пользовательское поле платежа.

Событие, на которое подцепляемся: OnSaleOrderPaid (модуль sale). К этому моменту чек уже должен быть создан — в зависимости от модуля кассы это может быть синхронно или с задержкой до 30 секунд.

Получение URL чека из модуля АТОЛ

// Читаем URL чека из данных платежа
$payment = $order->getPaymentCollection()->getInnerPayment();
$checkUrl = $payment->getField('PS_PARAMS') ?? null;

// Для АТОЛ чек хранится в отдельной таблице
$checkResult = \Atol\Online\Check::getByOrderId($order->getId());
$checkUrl = $checkResult['RECEIPT_URL'] ?? null;

Конкретное место хранения зависит от модуля кассы. Перед разработкой — смотрим документацию конкретного модуля и его таблицы/поля.

Обработчик: отправка чека после оплаты

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'OnSaleOrderPaid',
    function (\Bitrix\Main\Event $event) {
        $order  = $event->getParameter('ENTITY');
        $payment = $event->getParameter('PAYMENT');
        $userId  = $order->getUserId();

        // Получаем URL чека — с небольшой задержкой, если кассовый модуль асинхронный
        $checkUrl = self::waitForCheck($order->getId(), 3); // ждём до 3 секунд

        if (!$checkUrl) {
            // URL чека не получен — логируем, email уже отправлен стандартно
            return;
        }

        $message = sprintf(
            "Ваш кассовый чек по заказу #%d:\n%s",
            $order->getId(),
            $checkUrl
        );

        // Определяем предпочитаемый канал пользователя
        $user = \Bitrix\Main\UserTable::getById($userId)->fetch();

        if (!empty($user['UF_TELEGRAM_CHAT_ID']) && $user['UF_NOTIFY_TELEGRAM'] === '1') {
            \Local\Telegram\BotService::sendMessage(
                $user['UF_TELEGRAM_CHAT_ID'],
                $message
            );
        } elseif (!empty($user['UF_PHONE']) && $user['UF_NOTIFY_WHATSAPP'] === '1') {
            \Local\WhatsApp\Service::sendMessage($user['UF_PHONE'], $message);
        }
        // email всегда отправляется стандартным механизмом Битрикс
    }
);

Если кассовый модуль создаёт чек асинхронно (через очередь), синхронного ожидания недостаточно. В этом случае подписываемся на событие самого кассового модуля:

// Событие АТОЛ Онлайн после получения ответа ОФД
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'atol.online',
    'OnReceiptRegistered',
    function (\Bitrix\Main\Event $event) {
        $orderId  = $event->getParameter('ORDER_ID');
        $checkUrl = $event->getParameter('RECEIPT_URL');
        // Отправляем в мессенджер здесь
    }
);

Формат сообщения с чеком

Для Telegram можно добавить кнопку с ссылкой на чек через InlineKeyboard:

$payload = [
    'chat_id'    => $chatId,
    'text'       => "Чек по заказу #{$orderId} готов.",
    'parse_mode' => 'HTML',
    'reply_markup' => json_encode([
        'inline_keyboard' => [[
            ['text' => 'Открыть чек', 'url' => $checkUrl],
        ]],
    ]),
];

Сроки настройки

Обработчик события оплаты, получение URL чека из модуля кассы, отправка в Telegram и/или WhatsApp — 4–8 часов. Если кассовый модуль асинхронный и нужно подписываться на его события — дополнительно 2–4 часа.