Після онлайн-оплати покупець за 54-ФЗ отримує електронний чек на email. Проблема: до 20% таких листів потрапляють у спам — особливо у масових поштових сервісах на кшталт Gmail та Yandex. Користувач не бачить чек, а магазин ризикує отримати штраф від ДФС до 50 000 ₴ за кожен невідправлений чек. Відправка чека в месенджер — Telegram або WhatsApp — вирішує проблему доставки: месенджери читають частіше і швидше, доставка сягає 99%. Ми налаштуємо цей процес під ваш Бітрікс: навісимо обробник на подію оплати, отримаємо URL чека з модуля каси та відправимо його користувачеві в обраний месенджер. Додатково налаштовуємо fallback на SMS, якщо месенджер недоступний. Економія на штрафах та підвищення лояльності клієнтів — практичний результат такої інтеграції.
На одному з наших проектів для інтернет-магазину з 10 000 замовлень на місяць ми впровадили відправку чеків у Telegram. До цього 15% чеків не доходили через спам-фільри. Після впровадження доставка становила 99.8%, штрафи зникли, а клієнти почали частіше повертатися.
Переваги месенджерів перед email
| Характеристика | Месенджер (Telegram/WhatsApp) | |
|---|---|---|
| Доставка | 70-80% | 98-99% |
| Середній час прочитання | 2-3 години | 1-2 хвилини |
| Зручність | Потрібен пошук у пошті | Завжди під рукою в чаті |
За даними ДФС (лист №ЕД-4-20/12470@), невідправка чека тягне штраф. Месенджери вирішують цю проблему.
Як налаштувати відправку чека в Telegram?
Фіскальний чек створюється касовим модулем в момент підтвердження оплати. Бітрікс працює з онлайн-касами через модулі: 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 чека з асинхронного модуля?
Асинхронні модулі (АТОЛ з чергою, Ево... із затримкою) не повертають URL чека одразу після оплати. Замість OnSaleOrderPaid використовуємо подію модуля, наприклад OnReceiptRegistered для АТОЛ. Це гарантує, що URL вже збережений у базі. Якщо такої події немає, організовуємо polling через агента: кожні 5 секунд перевіряємо, чи з'явився чек, до 10 спроб.
Інструкція з налаштування
- Встановіть та активуйте модуль онлайн-каси (АТОЛ, Ево..., Orange Data).
- Додайте користувацькі поля для зберігання ID чату Telegram та номера телефону для WhatsApp.
- Реалізуйте обробник події оплати, як показано вище.
- Налаштуйте API ботів Telegram та WhatsApp Business.
- Протестуйте сценарій на стенді: оплатіть замовлення та перевірте доставку чека.
Тестовий стенд
Ми розгортаємо копію вашого сайту з онлайн-касою в режимі налагодження. Після успішних тестів переносимо на бойовий.Що входить в роботу
| Етап | Опис | Тривалість |
|---|---|---|
| Аналіз | Вивчення поточного модуля каси, полів користувача, API месенджерів | 1-2 години |
| Реалізація | Написання обробника, налаштування відправки | 4-8 годин |
| Тестування | Перевірка на тестовому стенді з реальним чеком | 1-2 години |
| Документація | Інструкція з експлуатації, опис подій | 1 година |
| Навчання | Демонстрація роботи, відповіді на питання | 0.5 години |
Терміни налаштування: від 1 до 3 робочих днів залежно від складності.
Ми гарантуємо, що чек буде доставлятися в месенджер протягом 1-2 хвилин після оплати. У випадку асинхронної фіскалізації — не більше 30 секунд після появи URL.
Порівняння каналів відправки
| Характеристика | Telegram | |
|---|---|---|
| Доставка | 99% | 98% |
| Швидкість прочитання | 30-60 сек | 1-2 хв |
| Підтримка кнопок | Так (InlineKeyboard) | Так (через WhatsApp Business API) |
| Складність налаштування | Низька | Середня (потрібен Business API) |
| Обмеження | Немає лімітів | 1000 повідомлень на добу для Business API |
Вибір каналу залежить від аудиторії: Telegram простіше в налаштуванні, WhatsApp популярніше в B2C. Ми рекомендуємо налаштувати обидва з пріоритетом для користувача.
Наші компетенції
- Сертифіковані фахівці 1С-Бітрікс з досвідом понад 5 років.
- Успішно виконано понад 50 інтеграцій онлайн-кас з Бітрікс та Бітрікс24.
- Підтримка всіх популярних модулів: АТОЛ, Ево..., Orange Data, а також кастомних.
- Консультація та місяць підтримки після запуску.
Зв'яжіться з нами для обговорення деталей. Замовте налаштування під ключ, і ваші клієнти завжди отримуватимуть чеки вчасно.







