Отправка лидов может использоваться в четырёх ситуациях:
- Отправка новых лидов в CRM. Классическая передача лидов в стороннюю сеть. Каждую минуту все лиды в статусе "Новый" отправляются в целевую CRM. При удачной отправке, лид переводится в статус "Обработка". При проблемах - в статус "Отмена" с соответствующей причиной. При ошибках отправки остаётся в статусе "Новый" для отправки через минуту.
- Отправка апсейлов и изменений. Иногда лид может быть изменён запросом с сайта, который отправлен со страницы "Спасибо". Изменения отправляются в целевую CRM каждую минуту.
- Отправка принятых лидов в CRM. Отправляет в целевую сеть лиды после обработки колл-центром. Вы можете выбрать статус, из которого происходит отправка. Из "Упаковки" удобно отдавать лиды в службу фулфилмента, из "Отправки" - в службу доставки, из "Доставки" - в колл-центр мониторинга доставки.
- Синхронная отправка лидов на регистрацию. Отправляет данные в целевую CRM в момент поступления лида. Требуется для реализации механизма автоматического входа (автологин).
Все интеграции имеют аналогичный подход к ссылкам, полям и коду обработки. Запрос выполняется отдельно для каждого лида. Ссылки и поля работают с одинаковыми набором макросов. Код обработки всегда должен заканчиваться возвратом результата.
URL добавления
Это адрес, на который будет выполняться запрос. Вы можете использовать эти макросы в адресе:
{id}
- идентификатор заказа.{ip}
- IP-адрес покупателя.{wm}
- идентификатор вебмастера.{wmi}
- умный идентификатор вебмастера, который отправляет данные в виде агент-веб для агентского трафика.{name}
- имя покупателя.{phone}
- телефон покупателя.{ofp:xxx}
- значение параметра оффера с названием xxx.{ofpg:xxx}
- значение гео-зависимого параметра оффера с названием xxx.{meta:xxx}
- значение дополнительного поля заказа с названием xxx.{goal:xxx}
- значение параметра цели с названием xxx.{site:xxx}
- значение параметра сайта с названием xxx.
Вы также можете манипулировать адресом через переменную $url
в коде предобработки.
Код предобработки
Основные методы использования кода предобработки описаны в соответствующем разделе документации. При отправке лидов вам доступны следующие переменные с данными:
$o
- необработанные данные заказа, полученные напрямую из базы.$o['order_country']
- ISO-код страны заказа.$o['offer_id']
- идентификатор оффера.$ofps
- параметры оффера.$ofpg
- гео-зависимые параметры оффера.$gpar
- параметры цели.$spar
- параметры сайта.$vars
- вложенные товары.$meta
- дополнительные поля заказа.
При работе с товарными интеграциями, может потребоваться получение состава заказа. Он хранится в поле $o['order_items']
, которое можно получить так:
$its = xxdec( $o['order_items'] );
Внутри $its
хранится массив товаров в заказе. Ключ массива - идентификатор товара. Поля массива:
- 0: количество товара в заказе.
- 1: цена единицы товара в валюте заказа.
- 2: себестоимость единицы товара в валюте заказа.
Пример подготовки массива товаров для отправки:
$post['items'] = []; $its = xxdec( $o['order_items'] ); $itp = $core->cpa->get( 'vpar', $o['offer_id'], 'sku' ); foreach ( $its as $it => $iv ) { $post['items'][] = [ 'id' => $itp[$it], 'price' => $iv[1], 'amount' => $iv[0], ]; }
Поля данных
Состав заказа лучше всего формировать через поля. Список полей задаётся в формате "название значение" через пробел, каждое поле - в своей строке. В качестве значения может выступать либо какая-то строка, либо какой-то макрос. Можно также указать макросы внутри строки.
Основные поля данных:
{id}
- идентификатор заказа.{eid}
- зашифрованный идентификатор заказа.{ext}
- идентификатор заказа на стороне целевой CRM (для отправки изменений).{name}
- имя покупателя.{last}
- фамилия покупателя из произвольного поляlast
.{fname}
- полное имя покупателя.{email}
- адрес почты покупателя.{pass}
- пароль покупателя из произвольного поляpass
.{lang}
- язык покупателя из поляlang
или данных страны.{langup}
- язык покупателя заглавными буквами.{iname}
и{ilast}
- умные имя и фамилия, полученные из дополнительных полей или методом разделения имени пополам (использовать только парой).{ipass}
- умный пароль, полученный из поля pass или сгенерированный на лету.{imail}
- умная почта, генерируется при пустом поле в видеhash@gmail.com
.{phone}
- телефон покупателя.{iphone}
- телефон покупателя с символом + впереди.{cphone}
- телефон покупателя без кода страны.{phonecc}
- телефонный код страны из полейphonecc
иphc
.{iphonecc}
- телефонный код страны с символом + впереди.{geo}
и{country}
- ISO-код страны маленькими буквами.{geoup}
- ISO-код страны заглавными буквами.{comment}
- комментарий к заказу.{index}
- почтовый индекс доставки.{area}
- регион страны доставки.{city}
- город доставки.{street}
- улица.{house}
- дом, корпус и квартира.{addr}
- адрес доставки без индекса.{fulladdr}
- адрес доставки с индеком.{straddr}
- адрес доставки из улицы и дома.{delivery}
- внутренний идентификатор типа доставки.{discount}
- процент скидки на товар.{count}
- количество товара.{currency}
- внутренний идентификатор валюты в системе.{curr}
- трёхбуквенный ISO-код валюты.{price}
- общая цена заказа.{base}
- цена единицы товара.{delpr}
- цена доставки.{more}
- дополнительная наценка или скидка на доставку в валюте заказа.{offer}
- идентификатор оффера в системе.{siteurl}
- умный адрес лендинга, который использует параметрurl
, реальный адрес сайта заказа или адрес сайта по умолчанию.{sitename}
- название лендинга.{spaceurl}
- адрес прелендинга.{spacename}
- название прелендинга.{land}
- адрес лендинга при наличии.{preland}
- адрес прелендинга при наличии.{domain}
- домен сайта при наличии.{click}
- внутренний идентификатор клика.{wm}
- идентификатор вебмастера.{wmi}
- умный идентификатор вебмастера, который отправляет данные в виде агент-веб для агентского трафика.{wmname}
- имя вебмастера.{wmmail}
- email вебмастера.{exti}
- идентификатор агентства.{extu}
- идентификатор заказа на стороне агентства.{exts}
- идентификатор источника на стороне агентства.{subid}
- значение меткиsubid
илиx32
.{uuid}
- значение меткиuuid
илиx64
.{sub1}
- значение меткиsub1
.{sub2}
- значение меткиsub2
.{sub3}
- значение меткиsub3
.{sub4}
- значение меткиsub4
.{sub5}
- значение меткиsub5
.{utms}
- значение меткиutm_source.
{utmc}
- значение меткиutm_campaign
.{utmn}
- значение меткиutm_content
.{utmt}
- значение меткиutm_term
.{utmm}
- значение меткиutm_medium
.{ip}
- IP-адрес покупателя.{ip4}
- IPv4-адрес покупателя или пустота для IPv6.{ip6}
- IPv6-адрес покупателя или пустота для IPv4.{ua}
- User-Agent покупателя.{mobile}
- тип трафика: 0 - десктоп, 1 - мобильный.{bad}
- качество трафика: 0 - обычный, 1 - подозрительный.{cwm}
- сумма отчисления вебмастеру в системной валюте.{cwmr}
- сумма отчисления вебмастеру в реальной валюте.{cwmc}
- ISO-код реальной валюты отчисления вебмастеру.{cpay}
- сумма отчисления рекламодателю в системной валюте.{cpayr}
- сумма отчисления рекламодателю в реальной валюте.{cpayc}
- ISO-код реальной валюты отчисления рекламодателю.
Параметрические поля подставят значение соответствующего параметра с названием xxx
:
{ofp:xxx}
- параметр оффер.{ofpg:xxx}
- гео-зависимый параметр оффера.{goal:xxx}
- параметр цели.{site:xxx}
- параметр лендинга.{space:xxx}
- параметр прелендинга.{offer:xxx}
- основное поле оффера.{meta:xxx}
- произвольное поле заказа.{file:xxx}
- прикреплённый файл из произвольного поля.
В произвольных полях заказа могут использоваться файлы. Отправка файлов поддерживается только при использовании стандартного формата multipart/form-data, передача файлов в JSON-запросах не поддерживается.
Общие сведения о коде обработки
Код обработки получает на вход переменную $result
. Она содержит сырые данные ответа сервера. Чаще всего ответ сервера приходит в формате JSON, поэтому результат лучше преобразовать к массиву вот так:
$r = xxdec( $result );
Код обработки должен возвращать результат в случае успеха. Если обработка вернёт false или не вернёт результата, считается, что запрос не удался. Такой запрос будет поставлен в очередь для повторной отправки.
Код обработки для новых лидов
При отправке новых лидов, система ожидает увидеть ID нового лида или код ошибки добавления. Если код обработки вернул отрицательное целое число - оно расценивается как ID причины отказа и лид отменяется. Любое другое значение считается идентификатором лида.
Например, API-функция добавления заказов у поставщика выдаёт нам { status: "ok", id: 123 }
в случае успеха, и { status: "error", error: "double" }
в случае ошибки добавления заказа с указанием кода ошибки. Код, который реализует это, будет выглядеть вот так:
$r = xxdec( $result ); if ( $r['status'] == 'ok' ) return $r['id']; if ( $r['error'] == 'double' ) return -7; if ( $r['error'] == 'geo' ) return -5; if ( $r['error'] == 'phone' ) return -1; return false;
Заглушка для отправки новых лидов
Иногда новые лиды отправлять не нужно, достаточно перенести заказ в статус обработки. Такое случается при добавлении лидов по API с указанием внешнего ID заказа или при синхронной отправке лида на регистрацию.
Для включения заглушки, оставьте все поля блока "Отправка новых лидов" пустыми и поставьте галочку "Включить интеграцию передачи заказов". Заказы будут переводиться в статус "Обработка" раз в минуту. Если у заказов нет внешнего ID, вместо него будет вписан внутренний ID заказа.
Код обработки для изменений лида
Обработка изменений ожидает от кода только два значения - успех или неудачу. Любое не пустое значение будет расцениваться как успех. Пример реализации:
$r = xxdec( $result ); return ( $r['status'] == 'ok' ) ? true : false;
Код обработки для принятых заказов
При обработке принятых заказов, система ожидает от кода идентификатор заказа на стороне CRM. Любое не пустое значение расценивается как идентификатор. Пример реализации:
$r = xxdec( $result ); if ( $r['status'] == 'ok' ) { return $r['id']; } else return false;
Код обработки для синхронной отправки
При синхронной отправке, система ожидает от кода ссылку входа в личный кабинет для заказчика. Но получает её крайне редко, поэтому готова смириться с некоторыми вариантами.
- Полноценный URL будет расцениваться как удачная отправка лида. Пользователь будет перенаправлен по указанному адресу в личный кабинет. Заказ остаётся в статусе "Новый" и ожидает последующей классической отправки.
- Строка текста будет расценена как сообщение об ошибке, оно будет показано пользователю на сайте. Сама отправка будет считаться неудачной - такой лид автоматически переводится в статус "Удалён".
- Отрицательное число будет считаться кодом причины отказа, как при отправке новых лидов. Лид будет отменён с указанной причиной. Пользователь при этом увидит страницу "Спасибо".
- Положительное целое число будет расцениваться как идентификатор лида. Отправка считается успешной, лид переводится в статус "Обработка" с указанным ID. Пользователь видит страницу "Спасибо".
- Строка вида
id:xxx
(символыid
, двоеточие и произвольное значение) также будет расцениваться как идентификатор лида, аналогично предыдущему пункту. - Пустой ответ расценивается как ошибка отправки. Лид остаётся в статусе "Новый" и отправляется на классическую отправку.
Классическая обработка синхронной отправки выглядит вот так:
$r = xxdec( $result ); if ( $r['autologin_url'] ) return $r['autologin_url']; if ( $r['error_message'] ) return $r['error_message']; return 'Registration failed, try again later';
Классическая обработка никогда не применяется. Реальный код обработки гораздо сложнее и учитывает множество вариаций. В обработчике рекомендуется сразу же устанавливать внешний ID лида, если он был получен.
$core->lead->edit( $o['order_id'], [ 'exto' => $result['id'] ] );
Пример полного кода обработки:
$result = json_decode( $result, true ); if ( $result['status'] == 'ok' ) { $core->lead->edit( $o['order_id'], [ 'exto' => $result['id'] ] ); return $result['url'] ? $result['url'] : false; } if ( $result['message'] ) return $result['message']; if ( $result['error'] == 'duplicate' ) return -7; if ( $result['error'] == 'ban' ) return -12; if ( $result['error'] == 'traffic' ) return -15; return 'Registration failed, try again later';
Использование только синхронной отправки является небезопасным с точки зрения потери трафика. Если целевая CRM не смогла ответить, лид так и не будет в неё передан. Поэтому рекомендуется совмещать синхронную и классическую отправки. При этом, чтобы лид не был отправлен дважды, необходимо выполнить ряд действий.
При успешном выполнении синхронной отправки в обязательном порядке укажите внешний идентификатор лида, как описано выше. Если целевая CRM не использует свои индентификаторы, воспользуйтесь внутренним:
$core->lead->edit( $o['order_id'], [ 'exto' => $o['order_id'] ] );
В конец кода предобработки для отправки новых лидов добавьте следующие строчки:
if ( $o['ext_oid'] ) { $url = $post = false; $result = true; }
В начало кода обработки добавьте строчку:
if ( $o['ext_oid'] ) return $o['ext_oid'];
Эти манипуляции отключат реальный повторный запрос к целевой CRM и просто пометят лид статусом "В обработке".