Вебмайстри: створення токена та підключення лендінга

Як створити вебмайстра в 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
  • Кнопка відправки блокується на час запиту
  • Після успішної відправки користувач бачить сторінку подяки