Налаштування геофенсинг-повідомлень для 1С-Bitrix
Геофенсинг — спусковий механізм, що спрацьовує при входженні користувача у задану географічну зону або виході з неї. У контексті Bitrix це чаще за все push-повідомлення мобільного додатку: «Ви рядом з нашим магазином — сьогодні знижка 10%».
З чого складається рішення
Геофенсинг не реалізується силами лише серверної частини Bitrix. Потрібні три компоненти:
- Мобільний додаток (iOS/Android) з фоновим моніторингом геолокації — реєструє зони і надсилає події на сервер
- Серверний API на Bitrix — приймає події входу/виходу, приймає рішення про надсилання сповіщення
- Push-інфраструктура — Firebase Cloud Messaging (FCM) для Android, APNs для iOS
Браузерний геофенсинг через Geolocation API працює лише при відкритій вкладці, тому для повноцінних сповіщень потрібне саме мобільне приложение.
Реєстрація геозон на стороні додатку
Нативні SDK обох платформ підтримують геофенсинг:
-
Android:
com.google.android.gms.location.GeofencingClient -
iOS:
CLLocationManagerз методомstartMonitoring(for: CLCircularRegion)
Додаток завантажує список зон при старті з сервера Bitrix і реєструє їх у системі. При входженні/виході ОС генерує подію — додаток надсилає POST-запит на ваш API.
API на стороні Bitrix
Створюєте REST-еындпоінт /local/ajax/geofence-event.php:
<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
$data = json_decode(file_get_contents('php://input'), true);
$userId = (int)$data['user_id'];
$zoneId = (int)$data['zone_id'];
$eventType = $data['event']; // 'enter' або 'exit'
$deviceToken = $data['device_token'];
if ($eventType === 'enter') {
\Local\Geofence\NotificationService::sendEnterZoneNotification(
$userId,
$zoneId,
$deviceToken
);
}
Зберігання геозон
Для зберігання зон зручен HL-інфоблок GeoZones:
| Поле | Тип | Опис |
|---|---|---|
UF_NAME |
Строка | Назва зони |
UF_LAT |
Дробне | Широта центра |
UF_LNG |
Дробне | Довгота центра |
UF_RADIUS |
Целе | Радіус у метрах |
UF_NOTIFICATION_TEXT |
Текст | Текст push-сповіщення |
UF_ACTIVE |
Флаг | Активна ли зона |
Отправка push через FCM
namespace Local\Geofence;
class NotificationService {
private const FCM_URL = 'https://fcm.googleapis.com/fcm/send';
public static function sendEnterZoneNotification(
int $userId,
int $zoneId,
string $deviceToken
): void {
$zone = \Local\Geofence\GeoZoneTable::getById($zoneId)->fetch();
if (!$zone || $zone['UF_ACTIVE'] !== true) return;
$payload = [
'to' => $deviceToken,
'notification' => [
'title' => 'Ви рядом з нами',
'body' => $zone['UF_NOTIFICATION_TEXT'],
],
];
$http = new \Bitrix\Main\Web\HttpClient();
$http->setHeader('Authorization', 'key=' . FCM_SERVER_KEY);
$http->setHeader('Content-Type', 'application/json');
$http->post(self::FCM_URL, json_encode($payload));
}
}
Обмеження та антиспам
Без обмежень користувач, що проходить мимо магазину кілька разів на день, отримає стільки ж сповіщень. Додаєте cooldown: логуєте отримані сповіщення у таблицю, і повторно не надсилаєте, якщо з попереднього сповіщення по цій зоні пройшло менше N годин.
| Етап | Час |
|---|---|
| Проектування структури зон і API | 3–4 ч |
| Розробка серверного API | 6–10 ч |
| Настройка FCM / APNs | 2–3 ч |
| Інтеграція у мобільний додаток | 8–16 ч |
| Логіка cooldown та антиспама | 2–4 ч |







