Перейти к содержимому

Приём по API: ключи, потоки, поля

5 мин чтения

Нативный приём — способ отдавать заказы в систему из своего кода: с лендинга, из скрипта партнёра, из чужой CRM. Один запрос на заказ, ответ сразу с номером, понятные коды ошибок и защита от повторной отправки.

Ключ приёма

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

Партнёрская сетьКлючи приёма
Партнёрская сеть → Ключи приёма
Секрет виден один раз при выпуске. В базе хранится только его хеш.Выпустить ключ
НазваниеПрефиксВебмастерЛимит, зап/минПоследнее обращение
Основной ключ AdsTeamvtx_a1b2c3d4…AdsTeam1202 минуты назад 213.145.1.5
Наш лендингvtx_9f8e7d6c…внутренний30014 минут назад
MobiLead, старыйотозванvtx_4b5a6978…MobiLead1203 дня назад
В списке виден только префикс ключа — по нему вы узнаёте свой ключ, не зная его целиком. Колонка «Последнее обращение» отвечает на самый частый вопрос при подключении: дошёл ли до нас хоть один запрос партнёра.
  1. 1Нажмите Выпустить ключ.
  2. 2Укажите Вебмастер — тогда все заказы по этому ключу закрепятся за партнёром, и статистика с выплатами посчитаются сами. Для своего лендинга оставьте Внутренний ключ.
  3. 3Выберите Поток по умолчанию, если у партнёра он один: тогда ему не нужно передавать код потока в каждом запросе.
  4. 4Заполните Разрешённые адреса, когда у партнёра постоянный сервер. Украденный ключ с чужого адреса работать не будет.
Ключи приёма → Новый ключ приёма

Название

Основной ключ AdsTeam

Вебмастер

AdsTeam

Поток по умолчанию

kg_fb_01 · Facebook, Чуй

Лимит запросов в минуту

120

Разрешённые адреса

213.145.1.5, 91.108.0.0/16

ОтменаВыпустить
Вебмастер и поток по умолчанию подставляются в каждый заказ по этому ключу — партнёру не нужно передавать их в запросе. «Разрешённые адреса» стоит заполнять, когда у партнёра постоянный сервер: с других адресов ключ работать перестанет, даже если его украли.

Запрос и поля

Один POST на адрес приёма, тело — JSON, ключ в заголовке Authorization:

curl -X POST https://ваш-проект.xe.kg/api/v1/intake/orders \
  -H 'Authorization: Bearer vtx_a1b2c3d4_ВАШ_СЕКРЕТ' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: order-12345' \
  -d '{
    "external_id": "12345",
    "flow": "kg_fb_01",
    "fio": "Асанов Азамат",
    "phones": ["0555123456"],
    "region": "Чуйская область",
    "city": "Бишкек",
    "address": "ул. Киевская, 95",
    "items": [{"product_id": 950, "quantity": 2}],
    "ip": "213.145.1.5",
    "time_spent": 47
  }'

Обязательное поле одно — phones: от одного до пяти номеров в любом виде, мы приведём их к международному. Заказ без телефона в колл-центре бесполезен, звонить по нему некому. Остальное:

ПолеЗачем
external_idНомер заказа у партнёра. По нему ловится повторная отправка и по нему же партнёр находит заказ в своём кабинете.
flowКод потока. Определяет ставку и приоритет прозвона. Неизвестный код заказ не отклоняет — теряется только связь с потоком.
itemsПозиции: product_id или alias товара, quantity, price. Цену можно не передавать — возьмём из ценовой сетки проекта.
totalИтог. Если передан, он перебивает расчёт по сетке: партнёр мог договориться с клиентом о своей цене.
ipАдрес клиента, а не вашего сервера. По нему работают лимиты и чёрные списки.
time_spentСекунды от захода на страницу до отправки формы. Отсекает роботов, заполняющих форму за секунду.
timezone_offsetСдвиг клиента от UTC в минутах, как отдаёт getTimezoneOffset. Нужен, чтобы не звонить человеку ночью.
utmsource, medium, campaign, term, content — попадают в заказ и в отчёты по источникам.
customВаши поля проекта: домофон, удобное время, что угодно из настроек полей.

Ещё принимаются email, country, region, city, address, house, flat, post_index, comment, domain, referer. Незнакомое поле в теле — ошибка, а не молчаливое игнорирование: опечатку в имени лучше заметить при подключении, чем через месяц по пустым адресам.

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

Успех — код 201 и номер, по которому заказ ищется у нас и у партнёра:

{
  "order_id": 100000042,
  "number": 42,
  "status": "Обработка",
  "duplicate_of": [100000019],
  "idempotent_replay": false
}

duplicate_of — прошлые заказы с тем же телефоном; заказ при этом принят, просто оператор увидит историю клиента. idempotent_replay отвечает на вопрос «создался ли новый заказ»: true означает, что вернулся уже существующий.

КодЧто случилось
401Ключ не передан, отозван или недействителен.
403Адрес не входит в список разрешённых для этого ключа.
422Заказ отклонён: не разобран телефон, сработал антифрод, отключён поток, закрыт проект. Причина — в теле ответа.
429Превышен лимит запросов в минуту. Повторите через число секунд из заголовка Retry-After.
5xxНаша ошибка. Повторите запрос с тем же external_id.

Повторы и лимиты

Партнёрские скрипты повторяют запрос при таймауте — это нормально и с этим надо жить, иначе один заказ превращается в три, а оператор звонит клиенту трижды. Поэтому конвейер сначала ищет заказ, уже созданный с тем же внешним номером, и при находке возвращает его же с idempotent_replay: true. Ключом служит Idempotency-Key, а если заголовка нет — external_id.

Лимит запросов задаётся на каждый ключ отдельно, по умолчанию 120 в минуту. Он не про экономию, а про предсказуемость: сломавшийся скрипт партнёра не должен положить приём всем остальным. Если партнёр упирается в лимит на живом трафике, поднимите значение в его ключе — сотня заказов в минуту от одного вебмастера бывает.

Что отдать партнёру

Не переписывайте эту статью в переписку. В списке ключей у каждой строки есть кнопка документации: она копирует ссылку вида /partner-docs?src=… с подписью. Открывается без пароля и собрана под конкретный проект — там уже подставлены адрес приёма, список товаров с идентификаторами для goodID, доступные партнёру потоки, таблица полей с их именами в формате LeadVertex, готовые примеры запросов, коды ошибок, статусы проекта и список макросов постбэков.

  • Токен по этой ссылке не передаётся — только подпись, восстановить ключ по ней нельзя.
  • Отозвали ключ — документация по его ссылке перестаёт открываться.
  • Проверять, дошли ли запросы, удобнее по колонке Последнее обращение и по журналу приёма: Способы передачи заказов.

Если у партнёра уже написана интеграция под LeadVertex, нативный формат ему не нужен: тот же ключ работает на совместимом адресе, подробности — в статье Приём в формате LeadVertex. Правила проверки заявок общие для обоих форматов и описаны в Антифроде.

Не нашли ответ

Напишите на hello@xe.kg — ответим и дополним статью. Так она и растёт.