Notifly в 1С-Битрикс
В Битриксе всё происходит через систему событий (AddEventHandler). Подключим
её к Notifly и научимся получать push в момент важных бизнес-событий.
Установка
Заголовок раздела «Установка»Положите helper в bitrix/php_interface/init.php (или подключите оттуда отдельный файл):
<?phpfunction notifly_send(string $title, string $message, int $priority = 5): void { $url = defined('NOTIFLY_URL') ? NOTIFLY_URL : (getenv('NOTIFLY_URL') ?: ''); $token = defined('NOTIFLY_TOKEN') ? NOTIFLY_TOKEN : (getenv('NOTIFLY_TOKEN') ?: ''); if (!$url || !$token) return;
$body = json_encode([ 'title' => mb_substr($title, 0, 200), 'message' => mb_substr($message, 0, 1500), 'priority' => $priority, ], JSON_UNESCAPED_UNICODE);
$ch = curl_init("$url/message?token=$token"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => ['Content-Type: application/json'], CURLOPT_POSTFIELDS => $body, CURLOPT_TIMEOUT => 5, ]); curl_exec($ch); curl_close($ch);}В bitrix/.settings_extra.php (или php_interface/dbconn.php) задайте:
define('NOTIFLY_URL', 'https://your-notifly.example.com');define('NOTIFLY_TOKEN', 'AGdjfk_L.dKe8q');Новый заказ интернет-магазина
Заголовок раздела «Новый заказ интернет-магазина»use Bitrix\Main\EventManager;use Bitrix\Sale\Order;
EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleOrderSaved', function (\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); if (!$order instanceof Order) return; if (!$event->getParameter('IS_NEW')) return;
$items = []; foreach ($order->getBasket() as $item) { $items[] = '• ' . $item->getField('NAME') . ' × ' . (int)$item->getQuantity(); }
notifly_send( "🛒 Заказ #{$order->getId()} — " . number_format($order->getPrice(), 2, '.', ' ') . ' ₽', "Покупатель: " . $order->getField('USER_DESCRIPTION') . "\n" . "Состав:\n" . implode("\n", $items) . "\n\n" . "Админка: https://" . $_SERVER['SERVER_NAME'] . "/bitrix/admin/sale_order_view.php?ID={$order->getId()}", 8 ); });Изменение статуса заказа
Заголовок раздела «Изменение статуса заказа»EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleStatusOrderChange', function ($id, $status) { notifly_send( "📦 Заказ #$id → статус $status", "https://" . $_SERVER['SERVER_NAME'] . "/bitrix/admin/sale_order_view.php?ID=$id", 5 ); });Отправка формы (модуль form)
Заголовок раздела «Отправка формы (модуль form)»EventManager::getInstance()->addEventHandler( 'form', 'onAfterResultAdd', function ($form_id, $result_id) { $form = \CForm::GetByID($form_id)->Fetch(); notifly_send( "✉️ Форма «{$form['NAME']}» (#$result_id)", "Открыть: https://" . $_SERVER['SERVER_NAME'] . "/bitrix/admin/form_result_view.php?WEB_FORM_ID=$form_id&RESULT_ID=$result_id", 6 ); });Регистрация нового пользователя
Заголовок раздела «Регистрация нового пользователя»EventManager::getInstance()->addEventHandler( 'main', 'OnAfterUserAdd', function (&$fields) { if (empty($fields['ID'])) return; notifly_send( "👤 Новый пользователь: {$fields['LOGIN']}", "ID: {$fields['ID']}\n" . "Email: {$fields['EMAIL']}\n" . "https://" . $_SERVER['SERVER_NAME'] . "/bitrix/admin/user_edit.php?ID={$fields['ID']}", 4 ); });Ошибки PHP
Заголовок раздела «Ошибки PHP»В php_interface/init.php добавьте error-handler:
set_error_handler(function ($severity, $message, $file, $line) { if (!(error_reporting() & $severity)) return; if ($severity === E_USER_NOTICE || $severity === E_NOTICE) return;
notifly_send( "⚠️ PHP error: $message", "Файл: $file:$line\nURL: " . ($_SERVER['REQUEST_URI'] ?? '-'), 7 );});
register_shutdown_function(function () { $err = error_get_last(); if ($err && in_array($err['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR])) { notifly_send( "🔥 Fatal: {$err['message']}", "Файл: {$err['file']}:{$err['line']}\nURL: " . ($_SERVER['REQUEST_URI'] ?? '-'), 10 ); }});Канарейка для агентов
Заголовок раздела «Канарейка для агентов»Битрикс-агенты запускаются по cron или хитам. Если хитов мало, агенты «спят» сутками. Заведите ежедневный агент-маяк:
function NotiflyDailyAgent() { notifly_send('🟢 Bitrix агенты живы', 'Сервер: ' . $_SERVER['SERVER_NAME'] . ', ' . date('Y-m-d H:i:s'), 2); return 'NotiflyDailyAgent();';}// Регистрируется через CAgent::AddAgent() в init.php или вручную в админкеЕсли 25 часов нет «зелёного» — что-то с агентами или cron-ом.
- Бизнес-уведомления приходят моментально. Заказ упал — push прежде, чем клиент закрыл вкладку.
- Дополнительный канал для критичных событий. Когда стандартные SMTP-уведомления Битрикса застревают в очереди или не доходят, Notifly работает.
- Дешёвый «error tracker» для крупных сайтов. Не каждый владелец Битрикса готов платить за Sentry/Bugsnag.
Что улучшить дальше
Заголовок раздела «Что улучшить дальше»- Отдельные каналы Notifly: «заказы», «формы», «ошибки» — разные звуки и фильтры.
- Тротлинг через
\Bitrix\Main\Data\Cache, чтобы не получать одно и то же при батч-импорте.