Вебмастеры: создание токена и подключение лендинга

Как создать вебмастера в X10 CRM, получить API-токен и подключить лендинг так, чтобы заявки падали в CRM с правильными полями, источником и UTM.

Вебмастер — это партнёр или источник трафика, у которого есть собственный токен и который может создавать заявки в X10 CRM через публичный API. Каждая заявка автоматически подписывается этим вебмастером: виден источник, работает учёт и выплаты. Эта страница проводит весь путь — от создания токена до рабочей формы на лендинге.

Зачем это нужно с точки зрения процесса — на странице CRM для товарного бизнеса: откуда берутся заявки, как считается конверсия каждого источника и за что вы платите партнёру.

#Шаг 1. Создать вебмастера и получить токен

  1. 01

    Откройте раздел «Вебмастеры»

    В боковом меню CRM выберите Вебмастеры. Здесь список всех партнёров, их токены, сумма выплаты и статус активности.

  2. 02

    Нажмите «Добавить вебмастера»

    Укажите имя (оно же станет источником заявки в карточке — пишите понятно: Instagram Ads, Партнёр Иванов, Landing shop-example) и сумму выплаты за заявку. Сумму можно изменить позже.

  3. 03

    Скопируйте токен

    Токен генерируется автоматически — это случайная строка из 43 символов. В таблице рядом с ним сразу показан готовый адрес API. Копируйте кнопкой, а не выделением мышкой: лишний пробел в конце сломает авторизацию.

#Шаг 2. Адрес API

Заявка создаётся одним POST-запросом. Токен передаётся прямо в пути — отдельных заголовков авторизации не нужно.

POSThttps://crm.your-domain.com/api/webmasters/{TOKEN}/leads/create/
  • crm.your-domain.com — замените на адрес вашей CRM (тот же, на который вы заходите в систему).
  • {TOKEN} — токен вебмастера из предыдущего шага.
  • Слеш в конце адреса обязателен.
  • Метод — только POST. GET вернёт 405.

#Шаг 3. Первый тестовый запрос

Прежде чем трогать лендинг, убедитесь, что токен рабочий. Выполните запрос из терминала — заявка должна появиться в CRM за несколько секунд.

Проверка токена
curl -X POST "https://crm.your-domain.com/api/webmasters/YOUR_TOKEN/leads/create/" \
  -H "Content-Type: application/json" \
  -d '{"phone": "380681234567", "fullname": "Тест из документации"}'

Успешный ответ выглядит так — lead_id это номер созданной заявки:

json
{"ok": true, "lead_id": 10241}

#Формат запроса

ПараметрЗначение
МетодPOST (другие методы — 405)
Content-Typeapplication/json или application/x-www-form-urlencoded (обычная HTML-форма)
АвторизацияТокен в пути. Никаких заголовков, кук или CSRF-токена не нужно
КодировкаUTF-8, кириллица поддерживается

#Поля заявки

Обязательное поле только одно — phone. Остальные необязательны, но чем больше вы передадите, тем меньше оператор дозаполняет руками.

Обязательное

  • phoneстрока, до 32обязательное

    Телефон клиента. Всё, кроме цифр, вырезается автоматически: +38 (068) 123-45-67 сохранится как 380681234567. Советуем сразу слать международный формат без плюса.

Основные поля карточки

  • fullnameстрока, до 200

    Имя клиента.

  • commentтекст

    Комментарий к заявке. Сюда удобно класть состав заказа, товар, количество.

  • landingстрока, до 255

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

  • project_idчисло

    ID проекта в CRM, куда должна попасть заявка. Если не передать — заявка создастся без проекта.

  • date_of_birthстрока

    Дата рождения в формате дд.мм.гггг или гггг-мм-дд. Другой формат сохранится как есть, без ошибки.

  • last_order_checkтекст

    Справка о предыдущем заказе клиента.

  • prev_delivery_cityстрока, до 255

    Город предыдущей доставки.

  • prev_np_departmentстрока, до 255

    Отделение предыдущей доставки.

Доставка

  • cityстрока, до 255

    Населённый пункт.

  • city_refстрока, до 80

    REF города в справочнике Новой Почты — если передать, оператору не придётся искать город вручную.

  • settlement_refстрока, до 80

    REF населённого пункта НП.

  • np_departmentстрока, до 255

    Отделение или почтомат.

  • np_department_refстрока, до 80

    REF отделения НП.

  • address, house, flat, floor, entranceстрока, до 255

    Адресная доставка: улица, дом, квартира, этаж, подъезд.

  • delivery_type, payment_typeстрока, до 255

    Способ доставки и оплаты, как их выбрал клиент на лендинге.

Метки трафика

  • utm_source, utm_medium, utm_campaign, utm_content, utm_termстрока, до 255

    Стандартные UTM. Передавайте их всегда — это единственный способ понять, какая именно кампания принесла заявку.

#Что CRM проставляет сама

ПолеЗначение
ИсточникИмя вебмастера, которому принадлежит токен
Тип источникаwebmaster + привязка к конкретному вебмастеру для отчётов и выплат
СтатусСтатус с кодом new. Если такого статуса в CRM нет — заявка создастся без статуса
МенеджерНе назначается: заявка идёт в общую очередь
КонтактИщется по такому же номеру. Если клиент уже есть — заявка цепляется к существующему контакту, имя дописывается только когда оно было пустым

#Шаг 4. Подключить лендинг

Есть три рабочих способа. Самый надёжный — первый: токен остаётся на сервере, а вы видите результат каждого запроса.

php
<?php
// send-lead.php — форма лендинга шлёт сюда, а уже этот файл — в CRM.
// Токен остаётся на сервере и не попадает в код страницы.

$token = getenv('X10_WM_TOKEN');
$url   = "https://crm.your-domain.com/api/webmasters/{$token}/leads/create/";

$payload = [
    'phone'        => $_POST['phone']    ?? '',
    'fullname'     => $_POST['name']     ?? '',
    'comment'      => $_POST['comment']  ?? '',
    'landing'      => $_SERVER['HTTP_HOST'] ?? '',
    'city'         => $_POST['city']     ?? '',
    'np_department'=> $_POST['np']       ?? '',
    'utm_source'   => $_POST['utm_source']   ?? '',
    'utm_medium'   => $_POST['utm_medium']   ?? '',
    'utm_campaign' => $_POST['utm_campaign'] ?? '',
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($payload, JSON_UNESCAPED_UNICODE),
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 10,
]);

$response = curl_exec($ch);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status === 200) {
    header('Location: /thank-you');
    exit;
}

error_log("X10 CRM: заявка не создана. HTTP {$status} {$response}");
header('Location: /?error=1');

#Ответы и ошибки

КодТело ответаЧто произошло
200{"ok": true, "lead_id": 10241}Заявка создана, lead_id — её номер в CRM
400{"error": "phone_required"}Не передан phone или он пуст после очистки от нецифровых символов
403{"error": "invalid_token"}Токен не существует, скопирован с лишними символами, или вебмастер отключён
405Запрос выполнен не методом POST

#Безопасность токена

  • Токен позволяет только создавать заявки. Он не даёт доступа к базе, звонкам или настройкам.
  • В браузерном варианте токен виден в коде страницы. Это приемлемый риск (максимум — спам-заявки), но если источник трафика сомнительный, лучше проксировать запрос через свой бэкенд.
  • Скомпрометированный токен меняется за полминуты: Вебмастеры → редактировать → Сгенерировать новый токен. Старый перестаёт работать мгновенно — не забудьте обновить все лендинги.
  • Чтобы временно отключить партнёра, снимите галочку Активен: API сразу начнёт отдавать 403, а история заявок сохранится.

#Если что-то не работает

СимптомПричинаЧто делать
403 invalid_tokenПробел или перенос строки в токене; вебмастер отключён; токен перегенерированСкопируйте токен кнопкой в CRM, проверьте переключатель «Активен»
400 phone_requiredПоле на лендинге называется tel, telephone, user_phoneПоле должно называться ровно phone
Заявка создаётся, но поля пустыеНазвания полей не совпадают со спискомСверьте названия с разделом «Поля заявки». Всё лишнее ищите в metadata.payload заявки
Заявка без статусаВ CRM нет статуса с кодом newНастройки → CRM → Статусы: добавьте или переименуйте код статуса на new
В консоли браузера ошибка CORSДомен лендинга ещё не добавлен в список разрешённых источников CRMПришлите нам домен — добавим в разрешённые. Или отправляйте запрос со своего сервера (вариант PHP)
Дубли одинаковых заявокФорма отправляется несколько раз подрядБлокируйте кнопку отправки до завершения запроса
Заявок нет вообщеНеправильный домен CRM или потерянный слеш в конце адресаПроверьте адрес из раздела «Адрес API» — слеш в конце обязателен

#Чек-лист перед запуском трафика

  • Вебмастер создан, указана сумма выплаты, переключатель «Активен» включён
  • Тестовый запрос через cURL вернул {"ok": true} и заявка видна в CRM
  • Поле phone приходит в международном формате
  • Передаётся landing — чтобы разделять сайты
  • Передаются UTM-метки из адреса страницы
  • Если отправка идёт из браузера — домен лендинга добавлен в разрешённые источники CRM
  • В CRM есть статус с кодом new
  • Кнопка отправки блокируется на время запроса
  • После успешной отправки пользователь видит страницу благодарности