Skip to Content
Документация для разработчиковОтслеживание конверсийLeadsNextAuth.js
💡

Отслеживание конверсий доступно на тарифе Business и выше .

В отслеживании конверсий событие lead — это действие, которым пользователь показывает интерес к продукту:

  • зарегистрировался;
  • записался на демо;
  • подписался на рассылку.

Событие лида задаёт личность клиента и ссылку, по которой он пришёл: все его дальнейшие действия (покупка, апгрейд тарифа) атрибутируются той же ссылке.

В этом руководстве мы сосредоточимся на отслеживании регистраций новых пользователей для SaaS-приложения, использующего NextAuth.js для аутентификации.

Что нужно до начала

Сначала включите отслеживание конверсий для ссылок: без него клик не связывается с последующими событиями лида и продажи.

💡

Для ссылок партнёрской программы шаг можно пропустить — RevRoute включает отслеживание конверсий у них автоматически.

Для всего воркспейса. Откройте Настройки → Аналитика и включите переключатель Отслеживание конверсий в шапке страницы — он управляет настройкой на уровне воркспейса. Отслеживание включится у всех ссылок, созданных после этого.

Для отдельной ссылки. Откройте конструктор ссылки и включите переключатель Отслеживание конверсий — внутри конструктора он же дёргается горячей клавишей C.

Через API. Передайте trackConversion: true при создании или обновлении ссылки (по умолчанию — false):

curl -X POST "https://api.revroute.ru/links" \ -H "Authorization: Bearer dub_xxxxxx" \ -H "Content-Type: application/json" \ -d '{ "url": "https://example.com", "trackConversion": true }'

Затем установите на сайт клиентский скрипт RevRoute — он фиксирует клик и сохраняет его идентификатор, без которого события лида не к чему привязать.

Клиентский скрипт RevRoute отдаётся с нашего домена — npm-пакеты ставить не нужно. Скрипт находит в URL параметр rr_id, сохраняет его в first-party cookie rr_id на вашем домене (90 дней) и по нему связывает будущие конверсии с исходной ссылкой.

Вставьте тег в секцию <head> каждой страницы сайта:

<script defer src="https://app.revroute.ru/analytics/script.js"></script>

В Next.js (App Router) — через next/script в корневом layout:

import Script from "next/script"; export default function RootLayout({ children }) { return ( <html lang="ru"> <body>{children}</body> <Script defer src="https://app.revroute.ru/analytics/script.js" /> </html> ); }
💡

Варианты скрипта (site visit, outbound domains, клиентские конверсии) и все его атрибуты data-* описаны в разделе Варианты скрипта.

📝

Проверить установку можно двумя способами:

  1. Откройте консоль браузера и введите _revRouteAnalytics — если скрипт установлен, в консоли появится объект.
  2. Добавьте к адресу сайта параметр ?rr_id=test и убедитесь, что в браузере появился cookie rr_id.

Если оба пункта не сработали, проверьте, что:

  • тег скрипта стоит в секции <head> страницы;
  • кеш CDN сброшен, если сайт отдаётся через CDN.

Серверный клиент RevRoute

Примеры ниже используют официальный TypeScript-SDK. Он ставится из npm под именем dub — форк RevRoute отдельного пакета не публикует, поэтому в SDK обязательно указывается наш serverURL, иначе запросы уйдут в api.dub.co.

npm install dub
import { Dub } from "dub"; export const dub = new Dub({ token: process.env.REVROUTE_API_KEY, // секретный ключ dub_* из настроек воркспейса serverURL: "https://api.revroute.ru", // без него SDK пойдёт в api.dub.co });
⚠️

Секретный ключ (dub_*) держите в переменных окружения и не отдавайте в браузер. Ключ создаётся в разделе API-ключей .

💡

SDK не обязателен: /track/lead и /track/sale — обычные HTTPS-эндпоинты, их можно вызвать из любого языка (см. Track lead).

Настройка параметров NextAuth.js

Далее настройте параметры конфигурации NextAuth.js для отслеживания событий конверсий лидов с помощью TypeScript SDK dub.

Вот как это работает в двух словах:

  1. Отследите регистрацию через событие signIn в NextAuth.
  2. Если пользователь новый — проверьте, есть ли cookie rr_id.
  3. Если cookie есть — отправьте событие лида в Revroute через dub.track.lead.
  4. Удалите cookie rr_id.

Под капотом Revroute записывает пользователя как клиента и связывает его с событием клика, откуда он пришёл. Уникальный ID пользователя теперь является источником истины для всех будущих событий — поэтому cookie rr_id больше не нужен.

// app/api/auth/[...nextauth]/options.ts import type { NextAuthOptions } from "next-auth"; import { cookies } from "next/headers"; import { dub } from "@/lib/dub"; export const authOptions: NextAuthOptions = { ...otherAuthOptions, // your other NextAuth options events: { async signIn(message) { // if it's a new sign up if (message.isNewUser) { const cookieStore = await cookies(); // check if rr_id cookie is present const rr_id = cookieStore.get("rr_id")?.value; if (rr_id) { // send lead event to Revroute await dub.track.lead({ clickId: rr_id, eventName: "Sign Up", customerExternalId: user.id, customerName: user.name, customerEmail: user.email, customerAvatar: user.image, }); // delete the cookies cookieStore.delete("rr_id"); cookieStore.delete("rr_partner_data"); } } }, }, };
💡

В NextAuth.js флаг isNewUser доступен только при работе через базу данных  — иначе он вернёт undefined. В этом случае перенесите логику выше в callback signIn.

Поля запроса POST /track/lead:

ПолеОбяз.Описание
clickIdдаИдентификатор клика, к которому привязывается лид. Читается из cookie rr_id. Для отложенного лида допустима пустая строка — тогда клик берётся у клиента, найденного по customerExternalId.
eventNameдаНазвание события (например, Sign up). Оно же связывает лид с последующей продажей через leadEventName в /track/sale.
customerExternalIdдаИдентификатор клиента в вашей системе. По нему атрибутируются все будущие события этого клиента.
discountCodeнетПромокод партнёра, если клиент пришёл без клика по ссылке. Если переданы и clickId, и discountCode, приоритет у clickId.
customerNameнетИмя клиента. Если не передать, сгенерируется случайное.
customerEmailнетEmail клиента.
customerAvatarнетURL аватара клиента.
modeнетasync (по умолчанию) — не блокировать запрос; wait — дождаться записи события; deferred — отложить создание лида до следующего запроса.
eventQuantityнетЧисловое значение события (например, количество мест в триале): лид будет засчитан столько раз.
metadataнетПроизвольные данные события, до 10 000 символов в JSON.

Создание обработчика маршрутов NextAuth.js

Наконец, импортируйте переменную authOptions, созданную ранее, и используйте NextAuth для создания обработчика маршрутов NextAuth.js.

// app/api/auth/[...nextauth]/index.ts import { authOptions } from "./options"; import NextAuth from "next-auth"; const handler = NextAuth(authOptions); export { handler as GET, handler as POST };

Где смотреть конверсии

После настройки все отслеженные конверсии видны в аналитике воркспейса — в трёх представлениях:

  • График по времени — клики, лиды и продажи в динамике: Аналитика .
  • Воронка — конверсия и отвал на каждом шаге (клики → лиды → продажи): Аналитика в режиме воронки .
  • Поток событий — каждое событие конверсии по всем ссылкам воркспейса в реальном времени: События .
Last updated on