After an online payment, the buyer receives an electronic receipt by email as required by 54-FZ. The problem: up to 20% of such emails end up in spam — especially with mass email services like Gmail and Yandex. The user does not see the receipt, and the store risks penalties from the Federal Tax Service for each undelivered receipt. Sending the receipt via messenger — Telegram or WhatsApp — solves the delivery issue: messengers are read more often and faster, with delivery rate reaching 99%. We will set up this process for your Bitrix: attach an event handler to the payment event, retrieve the receipt URL from the cash register module, and send it to the user in the chosen messenger. Additionally, we set up an SMS fallback if the messenger is unavailable. Saving on fines and increasing customer loyalty are the practical results of such integration.
Advantages of messengers over email
| Characteristic |
Email |
Messenger (Telegram/WhatsApp) |
| Deliverability |
70-80% |
98-99% |
| Average read time |
2-3 hours |
1-2 minutes |
| Convenience |
Requires searching inbox |
Always in the chat |
According to the Federal Tax Service letter No. ED-4-20/12470@, failure to send a receipt incurs a fine. Messengers solve this problem.
How to set up sending a receipt to Telegram?
The fiscal receipt is created by the cash register module at the moment of payment confirmation. Bitrix works with online cash registers via modules: atol.online, evotor.kassa, orangedata and similar. After fiscalization, the module saves the receipt URL in the b_sale_pay_system_action table or in the payment's custom field.
The event OnSaleOrderPaid (module sale) — by this moment the receipt should already be created. Depending on the cash register module, this may be synchronous or with a delay of up to 30 seconds.
Getting the receipt URL from the ATOL module
// Читаем URL чека из данных платежа
$payment = $order->getPaymentCollection()->getInnerPayment();
$checkUrl = $payment->getField('PS_PARAMS') ?? null;
// Для АТОЛ чек хранится в отдельной таблице
$checkResult = \Atol\Online\Check::getByOrderId($order->getId());
$checkUrl = $checkResult['RECEIPT_URL'] ?? null;
The exact storage location depends on the cash register module. Before development, review the documentation of the specific module and its tables/fields.
Event handler: sending a receipt after payment
\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 всегда отправляется стандартным механизмом Битрикс
}
);
If the cash register module creates the receipt asynchronously (via queue), synchronous waiting is not enough. In that case, we subscribe to the event of the cash register module itself:
// Событие АТОЛ Онлайн после получения ответа ОФД
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'atol.online',
'OnReceiptRegistered',
function (\Bitrix\Main\Event $event) {
$orderId = $event->getParameter('ORDER_ID');
$checkUrl = $event->getParameter('RECEIPT_URL');
// Отправляем в мессенджер здесь
}
);
Message format with a receipt
For Telegram, you can add a button with a link to the receipt via InlineKeyboard:
$payload = [
'chat_id' => $chatId,
'text' => "Чек по заказу #{$orderId} готов.",
'parse_mode' => 'HTML',
'reply_markup' => json_encode([
'inline_keyboard' => [[
['text' => 'Открыть чек', 'url' => $checkUrl],
]],
]),
];
How to get the receipt URL from an asynchronous module?
Asynchronous modules (ATOL with queue, Evotor with delay) do not return the receipt URL immediately after payment. Instead of OnSaleOrderPaid, we use the module's event, for example OnReceiptRegistered for ATOL. This guarantees that the URL is already saved in the database. If such an event is missing, we organize polling via an agent: every 5 seconds we check if the receipt appeared, up to 10 attempts.
Setup instructions
- Install and activate the online cash register module (ATOL, Evotor, Orange Data).
- Add custom fields to store the Telegram chat ID and phone number for WhatsApp.
- Implement the payment event handler as shown above.
- Configure the Telegram bot and WhatsApp Business APIs.
- Test the scenario on a test environment: pay for an order and check receipt delivery.
Test environment
We deploy a copy of your site with the online cash register in debug mode. After successful tests, we migrate to production.
What is included in the work
| Stage |
Description |
Duration |
| Analysis |
Study the current cash register module, user fields, messenger APIs |
1-2 hours |
| Implementation |
Write the handler, configure sending |
4-8 hours |
| Testing |
Verify on a test environment with a real receipt |
1-2 hours |
| Documentation |
Operating instructions, event descriptions |
1 hour |
| Training |
Demonstrate operation, answer questions |
0.5 hour |
Setup time: from 1 to 3 working days depending on complexity.
We guarantee that the receipt will be delivered to the messenger within 1-2 minutes after payment. In case of asynchronous fiscalization, no more than 30 seconds after the URL appears.
Comparison of delivery channels
| Characteristic |
Telegram |
WhatsApp |
| Deliverability |
99% |
98% |
| Read speed |
30-60 sec |
1-2 min |
| Button support |
Yes (InlineKeyboard) |
Yes (via WhatsApp Business API) |
| Setup complexity |
Low |
Medium (requires Business API) |
| Limitations |
No limits |
1000 messages per day for Business API |
The choice of channel depends on the audience: Telegram is easier to set up, WhatsApp is more popular in B2C. We recommend setting up both with user priority.
Our expertise
- Certified 1C-Bitrix specialists with over 5 years of experience.
- Successfully completed more than 50 integrations of online cash registers with Bitrix and Bitrix24.
- Support for all popular modules: ATOL, Evotor, Orange Data, as well as custom ones.
- Free consultation and one month of support after launch.
Contact us to discuss details. Order turnkey setup, and your customers will always receive receipts on time.
Open Lines: Where It All Begins and Breaks
The Open Lines module (imopenlines) is the standard Bitrix24 mechanism for omnichannel communications. It connects an external channel to an internal chat via the Im\Model\ChatTable entity. The problem is that out-of-the-box routing settings are primitive: "in turn" or "all at once." For a real sales department with 15+ managers, VIP clients, and SLA response times, this is not enough. We enhance routing via event handlers OnImOpenLinesChatStart and the REST API.
A manager switching between five windows loses messages, forgets to reply—the client leaves for a competitor who responded in 30 seconds. Bitrix24 messenger configuration gathers all channels into one interface, and CRM records every touch. Experience shows that after setup, average first response time drops by 40% within the first week.
How we implement messenger integration
We connect Telegram, WhatsApp, Viber, VK, online chat, email, and other channels via standard connectors or REST API. Each channel requires its own configuration, but the result is unified—all messages end up in open lines, and from there into the client card. We guarantee no message gets lost: we use tagged caching and agents to check queues.
How to connect WhatsApp to Bitrix24?
WhatsApp is the main business channel. Integration via WhatsApp Business API with a verified account. We configure sending and receiving messages from the Bitrix24 interface—they fall into an open line. We create HSM templates for initiating dialog (abandoned cart reminders, order status). Templates go through Meta moderation—allow 2-3 days. We ensure file, image, and document transfer. We link conversations to contacts and deals via CRM_ENTITY_TYPE and CRM_ENTITY_ID.
| Method |
Nuances |
Payment Model |
| WhatsApp Business API (Cloud) |
Verification via Meta Business, templates, bulk messaging |
Per conversation window (24h) |
| Provider (Edna, Wazzup, Chat2Desk) |
Quick start, intermediary service, own limits |
Subscription fee |
| Bitrix24 CRM Marketing |
Built-in integration, minimal setup |
Included in Professional+ tariff |
Telegram: Free Channel with High Reach
Telegram Bot API is free and well-documented—a pleasant rarity among messengers. Integration into Bitrix24 is done via the imopenlines connector. Setup: connect the bot to open lines, configure the connector to Telegram. Receiving messages, photos, videos, documents—all mapped to the Bitrix24 chat. Inline buttons and reply keyboards for navigation. Webhook on https://yourdomain/rest/imconnector.register—register the connector. CRM integration: incoming message creates a lead via crm.lead.add or an activity in the deal.
Telegram is indispensable for:
- Support via bot—standard questions resolved without an operator (up to 70% of inquiries).
- Notifications: orders, delivery, payment—via Telegram Bot API sendMessage.
- Lead collection: bot asks qualifying questions → creates a lead.
Viber and VK: Audience 35+ and Social Network
Viber maintains positions in regions. We connect a business account via the open lines connector. We use Viber Business Messages—bulk messaging with action buttons and rich content. Receiving and sending from CRM works immediately.
VK (Vkontakte) is the largest social network in Russia. Integration via the imopenlines community messages connector. Process messages and comments from a single interface. Auto-creation of a lead—handler OnImOpenLinesCrmCreate. Integration with VK Ads for tracking sources via UTM. Bot for auto-replies—VK Bot API + Callback API.
Why is proper routing of inquiries important?
Distribution of inquiries among operators is organized through queue mechanisms. By default: "who is free." In reality, more complexity is needed:
- Determining responsible person by number or email from CRM—
im.chat.get + search via crm.contact.list.
- Distribution by departments based on keywords (NLP classifier or simple regex on first message).
- Priority queue for VIP—by segment in CRM.
- Escalation on 5-minute timeout—auto-switch to next.
- Transition to call directly from chat—
telephony.externalcall.register.
We use custom event handlers OnImOpenLinesChatStart and REST API to implement such scenarios. Additionally, we connect Bizproc for complex approval chains and integration with HL blocks for storing custom queue parameters. Result: client does not wait, operator is not overloaded.
What is included in messenger integration work
| Component |
Description |
| Audit of current CRM structure |
Analysis of inquiry types, channels, operator load |
| Connecting channels |
Configuration of WhatsApp, Telegram, Viber, VK, email, online chat connectors |
| Routing setup |
Queues, distribution by competence, escalations, SLA |
| Chatbot development |
Script-based or with NLP, integration with CRM and external APIs |
| Operator training |
Documentation, video instruction recording, webinar |
| Testing and support |
Running all scenarios, 2-week monitoring after launch |
| 6-month warranty |
Free bug fixes, consultations |
Chatbots: Script-Based and with NLP
Types
Script-based (rule-based): button menu, decision tree. "How to pay" → "Where is my order" → "Business hours." Transfer to operator at intent == 'unknown' → transfer_to_queue. Reliable, predictable, covers 60-70% of typical inquiries.
With NLP: free text in Russian. Intent detection (buy, complain, inquire about delivery), entity extraction (name, date, order number). Contextual dialog—remembers what was discussed. Implemented on Rasa or Dialogflow, integrated with Bitrix24 via REST.
Example handler code for a script-based bot (PHP)
use Bitrix\Main\Loader;
use Bitrix\Imopenlines\Model\SessionTable;
Loader::includeModule('imopenlines');
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('imopenlines', 'OnImOpenLinesMessageReceive', function($event) {
$message = $event->getParameter('message');
$chatId = $event->getParameter('chatId');
if (preg_match('/order status (\d+)/i', $message, $matches)) {
$orderId = $matches[1];
// Get order status via API
$order = \Bitrix\Sale\Order::load($orderId);
if ($order) {
$status = $order->getField('STATUS_ID');
\Bitrix\ImOpenLines\Chat::sendMessage($chatId, 'Your order #' . $orderId . ' status: ' . $status);
}
}
});
Scenarios and Real Impact
| Scenario |
Action |
Operator Relief |
| FAQ |
Answers from knowledge base based on intent match |
30-50% |
| Order status |
Request sale.order.get by number |
15-25% |
| Booking |
Date/specialist selection, creation via API |
20-30% |
| Calculation |
Preliminary estimate based on parameters |
10-20% |
| Lead qualification |
Data collection → crm.lead.add |
3x funnel acceleration |
| NPS/CSAT |
Rating after service |
100% automatic collection |
Comparison: a script-based bot processes requests 5 times faster than an operator, and an NLP bot reduces fallback rate to 15% after training on real dialogs. Average savings on operator salary when implementing a chatbot amount to substantial monthly savings.
How can chatbots transform your customer support?
Development Process
- Inquiry analysis—export history from open lines, cluster by topic. Identify 80% of typical requests.
- Dialog design—map on miro/figma. Each branch ends either with an answer or transfer to operator.
- Development—logic, integration with CRM and external APIs. For script-based: finite state machine. For NLP: pipeline: tokenizer → featurizer → classifier → response selector.
- NLP training—on real dialogs (at least 500 examples). Set confidence threshold.
- Testing—run all branches, edge cases (empty message, sticker, voice).
- Optimization—monitor fallback rate, retrain on new dialogs every 2 weeks.
Timeline
| Task |
Duration |
| Single messenger connection |
1-2 days |
| Open lines setup |
2-3 days |
| Script-based bot (basic) |
1-2 weeks |
| Bot with NLP |
3-6 weeks |
| Comprehensive omnichannel system |
4-8 weeks |
Result: all communications in one window, routine automated, no message lost. Managers sell, not search for the right chat. Evaluate which channels you need—contact us, we'll select for your niche. Get a personalized timeline and cost estimate for your project.