Вебмайстри: створення токена та підключення лендінга
Як створити вебмайстра в X10 CRM, отримати API-токен і підключити лендінг так, щоб заявки падали в CRM з правильними полями, джерелом і UTM.
Вебмайстер — це партнер або джерело трафіку, яке має власний токен і може створювати заявки в X10 CRM через публічний API. Кожна заявка автоматично підписується цим вебмайстром: видно джерело, працює облік і виплати. Ця сторінка проводить весь шлях — від створення токена до робочої форми на лендінгу.
Навіщо це потрібно з точки зору процесу — на сторінці CRM для товарного бізнесу: звідки беруться заявки, як рахується конверсія кожного джерела й за що ви платите партнеру.
#Крок 1. Створити вебмайстра й отримати токен
- 01
Відкрийте розділ «Вебмайстри»
У бічному меню CRM оберіть Вебмайстри. Тут список усіх партнерів, їхні токени, сума виплати й статус активності.
- 02
Натисніть «Додати вебмайстра»
Вкажіть ім'я (воно ж стане джерелом заявки в картці — пишіть зрозуміло:
Instagram Ads,Партнер Іванов,Landing shop-example) і суму виплати за заявку. Суму можна змінити пізніше. - 03
Скопіюйте токен
Токен генерується автоматично — це випадковий рядок на 43 символи. У таблиці поруч із ним одразу показано готову адресу API. Копіюйте кнопкою, а не виділенням мишкою: зайвий пробіл на кінці зламає авторизацію.
#Крок 2. Адреса API
Заявка створюється одним POST-запитом. Токен передається прямо в шляху — окремих заголовків авторизації не потрібно.
https://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 це номер створеної заявки:
{"ok": true, "lead_id": 10241}#Формат запиту
| Параметр | Значення |
|---|---|
| Метод | POST (інші методи — 405) |
| Content-Type | application/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рядок, до 80REF міста в довіднику Нової Пошти — якщо передати, оператору не доведеться шукати місто вручну.
settlement_refрядок, до 80REF населеного пункту НП.
np_departmentрядок, до 255Відділення або поштомат.
np_department_refрядок, до 80REF відділення НП.
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
// 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 - Кнопка відправки блокується на час запиту
- Після успішної відправки користувач бачить сторінку подяки