Продукт +
Чат Виджеты Помощник Команды и роли База знаний Внутренние заметки
Тарифы
Ресурсы +
Журнал и база знаний Документация
Контакты Войти Начать бесплатно

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');

Очередь вызовов

Скрипт подгружается асинхронно. Вызовы до загрузки складываются в очередь и проигрываются после инициализации — дополнительных проверок не требуется.

Server-side трекинг. Когда событие нужно зафиксировать с бэкенда (покупка, возврат, webhook от платежки), используйте REST APIPOST /v1/events и POST /v1/contacts.