JS SDK
Виджет встраивается одним тегом и экспонирует глобальную функцию _nf().
Установка
<script>
(function (w, d, s, o, f, js, fjs) {
w[o] = w[o] || function () { w[o].q = 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', '_nf', 'https://cp.notiflow.ru/js/widget.js'));
_nf('init', { api_key: '{api_key}' });
</script>
Ключ берется из кабинета: Настройки → API-ключи. Передается в init, публичен по дизайну (ограничен по domain allow-list). Вызовы до загрузки бандла складываются в очередь и проигрываются после инициализации.
Методы
_nf('identify', traits)
Связывает анонимного посетителя с вашим пользователем. Один объект-аргумент, обязателен user_id; остальные поля опциональны.
_nf('identify', {
user_id: 'user_12345',
email: 'ivanov@site.ru',
name: 'Иван Иванов',
phone: '+7 (495) 000-00-00',
plan: 'pro',
created_at: '2026-01-15'
});
Поля user_id, email, name, phone мапятся в стандартные колонки контакта; остальные попадают в custom_properties и доступны для таргетинга сегментов.
_nf('group', companyTraits)
Привязывает текущий контакт к компании (B2B). Обязателен company_id.
_nf('group', {
company_id: 'company_42',
name: 'ООО Ромашка',
domain: 'site.ru',
plan: 'enterprise'
});
_nf('event', name, properties?)
Кастомное событие продукта. Попадает в аналитику, может триггерить сценарии ботов и скоринг лидов.
_nf('event', 'purchase', {
order_id: '10042',
amount: 4990,
currency: 'RUB'
});
_nf('reset')
Отвязывает идентификатор от браузера (вызывайте при logout). Сначала отправляет POST /api/widgets/reset с текущим fingerprint, затем очищает cookie и localStorage Нотифлоу.
_nf('reset');
Очередь вызовов
Скрипт подгружается асинхронно. Вызовы до загрузки складываются в очередь и проигрываются после инициализации — дополнительных проверок не требуется.
POST /v1/events и POST /v1/contacts.