Коннекторы рекламных сетей и сервисов позволяют выгружать из них данные о расходах на трафик. Эти данные используются для формирования статистики по ROI.
Общие принципы работы
Коннектор реализует функцию fetch, которая отвечает за выгрузку данных и возвращает массив с расходами за период. Функция должна запросить сведения из сервиса и разбить их по указанным критериям, например, UTM-метке.
Результирующий массив может включать следующие поля:
cpc- стоимость за один клик.cost- общая стоимость всех кликов по указанным условиям.currency- ISO-код валюты цены, например, usd.fromиto- lаты начала и окончания периода, по которому задавать цену, в формате UNIX Timestamp.flow- идентификатор потока.utms- меткаutm_source.utmc- меткаutm_campaign.utmn- меткаutm_content.utmt- меткаutm_term.utmm- меткаutm_medium.extu- метка "Идентификатор" для агентств.exts- метка "Источник" для агентств.
В запросе обязательно должны присутствовать параметры cpc или cost и хотя бы одно условие (даты, поток, UTM-метки). Цена присваивается только тем кликам, которые система считает входящими - уникальным кликам на прелендингах и уникальным кликам на лендингах без использования прелендинга.
Создание коннектора
Работа с коннкеторами для рекламных сетей ведется в разделе "Рекламные сети" по кнопке "Файлы". Сами файлы коннекторов располагаются в папке adv вашего хака. Название файла может состоять из маленьких латинских букв и цифр. Оно обязательно должно начинаться с буквы, а не цифры. Нельзя использовать заглавные буквы и спецсимволы, в том числе дефис или знак подчёркивания.
В момент создания коннектора, в файле автоматически создаётся соответствующий класс. Название класса состоит из слова adv, названия хака и названия коннектора, разделенных знаком подчёркивания, например: adv_facebook. Коннектор должен наследоваться от класса advbase.
В коннекторе должно быть определено поле $auths с массивом данных для авторизации и функция fetch для выгрузки данных.
class adv_facebook extends advbase {
// Auth parameters: login, pass, api
public $auths = [ 'login', 'pass' ];
// Fetcher
public function fetch() {
$info = curl( "https://some.url/api", [
"login" => $this->auths["login"],
"pass" => $this->auths["pass"],
"from" => $this->from(),
"to" => $this->to(),
]);
foreach ( $info["stats"] as $d ) {
if ( ! $d["spent"] ) continue;
$data[] = [
"from" => $this->from(),
"to" => $this->to(),
$this->field() => $d["item"],
"cost" => $d["spent"],
"currency" => $d["currency"],
];
}
return $data;
}
}
Чтобы созданный коннектор красиво показывалось в списке, добавьте в языковой файл поле advrt_name, где вместо name указывается название созданного коннектора. Вы также можете использовать advrt_name_d для добавления описания коннектора и его настроек.
'advrt_facebook' => 'Facebook', 'advrt_facebook_d' => 'Выгрузка расходов из Facebook. В настройках укажите токен из личного кабинета, который начинается на EAAB',
Подключение к системе
Коннекторы не появятся в списке рекламных сетей автоматически, вам нужно указать их через файл запуска. Для этого в массиве инициализации укажите ключ adv, а в качестве значения - список доступных в вашем хаке коннекторов. Например:
return [ /* другие команды инициализации */ 'adv' => [ 'facebook' ], ];
Особенности реализации
В начале файла обязательно укажите параметры, необходимые для настройки авторизации. Эти поля будут показаны в форме настройки рекламной сети. Они указываются в поле $auths в виде массива, например:
public $auths = [ 'login', 'pass' ];
В качестве параметров могут использоваться:
url- ссылка или домен для выгрузки данных.login- логин для доступа к сервису.pass- пароль для доступа к сервису.api- ключ API от сервиса.key- секретный ключ API от сервиса.
Внутри класса вы можете использовать полезные функции для доступа к конфигурации:
$this->config[$name]- массив конфигурации.$this->auths[$name]- массив данных для доступа.$this->from()- начало периода выгрузки в формате UNIX timestamp.$this->to()- окончание периода выгрузки в формате UNIX timestamp.$this->field()- поле, по которому определяется идентификатор кампании.$this->curl( $url, $post, $cc )- журналируемый запрос к сервер по$urlс необязательными параметрами данных в$postи конфигурации в$cc.$this->json( $url, $post, $cc )- CURL-запрос с получением данных в формате JSON.
Любые запросы к серверу рекомендуется делать через встроенные функции curl или json, чтобы любые запросы сохранялись в журнале и их можно было проанализировать в случае ошибок.
Функция настройки
Чтобы добавить дополнительные поля к настройкам, необходимо реализовать две функции:
form- возвращает массив с дополнительными полями формы.save- принимает сырые данные и возвращает массив с полями конфигурации.
Функция form не имеет параметров. Доступ к полям конфигурации должен выполняться через массив $this->config. Результатом работы функции должен быть массив полей формы. Каждое поле - это массив, который может содержать следующие поля:
type- тип поля:text,email,textarea,number,select,mselect,radio,checkbox.name- название поля, рекомендуется добавлять префикс с названием модуля.head- заголовок поля, используйте языковой файл для хранения.descr- описание поля, используйте языковой файл для хранения.value- текущее значение поля, используйте$this->config.options- набор опций для полей типаselect,mselect,radio.checked- пометка для поля типаcheckbox.
Пример реализации формы:
public function form() {
$cur = $this->config['cur'] ? $this->config['cur'] : 'usd';
return [
[ 'type' => 'select', 'name' => 'dolphin_type', 'head' => $this->core->lang['advrt_dolphin_f'], 'value' => $this->config['type'], 'options' => $this->core->lang['advrt_dolphin_t'] ],
[ 'type' => 'select', 'name' => 'dolphin_cur', 'head' => $this->core->lang['currency'], 'value' => $cur, 'options' => $this->core->currency->codes ],
];
}
Функция save получает на вход параметр $data и должна вернуть обработанный массив параметров в виде ключ-значение. Текстовые значения обработайте через $this->esc(). Пример реализации:
public function save( $data ) {
return [
'type' => (int) $data['dolphin_type'],
'cur' => $this->core->text->link( $data['dolphin_cur'] ),
];
}