Установка Нотифлоу на 1С-Битрикс: шаблон и OnEpilog
Нотифлоу на 1С-Битрикс ставится обычной вставкой <script>-сниппета в шаблон сайта — отдельного модуля для маркетплейса 1С-Битрикс пока нет, и не нужен. Самый простой способ — добавить код в header.php активного шаблона. Для нескольких шаблонов разом удобнее обработчик события OnEpilog в init.php. Обе схемы совместимы с композитным кэшем — скрипт грузится async после рендера.
1С-Битрикс CMS vs Битрикс24: где ставится чат
Часто путаются два продукта. 1С-Битрикс: Управление сайтом (CMS) — это движок для корпоративного сайта или интернет-магазина. На нем ставится виджет чата от внешнего сервиса вроде Нотифлоу.
Битрикс24 — это CRM с собственным «Открытым каналом», у которого свой виджет чата на сайте. Открытый канал интегрируется в Битрикс24 для приема обращений в CRM.
Если вам нужен чат с продвинутыми сценариями (попапы, чек-листы онбординга, NPS, маршрутизация по тарифу) — Нотифлоу на 1С-Битрикс CMS. Если достаточно базового онлайн-консультанта и сделки в Битрикс24 — родной открытый канал. Сравнение продуктов — в статье встроенный чат Битрикс24 vs внешний.
Способ 1: вставка кода в шаблон сайта
Файл шаблона — /local/templates/<имя_шаблона>/header.php. Если кастомных шаблонов нет — /bitrix/templates/.default/header.php.
Откройте файл по FTP или через «Контент → Структура сайта → Файлы и папки». Найдите закрывающий тег </head>. Прямо перед ним вставьте <script> от Нотифлоу (полностью скопированный из «Подписка → Установка виджета» в кабинете):
<?php
// ... существующий код ...
?>
<script>
(function(w,d,s,o,f,js,fjs){
w[o]=w[o]||function(){(w[o].q=w[o].q||[]).push(arguments)};
js=d.createElement(s),fjs=d.getElementsByTagName(s)[0];
js.id=o;js.src=f;js.async=1;fjs.parentNode.insertBefore(js,fjs);
}(window,document,'script','nw','https://cp.notiflow.ru/js/widget.js'));
nw('init', {apiKey:'YOUR_API_KEY_UUID'});
</script>
</head>
YOUR_API_KEY_UUID уже подставлен в готовом сниппете в кабинете — просто скопируйте целиком. Если редактируете через админку — после сохранения сбросьте кэш: «Настройки → Производительность → Очистка файлов кэша → Очистить все».
Где найти </head> в header.php
В типовом шаблоне 1С-Битрикс закрывающий </head> идет после вызова $APPLICATION->ShowHead():
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
?><!DOCTYPE html>
<html>
<head>
<?$APPLICATION->ShowHead();?>
<title><?$APPLICATION->ShowTitle()?></title>
<link href="<?=SITE_TEMPLATE_PATH?>/styles.css" rel="stylesheet">
<!-- ВСТАВЛЯЙТЕ КОД НОТИФЛОУ СЮДА -->
</head>
<body>
Не вставляйте до ShowHead() — иначе на отдельных страницах с переопределенным шаблоном код может потеряться.
Установка на нескольких шаблонах сайта
Большие порталы 1С-Битрикс часто используют несколько шаблонов: один для главной, другой для каталога, третий для блога. Чтобы чат работал везде, надо вставить код в header.php каждого шаблона.
Список шаблонов: «Настройки → Настройки продукта → Сайты → Шаблоны сайтов». Откройте каждый, найдите header.php, вставьте код перед </head>.
Способ для нескольких шаблонов разом — обработчик события OnEpilog в init.php:
// /bitrix/php_interface/init.php или /local/php_interface/init.php
AddEventHandler('main', 'OnEpilog', 'НотифлоуInsertScript');
function НотифлоуInsertScript() {
if (defined('ADMIN_SECTION') && ADMIN_SECTION) return;
?>
<script>
(function(w,d,s,o,f,js,fjs){
w[o]=w[o]||function(){(w[o].q=w[o].q||[]).push(arguments)};
js=d.createElement(s),fjs=d.getElementsByTagName(s)[0];
js.id=o;js.src=f;js.async=1;fjs.parentNode.insertBefore(js,fjs);
}(window,document,'script','nw','https://cp.notiflow.ru/js/widget.js'));
nw('init', {apiKey:'YOUR_API_KEY_UUID'});
</script>
<?php
}
Этот вариант ставит скрипт во все шаблоны разом и не требует править каждый header.php.
Совместимость с композитным кэшем
Композитный режим 1С-Битрикс кэширует HTML страницы целиком и отдает его до того, как PHP-скрипт инициализируется. Это значит:
- скрипт чата, вставленный в
header.php, попадает в кэшированный HTML и работает корректно - скрипт через
OnEpilog-обработчик тоже попадает, потому что эпилог рендерится в момент сборки кэша - скрипт, вставленный через JS-инициализацию из бэкенда (например, динамический
userHash) — НЕ попадет в кэш, нужно использовать поле динамической загрузки
Для серверной идентификации пользователя (см. передача атрибутов) используйте Composite-исключения: данные авторизованного пользователя подгружайте AJAX-запросом и вызывайте nw('identify', ...) после получения ответа.
Установка в каталоге интернет-магазина
В типовом решении «1С-Битрикс: Малый бизнес» каталог использует тот же header.php, что и остальной сайт — установка одна на все.
Если у вас «1С-Битрикс: Бизнес» или «1С-Битрикс24: Корпоративный портал» с отдельными шаблонами для каталога — повторите установку в шаблоне каталога. Проверьте на странице товара, что виджет появляется.
Для триггеров на корзину передавайте события через JS SDK:
// в шаблоне корзины
nw('track', 'cart_viewed', {
cart_total: 5990,
items_count: 4
});
Дальше можно настроить попап «брошенная корзина» в кабинете Нотифлоу — описано в статье проактивные попапы для e-commerce.
Что делать, если виджет не появляется
Чек-лист по убыванию частоты проблем:
- Сбросьте кэш: «Настройки → Производительность → Очистка кэша → Очистить все». После правки шаблона композитный кэш держит старую версию
- Проверьте, что домен в Нотифлоу совпадает с реальным URL (с/без
www, http/https) - Откройте DevTools Console — нет ли ошибки
Failed to load cp.notiflow.ru/js/widget.js. Если есть — проверьте брандмауэр сервера, может блокировать исходящие запросы - На страницах админки виджет не нужен — обработчик
OnEpilogисключает их черезADMIN_SECTION. Тестируйте на публичной части - Если у вас несколько шаблонов и чат работает только на одном — добавили код не во все
header.php
Часто задаваемые вопросы
Чем отличается чат на сайте от Открытых линий Битрикс24?
Чат на сайте — это виджет, который ставится в шаблон 1С-Битрикс CMS. Нотифлоу и подобные сервисы — внешние, со своими сценариями и аналитикой. Открытые линии Битрикс24 — родной канал внутри CRM, проще в связке с воронкой продаж, но беднее по поведенческим триггерам.
Совместим ли Нотифлоу с композитным кэшем?
Да. Скрипт, вставленный в header.php или через OnEpilog, попадает в кэшированный HTML и работает корректно. Динамические данные (атрибуты пользователя) подгружайте отдельным AJAX и вызывайте nw('identify', ...) после получения.
Куда вставить код, если у меня несколько шаблонов?
Либо в header.php каждого шаблона, либо одной строкой в обработчик OnEpilog в /local/php_interface/init.php — тогда скрипт автоматически появится во всех шаблонах.
Нужны ли права администратора?
Для правки header.php или init.php — права на редактирование шаблона сайта и доступ к файлам по FTP / через админку. На большинстве хостингов разработчику этого хватает.
Работает ли в редакции «Старт»?
Да. Установка одинаковая для всех редакций («Старт», «Малый бизнес», «Бизнес»). Маркетплейс и шаблоны доступны во всех версиях.
Поставьте Нотифлоу на 1С-Битрикс за 10 минут — создайте аккаунт, скопируйте код из «Каналы → Чат на сайте → Установка». Сравнение с встроенным чатом Битрикс24 — в статье Битрикс24: встроенный чат vs внешний. Установка на других CMS — в гайдах по Tilda и WordPress. Подробнее о виджете — на странице чата.