Вебмастеры: создание токена и подключение лендинга
Как создать вебмастера в 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 - Кнопка отправки блокируется на время запроса
- После успешной отправки пользователь видит страницу благодарности