Other in archive
- Сервер документації (+тимчасово для скриптів автоматизації)
- Перехоплення пустого адтайтлу | FB n2s (костиль)
- News site
- Задачі
- System1 | отримання партнерського посилання і подача задачі
- domain active постбеки та пікселі
- Макроси для джерел трафіку
- Створити pixel / dataset у Facebook
- Tonic Facebook RSOC - отримання посилання (за комплаєнсом)
- Tonic - RSOC
Сервер документації (+тимчасово для скриптів автоматизації)
Первинні налаштування
Треба створити користувача sudo (щоб не працювати з під root)
adduser oleksandr-d
занести користувача в групу sudo
sudo usermod -aG sudo oleksandr-d
Встановлюю PHP та модулі
sudo apt install -y php-cli php-openssl php-mbstring php-iconv php-tokenizer php-gd php-mysql php-xml php-ldap php-curl php-gd php-simplexml php-dom php-pdo
Встановлюю php-fpm, щоб використовувати nginx, як web-сервер.
sudo apt install php-fpm
Встановлюю MySQL
sudo apt install mysql-server
sudo mysql_secure_installation
# Remove anonymous users? [Y/n] Type Y
# Disallow root login remotely? [Y/n] Type Y
# Remove test database and access to it? [Y/n] Type Y
# Reload privilege tables now? [Y/n] Type Y
Налаштовую php-fpm
sudo nano /etc/php/8.3/fpm/php.ini
file_uploads = On
allow_url_fopen = On
memory_limit = 256M
upload_max_filesize = 100M
cgi.fix_pathinfo = 0
max_execution_time = 360
date.timezone = Europe/Kyiv
Встановлюю Composer
Завантажте сценарій інсталятора Composer.
curl -sS https://getcomposer.org/installer -o composer-setup.php
Виконайте наведені нижче команди, щоб перевірити інсталятор.
HASH=`curl -sS https://composer.github.io/installer.sig`
echo $HASH
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Наведені вище команди захоплюють хеш-значення інсталятора та зіставляють його із завантаженим сценарієм. Ви повинні побачити такі дані, якщо інсталятор безпечний для запуску.
Installer verified
Встановіть Composer.
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Перевірте інсталяцію, перевіривши її версію.
composer --version
Створюю базу даних bookstack з користувачем bookstackuser та даю йому повний доступ до цієї бази даних.
sudo mysql
CREATE DATABASE bookstack;
CREATE USER 'bookstackuser'@'localhost' IDENTIFIED WITH mysql_native_password BY '********************';
GRANT ALL ON bookstack.* TO 'bookstackuser'@'localhost'; FLUSH PRIVILEGES;
exit
Дозволяю доступ по ssh через порт 22
sudo ufw allow ssh
Встановлюємо Nginx та надаю доступ до портів
sudo apt install nginx
sudo ufw allow 'Nginx Full'
Перевіряємо налаштування брандмауера (необхідні налаштування є в списку відповіді) та потім вмикаємо його
sudo ufw app list
# Available applications:
# Nginx Full
# Nginx HTTP
# Nginx HTTPS
# OpenSSH
sudo ufw enable
sudo ufw status
# Status: active
# To Action From
# -- ------ ----
# 22/tcp ALLOW Anywhere
# Nginx Full ALLOW Anywhere
# 22/tcp (v6) ALLOW Anywhere (v6)
# Nginx Full (v6) ALLOW Anywhere (v6)
Завантажую сам BookStack та налаштовую
Створіть кореневу папку для програми BookStack.
sudo mkdir -p /var/www/bookstack
Роблю власником себе (поточного юзера з якого працюю), щоб не працювати постійно з sudo та для nginx
sudo chown -R oleksandr-d:www-data /var/www/bookstack
Переходжу в створену папку, та клоную репозиторій з BookStack (крапка в кінці треба, щоб розпакувалось в поточну папку. а не створювалась нова).
cd /var/www/bookstack
git clone https://github.com/BookStackApp/BookStack.git --branch=release --single-branch .
Встановлюємо Composer для bookstack
composer install --no-dev
Копіюю файл, та налаштовую дані для додатку
cp .env.example .env
Відкрийте файл для редагування.
nano .env
Заповніть URL-адресу програми та дані бази даних. Якщо ви збираєтеся використовувати функції електронної пошти, заповніть дані SMTP або видаліть їх із файлу.
APP_URL=https://doc.rtb-system.online
DB_HOST=localhost
DB_DATABASE=bookstack
DB_USERNAME=bookstackuser
DB_PASSWORD=**********************
# Can be 'smtp' or 'sendmail'
MAIL_DRIVER=smtp
MAIL_FROM_NAME="RTB Documentation"
MAIL_FROM=my@email.com
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=my@email.com
MAIL_PASSWORD="**** **** **** ****"
MAIL_ENCRYPTION=tls
Далі генерую ключ для artisan який запишеться в файл .env
php artisan key:generate
Налаштовую додаткові права для юзера до каталогу з bookstack
sudo chown -R oleksandr-d:www-data /var/www/bookstack
sudo chmod -R 755 /var/www/bookstack
sudo chmod -R 775 /var/www/bookstack/storage /var/www/bookstack/bootstrap/cache /var/www/bookstack/public/uploads
sudo chmod 640 /var/www/bookstack/.env
Роблю artisan міграцію
php artisan migrate
Далі встановимо та налаштуємо certbot та конфігурацію nginx
Спочатку зупинимо nginx
sudo systemctl stop nginx.service
Встановлюємо Certbot
sudo apt install snapd
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Перевірити версію
certbot --version
Генеруємо сертифікат
sudo certbot certonly
Тепер запускаю та вмикаю nginx
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
Налаштовую конфігурацію для nginx
sudo nano /etc/nginx/sites-available/bookstack
# HTTP — редірект на HTTPS
server {
listen 80;
listen [::]:80;
server_name notes.bistats.site;
location / {
return 301 https://$host$request_uri;
}
}
# HTTPS — конфігурація SSL
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name notes.bistats.site;
ssl_certificate /etc/letsencrypt/live/notes.bistats.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/notes.bistats.site/privkey.pem;
root /var/www/bookstack/public;
index index.php index.html index.htm;
client_max_body_size 100M;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
sudo ln -s /etc/nginx/sites-available/bookstack /etc/nginx/sites-enabled/
sudo systemctl restart nginx.service
Була помилка додав ще раз права на необхідні папки.
Перехоплення пустого адтайтлу | FB n2s (костиль)
Для n2s потрібно щоб адтайтл надходив з кліком до провайдера.
Але інколи адтайтла з джерела відсутній, тому в такому разі в трекері в трекері робимо правило для пустого адтайтла куди додаємо офер з пропсианим адтайтлом в самому посиланні офера.
Регулярка для правила .{2,}
News site
host/
Робимо глобальний масив, який буде оновлювати
Читамєо /data/articles.json
Розбираємо на масиви по кожній категорії, а також робимо масив з articlepath робмлю для перевірки чи є такий шлях, інакше відправляти всіх на головну сторінку.
Задачі
E стовбчик
Може бути дуже різні дані. Тому потрібно ретельно це перевіряти:
- якщо це ківорди чи адтайтли то потрібно їх енкодити
- перевіряти кількість рядків
- символи заекодити &, #, %, ?, =, +, {, }, [, ], |, ^, і ~,
- всякі \r \n \t \v видалити (в певних моментах вже після обробки масииву ківордів та адтайтлу). Бо трекери не обробляють такі символи, та інколи це призводить не коректного формуваня Offer URL в трекерах.
Трекер потім передає це все, як є.
API (tracker/crossroads/tonic)
Запускати API, тільки якщо це peerclick (точніше не clickflare/keitaro)
Для дока задач.
Можна просто зробити функції, які збиратимуть і передаватимуть дані:
- по стовбчику в обраному рядку
- назва рядка
Передаватиуть ці дані на мій сервак.
А я поверну відповідь, який текст і колір в стовбчику проставити, ну і якусь додаткову інфу, про помилки чи ще щось.
В себе відповідно логуватиму це все, у вигляді назва дока, назва аркуша, номер рядка.
В git зробити 2 гілки stage/master
Щоб можна було тестувати.
Тест док зробити з одним аркушем, де буде набір всіх шаблонів задач. Можливо в якомусь стовбчику буде клітинка з посиланням на доку.
І так в мене буде одне джерело коду та логів.
Errors
Робити в коді різні перевірки і формувати помилки і потім повертати їх та вписувати в стовбчик D
TS
Потрібно буде зробити нові TS, де дати відповідні імена віхідним параметрам
Наприклад там де campaign_item, так і називати, а не tease ID.
Але це застосовувати там де генерується повне посилання для тизера.
Бо там де шаблони, можуть бути помилки від баєрів
Тобто не ламати досвід, а робити це безшовно де це можливо. Повністю проблему не прибере, але зменшить об'єм де треба враховувати нюанси
Name Campaign
Зробити перейменування камапній в crossroad та tonic під час генеруваня самого посиланя Offer URL та імені кампанії. Якщо буде відповідно помилка, то її виведемо.
Або для цих н2с першим тегом вписувати номер дяка задачі.
Або коли згенерувалось ім'я, то перевірити чи є таке в н2с провайдерів, і якщо є тоді додавати тег (наприклад tmestamp цілочисельний).
Документація
Описати документацію по скрипту, звідповідними окремими посиланнями на доку по інтеграції з ПП, TS, трекером.
System1 | отримання партнерського посилання і подача задачі
Подаємо запит на отримання партнерського посилання.
Вказуємо необхідні дані:
- CC - ваш імейл
- Subject - назва кампанії бажано просто тему вашої кампанії наприклад Plaque Psoriasis
- Type - обираємо Direct To Lander
- Description - adtitle англійською (текст креативу) або список (якщо їх декілька). Якщо мова не англійська, то перекласти на англійську.
- Language - мова на яку орієнтована кампанія
- Geo/Country Targeting - країна на яку орієнтована кампанія
- Native Network - джерело трафіку. Якщо в списку потрібного немає, то обираємо Other: Please specify within ticket). Також в Description після adtitles дописуємо назву джерела трафіку, наприклад Network: MGID
- Attachments - тут завантажуємо креатививи, які будемо використовувати (зображення).
Статус своїх запитів можете перевіряти тут.
Результат ви побачите в Status, а також якщо клікнете на свій запит, то перейдете на сторінку де буде відповідь від модерації, та посилання, яке копіюємо.
Задачу подаємо як з іншими провайдерами
Для DSP ще окремо вказуємо adtitle
domain active постбеки та пікселі
RTBEuro
Ad Click Pixel
https://flarequick.com/cf/cv?click_id={$tg10}&payout={$estimatedGoogleCPCToday}&txid={$datetimepst}¶m1={$query}&ct=sale
Domain Pixel Example
LANDER
!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window,document,'script', 'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '506752001994869');
fbq('track', 'ViewContent',{}, {eventID: '{$uuid}'});
SERP
!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window,document,'script', 'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '506752001994869');
fbq('track', 'Search',{}, {eventID: '{$uuid}'});
focus(); var listener = window.addEventListener("blur", function() { active_element = document.activeElement; if ("IFRAME" == active_element.tagName && 1 == window.location.href.includes("caf_results")) { fbq('track', 'Purchase',{}, {eventID: '{$uuid}'}); } });
RTBEuro2
Ad Click Pixel
https://pstb.gopeerclick.com/postback?userid=5906&cid={$fbclid}&payout={$estimatedGoogleCPCYesterday}&status=sale
Domain Pixel Example
LANDER
!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window,document,'script', 'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '1754180308492861');
fbq('track', 'ViewContent',{}, {eventID: '{$uuid}'});
SERP
!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window,document,'script', 'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '1754180308492861');
fbq('track', 'Search',{}, {eventID: '{$uuid}'});
focus(); var listener = window.addEventListener("blur", function() { active_element = document.activeElement; if ("IFRAME" == active_element.tagName && 1 == window.location.href.includes("caf_results")) { fbq('track', 'Lead',{}, {eventID: '{$uuid}'}); } });
RTBEuro3
Ad Click Pixel
https://pstb.gopeerclick.com/postback?userid=5906&cid={$fbclid}&payout={$estimatedGoogleCPCYesterday}&status=sale
Domain Pixel Example
LANDER
N/A
SERP
N/A
RTBEuro4
Ad Click Pixel
https://pstb.gopeerclick.com/postback?userid=5906&cid={$fbclid}&payout={$estimatedGoogleCPCYesterday}&status=sale
Domain Pixel Example
LANDER
N/A
SERP
N/A
RTBEuro5
Ad Click Pixel
https://pstb.gopeerclick.com/postback?userid=5906&cid={$fbclid}&payout={$estimatedGoogleCPCYesterday}&status=sale
Domain Pixel Example
LANDER
N/A
SERP
N/A
RTBEuro6
Ad Click Pixel
https://pstb.gopeerclick.com/postback?userid=5906&cid={$fbclid}&payout={$estimatedGoogleCPCYesterday}&status=sale
Domain Pixel Example
LANDER
(function (p, i, x, e, l) {
if (typeof window !== undefined) {
window._dojoPixel = {};
window._dojoPixel.events_queue = window._dojoPixel.events_queue || [];
window._ddq = function () {
window._dojoPixel.events_queue.push(arguments);
};
var f = p.getElementsByTagName(i)[0],
k = p.createElement(i);
k.async = 1;
k.src = "https://pixel.clickslogistics.com/load.js?id=6750cdd0fbd01c91d81af07e";
f.parentNode.insertBefore(k, f);
}
})(document, "script");
_ddq("PIXEL_INIT", {
"keyword": "Personal Loans"
});
_ddq("PAGE_VIEW");
SERP
N/A
RTBSystem2
Ad Click Pixel
https://pstb.gopeerclick.com/postback?userid=5906&cid={$fbclid}&payout={$estimatedGoogleCPCYesterday}&status=sale
Domain Pixel Example
LANDER
!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window,document,'script', 'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '541549895129299');
fbq('track', 'ViewContent',{}, {eventID: '{$uuid}'});
SERP
!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window,document,'script', 'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '541549895129299');
fbq('track', 'Search',{}, {eventID: '{$uuid}'});
focus(); var listener = window.addEventListener("blur", function() { active_element = document.activeElement; if ("IFRAME" == active_element.tagName && 1 == window.location.href.includes("caf_results")) { fbq('track', 'Lead',{}, {eventID: '{$uuid}'}); } });
RTBSystem3
Ad Click Pixel
https://pstb.gopeerclick.com/postback?userid=5906&cid={$fbclid}&payout={$estimatedGoogleCPCYesterday}&status=sale
Domain Pixel Example
LANDER
N/A
SERP
N/A
RTBSystemMGID
Ad Click Pixel
https://pstb.gopeerclick.com/postback?userid=5906&cid={$fbclid}&payout={$estimatedGoogleCPCYesterday}&status=sale
Domain Pixel Example
LANDER
N/A
SERP
N/A
RTBSystemPangle
Ad Click Pixel
https://flarequick.com/cf/cv?click_id={$tg10}&payout={$estimatedGoogleCPCToday}&txid={$datetimepst}¶m1={$query}&ct=sale
Domain Pixel Example
LANDER
!function (w, d, t) { w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t][];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for(var e=ttq._i[t][],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var i="https://analytics.tiktok.com/i18n/pixel/events.js";ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=i,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};var o=document.createElement("script");o.type="text/javascript",o.async=!0,o.src=i+"?sdkid="+e+"&lib="+t;var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(o,a)};
ttq.load('CPK3VVJC77U5SPBHJOP0);
ttq.track('CompletePayment'); ttq.page(); }(window, document, 'ttq');
SERP
!function (w, d, t) { w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t][];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for(var e=ttq._i[t][],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var i="https://analytics.tiktok.com/i18n/pixel/events.js";ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=i,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};var o=document.createElement("script");o.type="text/javascript",o.async=!0,o.src=i+"?sdkid="+e+"&lib="+t;var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(o,a)};
ttq.load('CPK3VVJC77U5SPBHJOP0');
ttq.track('CompletePayment'); ttq.page(); }(window, document, 'ttq');
IdealMediaNative
Ad Click Pixel
https://flarequick.com/cf/cv?click_id={$tg10}&payout={$estimatedGoogleCPCToday}&txid={$datetimepst}¶m1={$query}&ct=sale
Domain Pixel Example
LANDER
!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window,document,'script', 'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '1140136920409549');
fbq('track', 'ViewContent',{}, {eventID: '{$uuid}'});
SERP
!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window,document,'script', 'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '1140136920409549');
fbq('track', 'Search',{}, {eventID: '{$uuid}'});
focus(); var listener = window.addEventListener("blur", function() { active_element = document.activeElement; if ("IFRAME" == active_element.tagName && 1 == window.location.href.includes("caf_results")) { fbq('track', 'Purchase',{}, {eventID: '{$uuid}'}); } });
IdealMediaNews
Ad Click Pixel
https://pstb.gopeerclick.com/postback?userid=5906&cid={$fbclid}&payout={$estimatedGoogleCPCYesterday}&status=sale
Domain Pixel Example
LANDER
N/A
SERP
N/A
Макроси для джерел трафіку
| Джерело трафіку | Макроси |
| Yahoo |
|
| Outbrain | external_id={{ob_click_id}}&teaser_id={{ad_id}}&campaign_id={{campaign_id}}&widget_id={{publisher_id}}&site={{publisher_name}}&title={{ad_title}}§ion_id={{section_id}}§ion_name={{section_name}}&req_id={{req_id}}&promoted_link_id={{promoted_link_id}}&time_stamp={{time_stamp}} |
| Recreative | teaser_id={OfferID}&campaign_id={CompanyID}&widget_id={SiteID}&device={DeviceType}&external_id={RCuid} |
| MGID | teaser_id={teaser_id}&campaign_id={campaign_id}&widget_id={widget_id}&category_id={category_id}&client_id={client_id}&site={referrer}&title={title}&cost={click_price}&external_id={click_id} |
| Adnow | teaser_id={{tid}}&campaign_id={{campaignid}}&widget_id={{site_id}}&geo={{country}}&browser={{browser}}&platform={{platform}}&location={{location}}&category_id={{catid}}&site={{domain}}&cost={{price}}&external_id={{clickId}} |
| Revcontent | widget_id={widget_id}&teaser_id={content_id}&title={content_headline}&campaign_id={boost_id}&utm_targeting={adv_targets}&target_id={target_id}&site={site_name}&user_ip={user_ip}&city={city}&state={state}&geo={country}&c_s_c={city|state|country}&external_id={conversion_uuid} |
| Taboola | site_name={site}&widget_id={site}&site={site_domain}&thumbnail={thumbnail}&title={title}&tamp={timestamp}&platform={platform}&campaign_id={campaign_id}&campaign_name={campaign_name}&campaign_item_id={campaign_item_id}&site_id={site_id}&cost={cpc}&external_id={click_id} |
| Traffichunt | teaser_id=[banner]&campaign_id=[camp_id]&widget_id=[adspace]&site=[site]&country=[country]&user_os=[user_os]&carrier=[carrier]&banner_size=[banner_size]&sub_id=[sub_id]&cost=[cost]&external_id=[txn_id] |
| Tapnative | teaser_id=[AD_ID]&campaign_id=[CAMPAIGN_NAME]&widget_id=[PLACEMENT_ID]&site=[DOMAIN]&pub_name=[PUBLISHER_NAME]&USER_UA=[USER_UA]&DEVICE_ID=[DEVICE_ID]&external_id=[TRANSACTION_ID] |
| Dable | teaser_id=[CONTENT_NAME]&campaign_id=[CAMPAIGN_NAME]&widget_id=[SERVICE_NAME]&service_type=[SERVICE_TYPE] |
| Mondiad | teaser_id=[creativeid]&campaign_id=[campaignid]&widget_id=[subid]&zoneid=[zoneid]&carrier=[carrier]&subscriptionage=[subscriptionage]&adformat=[adformat]&cost=[bid]&external_id=[clickid] |
| Geospot | teaser_id={CREATIVE_ID}&campaign_id={CAMPAIGN_ID}&widget_id={PUBLISHER_ID}&geo={COUNTRY_CODE}&site={APP_DOMAIN}&APP_NAME={APP_NAME}&APP_ID={APP_ID}&APP_BUNDLE={APP_BUNDLE}&DPI={DEVICE_PLATFORM_ID}&DNT={DNT}&APP_NAME_ALPHANUM={APP_NAME_ALPHANUM}&external_id={CONVERSION_ID} |
| FB | source={{source}}&placement={{placement}}&ad_id={{ad_id}}&adset_id={{adset_id}}&campaign_id={{campaign_id}}&ad_name={{ad_name}}&adset_name={{adset_name}}&sub1={sub1}&sub2={sub2}&sub3={sub3}&fbpixel=fbpixel |
| Mediago | teaser_id=${AD_ID}&campaign_id=${CAMPAIGN_ID}&widget_id=${SITE_ID}&site=${PUBLISHER_NAME}&title=${AD_TITLE}&source=${SOURCE}&assetid=${ASSET_ID}&campaignname=${CAMPAIGN_NAME}&bidtime=${BID_TIME_STAMP}&platform=${PLATFORM}&contentname=${CONTENT_NAME}&assetname=${AD_ASSET_NAME}&cost=${CPC}&external_id=${TRACKING_ID} |
| popin | teaser_id=${CONTENT_ID}&campaign_id=${CAMPAIGN_ID}&widget_id=${PUBLISHER_ID}&site=${PUBLISHER_NAME}&title=${AD_TITLE}&source=${SOURCE}&assetid=${ASSET_ID}&adsetname=${AD_ASSET_NAME}&campaignname=${CAMPAIGN_NAME}&bidtime=${BID_TIME_STAMP}&platform=${PLATFORM}&contentname=${CONTENT_NAME}&cost=${CPC}&external_id=${TRACKING_ID} |
| DABLE | |
| geozo |
teaser_id=[AD_ID]&widget_id=[BLOCK_ID]&adgroup=[AD_GROUP_ID]&category=[CATEGORY_ID]&template=[TEMPLATE_ID]&cost=[BID]&external_id=[CLICK_ID] |
Створити pixel / dataset у Facebook
Disclaimer!
У Facebook є багато варіантів інтерфейсу, або їх мутацій. Тому назви кнопок або їх розташування може змінюватись навіть на одному і тому самому аккаунті.
Створення pixel
Йдемо за посиланням (при потребі логінимось повторно та вказуєте всі дані потрібні для автентифікації).
https://business.facebook.com/settings/people?
Обраємо потрібний Bussiness Manager (далі BM).
Далі йдемо в Data sources -> Datasets
Завантажиться список пікселів, ми створюємо новий (Add).
Вказуємо ім'я і клікаємо Create
Подалші вікна, попапи, якщо вони будуть можемо ігнорувати / закривати.
І побачимо наш створений pixel / dataset
Далі потрібно видати дозволи нашому користувачеві (соц. профілю доступ до цього пікселя, а також пошерити/ прикріпити до рекламний аккаунтів (Ad accounts, скорочено РА або AA). Також бажано обрати системного користувача додатково (Conversion API)
І шеримо на рекламний аккаунт або декілька
Отримати код пікселя
Переходимо в менеджер подій
Копіюєте код, щоб вставляти його напряму в код лендінгу.
Мжна використовувати цей шаблонний код, змінюючи тільки ID пікселя та назву події (якщо потрібно)
В плівому стовбчику і підсвічу зеленим, те що можна змінювати, для адаптації під вас. В правому буде код/шаблон для копіювання.
| <!-- Meta Pixel Code --> <script> !function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1111111111111111111111'); fbq('track', 'Lead'); </script> <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1111111111111111111111&ev=Lead&noscript=1" /></noscript> <!-- End Meta Pixel Code --> |
|
Отримання токена пікселя
Це потрібно для додаткових інтеграцій. Також потрібен і ID пікселя, ви його бачите в списку пікселів.
Але отримаємо все також в менеджері подій (ID пікселя це тільки цифри).
Гортаємо нижче та шукаємо Conversions API, нам потрібно згенерувати token
Отримуємо токен.
Якщо одразу захочете згенерувати токен і для іншого пікселя. Обов'язково!!! Перезавантажте/оновіть сторінку.
Інакше отримаєте токен з попереднього пікселя, або додатковий токен для попереднього пікселя.
Тестування подій | отримання тестового коду/події
Для цього процесу нам потрібен тестовий код. Беремо його на вкладці "Test events" в менеджері подій.
І також тут буде видно результат тестування (інколи треба оновити сторінку).
Сам код будемо виставляти в іншому місці.
Tonic Facebook RSOC - отримання посилання (за комплаєнсом)
Спосіб 1
Заходимо в налаштування кампанії
Клікаємо на помічник параметрів
Далі:
- вказуєте adtitle
- проставляєте галочки (іноді не виставлені автоматично)
- та задаємо додаткові параметри (кнопка Add). Нам потрібно три параметри, щоб потім оптимайзер міг отримати статистику правильно
subid3: {{campaign.id}}
subid4: {{adset.id}}
subid2: {{ad.id}}
Піксель налаштовуєте як зазвичай (тут автоматично додається dpco, та перехопиться fbclid).
Копіюєте сформовану Tracking Link та вставляєте її як URL креативу у Facebook.
Спосіб 2 (простіший)
В морді берете direct link
Задача в документі
Посилання генеруєте так
Автоматичного перейменування кампанії в тонік поки що немає.
Потрібне посилання вам берете із стовбчика M
!!! Таргетинг у Facebook
Facebook Audience Network (FAN) Usage Prohibited:
The use of Facebook Audience Network (FAN) is strictly prohibited. All Facebook
campaigns and any traffic directed to your content or article pages must have FAN
explicitly deactivated to remain in compliance with policies.
Тобто, потрібно виключити FAN.
У вас інтерфейс може бути іншим трохи.
Але це налаштовується на етапі налаштувань адсета (групи оголошень).
Далі внизу вимикаємо FAN (знімаємо галочки)
Tonic - RSOC
Технічні дрібниці по інтеграції The Optimizer
Для Optimizer
mgid | subid4 | {campaign_id}|{teaser_id}|{widget_id}|{source_id}
facebook | subid2 | {ad.id}}
subid3 | {{campaign.id}}
subid4 | {{adset.id}}|{{campaign.id}}|{{ad.id}}|{{placement}}
outbrain | subid4 | {{campaign_id}}|{{ad_id}}|{{section_id}}|{{publisher_id}}|{{section_name}}|{{publisher_name}}
taboola | subid4 | {campaign_id}|{campaign_item_id}|{site}|{site_id}|{site_domain}
newsbreak| subid4 | __CAMPAIGN_ID__|__FLIGHT_ID__|__CREATIVE_ID__
Посилання з Tonic
Берете Use direct link або D.Link в морді
Таблиця постбеків
Постбеки виставляєте в налаштуваннях кампанії тоніка в підменю Callbacks
| Traffic Source | Postback URL |
| mgid | Передавати виплату попередню
Без виплати
|
| Працюєте як зазвичай з conversion token та pixel/dataset id | |
| outbrain |
|
| taboola |
|
| newsbreak |
complete_payment
|
| revcontent |
??? |
| DSP mgid |
??? |
Генерування посилання для Джерела трафіку
Генерується автоматично під час генерації імені кампанії. (стовбчик M)
Перейменування кампаній в тоніку автоматичне, поки що не працює.
Постбек
Налаштовуєте в самій кампанії в кабінеті Tonic
Для MGID є нюанс. Коли виставляєте посилання воно може не прийнятись бо домен не одобрений, або прийнятись і модератори його промодерують. Інколи і вони не модерують і кажуть що не будуть.
Тімлідам покажу як модерувати/одобрювати домен в cab.
Також домен зазвичай опрувиться для одного кабінету, покажу як дозволити його для інших кабінетів, якщо потібно.



