In our practice, push notifications about abandoned views show conversion rates 2–3 times higher than email campaigns when configured properly. We set up push notifications to arrive 20–40 minutes after a view — within this window, the visitor still remembers the product. Email open rates for abandoned views hover at 15–20%, while browser push appears instantly without checking inbox. Push click-through rates are higher, provided the notification arrives 20–40 minutes after the view, not a day later. Configuring this mechanic in Bitrix requires integrating the push.sender module with abandoned view logic. Our team has 7+ years of experience in 1C-Bitrix development and has implemented dozens of such integrations. Typical project cost ranges from $500 to $1500, with average monthly savings of $2000 compared to email marketing.
Key Challenges and Solutions
We address three main issues:
-
Anonymous users without email: Push subscriptions are tied to
FUSER_ID, not email. We search by FUSER_ID — otherwise, anonymous users miss notifications.
-
Stale subscriptions: If a subscription is inactive (
UNSUBSCRIBED or EXPIRED), sending causes FCM errors (410 Gone). Before sending, we verify STATUS = ACTIVE.
-
Duplicate notifications: Without a
TAG, each viewed product triggers a separate notification. We use TAG to replace old notifications with a new one.
Technical Implementation
Delivery Architecture
Push notifications travel: Bitrix agent → MessageSender::send() method → queue in b_agent → POST request to browser push endpoint (FCM for Chrome, Mozilla Autopush for Firefox). Subscriptions are stored in b_push_sender_subscription with fields: FUSER_ID, USER_ID, ENDPOINT, AUTH, P256DH. Critical point: b_push_sender_subscription contains records for both anonymous users (via FUSER_ID) and authorized users (via USER_ID). When dealing with abandoned views, we need to search by FUSER_ID, because the view might be anonymous.
Linking View Trigger to Push Subscription
The abandoned view agent finds pairs (fuser_id, product_id). The next step is to find an active push subscription:
$subscription = \Bitrix\PushSender\Model\SubscriptionTable::getList([
'filter' => [
'FUSER_ID' => $fuserID,
'=STATUS' => 'ACTIVE',
],
'order' => ['DATE_INSERT' => 'DESC'],
'limit' => 1,
])->fetch();
if ($subscription) {
// Subscription exists — send push
} else {
// Fallback to email via b_subscribe_subscriber
}
Field STATUS in b_push_sender_subscription can be ACTIVE, UNSUBSCRIBED, or EXPIRED. Before sending, we check for ACTIVE — otherwise, we get 410 Gone from FCM and clutter error logs.
Formulating Notification Payload
Web Push payload is limited to 4 KB. For an abandoned view, we include: title, text, product URL, image URL. Product data comes from the information block:
$product = \CIBlockElement::GetByID($productId)->GetNextElement();
$fields = $product->GetFields();
$props = $product->GetProperties();
$imageId = $fields['PREVIEW_PICTURE'] ?: $fields['DETAIL_PICTURE'];
$imageUrl = \CFile::GetPath($imageId);
\Bitrix\PushSender\MessageSender::send(
\Bitrix\PushSender\MessageSender::TYPE_PUSH,
[
'FUSER_ID' => [$fuserID],
'TITLE' => 'You viewed: ' . $fields['NAME'],
'MESSAGE' => 'Still in stock. Return to choose?',
'URL' => $fields['DETAIL_PAGE_URL'],
'IMAGE' => $imageUrl,
'TAG' => 'abandoned_view_' . $productId,
]
);
The TAG field is a Web Push notification tag. If a user views 5 products without buying, without a tag they get 5 separate notifications. With one tag, each new notification replaces the previous one — better UX.
Sending Time and TTL
A push about an abandoned view loses meaning after 3–4 hours. Solution: set TTL (Time-To-Live) in the request to FCM. In Bitrix, we extend the \Bitrix\PushSender\Transport\WebPush class and pass the TTL: 3600 header in the POST request to the endpoint. Alternatively, check the subscription's date in the agent: if b_push_sender_subscription.DATE_INSERT is older than 30 days with no activity, the subscription is likely stale; skip it.
Mobile App Scenario
If the store has a mobile app on Bitrix Mobile Framework, push goes directly via APNs/FCM. Subscriptions in this case are stored in b_push_sender_device (not b_push_sender_subscription). The selection logic is similar, but fields differ: DEVICE_ID, TOKEN, PLATFORM (ios/android).
Comparison of Methods
| Parameter |
Push Notification |
Email |
| Delivery time |
1-5 seconds |
from 1 minute |
| Open rate |
up to 30% |
15-20% |
| Dependent on mail |
no |
yes (spam filters) |
| Anonymous support |
yes (FUSER_ID) |
no |
| TTL |
1 hour |
up to 72 hours |
| Conversion rate improvement |
20% |
5% |
Browser push beats email by 2x in open rate for the same content. According to 1C-Bitrix documentation, the push.sender module is optimized for highload.
| Feature |
b_push_sender_subscription |
b_push_sender_device |
| Purpose |
Browser push (Web Push) |
Mobile push (APNs/FCM) |
| Identifier |
FUSER_ID / USER_ID |
DEVICE_ID (TOKEN) |
| Anon support |
Yes |
No (only authorized) |
| Platform |
Chrome, Firefox, Edge |
iOS, Android |
Service Details
What's Included
- Finding push subscriptions by FUSER_ID in b_push_sender_subscription
- Formulating payload with product data from infoblock
- Using the TAG field to replace duplicate notifications
- Configuring TTL via extending the WebPush transport class
- Fallback to email when no push subscription exists
- Deduplication table with 5 fields shared with the abandoned view trigger
- Documentation on access rights and logic
- 1-hour training for the client's developer
- 30-day support after delivery
Process
- Analysis – examine current push.sender configuration, subscription structure, and infoblocks.
- Design – agree on agent scheme, TTL, and fallback mechanism.
- Implementation – write the agent, extend WebPush transport, configure caching.
- Testing – test sending on Chrome, Firefox, Edge; simulate anonymous view.
- Deployment – roll out to production server, monitor first 48 hours.
Setup typically takes 3 to 5 working days. Average cost savings on push notifications compared to email is 25%. Pricing is calculated individually based on integration complexity and catalog size. Request a setup — get a free consultation.
Why Push Outperforms Email
Email can land in spam, is not opened immediately, while push delivers instantly and appears even on a locked mobile screen. For e-commerce, push notifications increase return visits by 15–25% according to our data. We configure turnkey with a work guarantee. Contact us to discuss your project.
What Professional 1C-Bitrix Installation Includes
We start by checking innodb_buffer_pool_size. The default MySQL value (128 MB) is a death sentence for an online store with a catalog of 10,000+ items. We set 70–80% of available RAM on a dedicated server, 50% on VPS. This single setting speeds up the site by 2–3 times compared to the default. We'll assess your project in one day — get a consultation. Contact us to order turnkey installation with performance guarantee.
How to Choose Hosting and Edition for 1C-Bitrix Installation?
BitrixVM is a virtual machine with a pre-installed stack: nginx + Apache, PHP-FPM, MySQL/MariaDB, Sphinx, Push server. For VPS — the best start. Everything is already configured for Bitrix, including OPcache, log rotation, and firewall. Management via web panel on port 8890. Bitrix documentation recommends starting with BitrixVM for predictable performance.
VPS/VDS is the sweet spot. Minimum configuration for a medium online store: 2 vCPU, 4 GB RAM, SSD. Optimal: 4 vCPU, 8 GB RAM. OS: Ubuntu 22.04 or Debian 12. If not BitrixVM, we configure the stack manually for the task. Virtual hosting — only for business cards and landing pages. Requirements: PHP 8.0+, MySQL 5.7+ / MariaDB 10.0+, 512 MB RAM, .htaccess. 1C-Bitrix hosting partners guarantee compatibility. Dedicated server — for highload. Typical architecture: web server separate, database separate, Redis/Memcached separate. For Enterprise edition — web cluster with load balancer. Cloud (Yandex Cloud, VK Cloud, Selectel) — when load spikes: sales, seasonal peaks. Autoscaling via Managed Kubernetes or simple VM vertical scaling.
Choosing the edition is equally important. A common mistake: choosing "Small Business" for a store that grows to B2B with wholesale prices and three warehouses in six months. Upgrading to "Business" — pay the difference, data is not lost, but it's better to plan ahead. Our specialists select the edition for current tasks and with room for growth. For example, the "Business" license (about 35,000 RUB) pays off through multi-warehouse and 1C exchange, while the wrong choice can lead to a loss of up to 30,000 RUB monthly on excess resources.
| Edition |
For Whom |
Key Limitation |
| Start |
Business cards, landing pages |
No infoblocks 2.0, no trade catalog |
| Standard |
Corporate sites |
No e-commerce module |
| Small Business |
Small stores |
1 price type, 1 warehouse, no 1C exchange |
| Business |
Medium stores, B2B |
Multi-warehouse, multicurrency, CommerceML |
| Enterprise |
Highload, cluster |
Web cluster, CDN, multisite |
What Server Settings Are Critical for 1C-Bitrix?
Web Server and PHP
nginx as reverse proxy + Apache (mod_php) or nginx + PHP-FPM directly. The second option saves memory — Apache is not needed. But some Bitrix modules use .htaccess, so for compatibility we sometimes keep Apache. nginx configuration: fastcgi_read_timeout 300 — for long operations (1C import), client_max_body_size 1024m — large file uploads. Block access to .settings.php, .settings_extra.php, bitrix/.settings.php — they contain database passwords. Rewrite rules from urlrewrite.php — Bitrix generates them, but with nginx + PHP-FPM they need to be duplicated. PHP 8.0–8.2 with extensions: mbstring, curl, gd, xml, json, opcache, redis/memcached. Key php.ini settings: opcache.memory_consumption=256, opcache.max_accelerated_files=20000, max_execution_time=300, memory_limit=512M, upload_max_filesize=100M, post_max_size=128M.
Database and Caching
MySQL/MariaDB. Key my.cnf parameters: innodb_buffer_pool_size — 70–80% RAM, innodb_log_file_size=256M, tmp_table_size=256M, max_heap_table_size=256M, thread_pool_size — number of CPU cores. Encoding utf8mb4 mandatory, otherwise emoji and special characters break. Redis is preferable to Memcached for Bitrix — supports persistent connections and is more reliable. In production, Redis handles concurrent writes three times faster than Memcached under typical load. Configure in .settings_extra.php:
'cache' => ['value' => ['type' => ['class_name' => '\\Bitrix\\Main\\Data\\CacheEngineRedis']]]
'session' => ['value' => ['mode' => 'default', 'handlers' => ['general' => ['type' => 'redis']]]]
Example Redis configuration for Bitrix
sudo apt install redis-server
sudo systemctl enable redis
Add to .settings_extra.php as above.
SSL, Email, and Cron
SSL — Let's Encrypt via certbot in 90% of cases. Redirect HTTP → HTTPS (301), HSTS, TLS 1.2/1.3, OCSP Stapling. In Bitrix, switch to HTTPS in the main module settings. Email: abandon mail() — connect SMTP (Yandex.Mail for domain, Mail.ru for Business). Be sure to configure SPF, DKIM, DMARC. Without SPF, emails go to spam. Test deliverability via mail-tester.com — score 9+/10. Cron: Bitrix agents switch to system cron — * * * * * /usr/bin/php /var/www/bitrix/modules/main/tools/cron_events.php. Schedule 1C exchange (15–60 min), search reindex, backups (mysqldump + rsync, rotation 7+4), temporary file cleanup.
Security and Administration
File system: owner www-data, directories 755, files 644, upload 775. nginx blocks access to configuration files. Enable Bitrix Proactive Protection — WAF, activity control (block after 5 failed attempts), kernel integrity check. For admin panel: two-factor authentication via Google Authenticator or OTP, restrict access by IP via nginx for paranoid.
How Long Does 1C-Bitrix Installation and Configuration Take?
| Task |
Timeline |
| Installation on virtual hosting |
2–4 hours |
| Installation on VPS with stack configuration |
1–2 days |
| Installation on dedicated with architecture design |
2–5 days |
| SSL + email + cron + security |
1–2 days |
| Backup and monitoring setup |
0.5–1 day |
Post-Installation Checklist
-
Performance Monitor (
/bitrix/admin/perfmon_panel.php) — aim for 30+ points. Below 20 means serious configuration issues.
- System Check — automatic check of all parameters. Red items must be fixed, yellow — case by case.
- Security Scanner — check for typical vulnerabilities.
- PageSpeed Insights — TTFB < 200ms on VPS, LCP < 2.5s.
- Test 1C exchange — if integration is planned, verify CommerceML exchange before launch.
Additionally, check software versions, caching settings, cron operation, SSL certificate, SPF/DKIM/DMARC, access rights, delete default users and pages. For projects with 54-FZ, ensure fiscalization is configured via OFD provider.
Deliverables
- Fully configured server for 1C-Bitrix with MySQL, PHP, nginx optimization.
- Installed and activated license of the required edition.
- SSL certificate, email settings, cron and backups.
- Documentation: all configuration parameters, access credentials, cron tasks.
- Content manager training: how to log into admin panel, add products, upload images.
- Post-installation support for 30 days — consultations on settings.
Why Trust Professionals with Installation?
Incorrect installation means lost time and money. We've seen projects where a store on "Start" couldn't handle 50 visitors because innodb_buffer_pool_size wasn't configured. After migrating to VPS with correct configuration, the site "flew". Incorrect configuration can cost 30,000 RUB monthly due to excessive resource consumption. You get a ready-made architecture that scales. Order turnkey 1C-Bitrix installation — get a reliable platform for business growth. Contact us for a free consultation: we'll calculate the cost and time for your project. Over 7 years of experience, 120+ Bitrix projects implemented, including highload stores with million-item catalogs. Get in touch — we'll help configure Bitrix for your project.