Налаштування автоматичного відправлення чека в месенджер 1С-Бітрікс

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

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1264
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    855
  • 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
    590
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    752
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    658
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    991

Налаштування автоматичної відправки чека в месенджер 1С-Бітрікс

Після онлайн-оплати покупець отримує електронний чек на 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 години.