Макроси TikTok Ads здаються простими, доки AID, CID та Smart+ ad ID не потрапляють у неправильні колонки трекера. Надійна схема спершу мапить стабільну ієрархію, віддає плейсмент у sub ID і перевіряє підстановку на доставленому кліку.
Для стандартної TikTok-кампанії використовуйте такий рядок параметрів DarkCore:
campaign_id=__CAMPAIGN_ID__&adset_id=__AID__&ad_id=__CID__&sub1=__PLACEMENT__&sub2=__CAMPAIGN_NAME__&sub3=__AID_NAME__&sub4=__CID_NAME__
У повному URL:
https://go.example.com/?campaign_id=__CAMPAIGN_ID__&adset_id=__AID__&ad_id=__CID__&sub1=__PLACEMENT__&sub2=__CAMPAIGN_NAME__&sub3=__AID_NAME__&sub4=__CID_NAME__
У макросів TikTok по два підкреслення на початку й у кінці. Регістр важливий. Синтаксис Meta {{campaign.id}} тут не працює.
Рекомендований мапінг TikTok → DarkCore
Офіційний довідник UTM і макросів TikTok містить поля кампанії, ad group, креативу, плейсменту та оновленого Smart+.
| Вхідний параметр | Макрос TikTok | Реальний рівень | Використання в DarkCore |
|---|---|---|---|
campaign_id | __CAMPAIGN_ID__ | Кампанія | Стабільний ключ кампанії |
adset_id | __AID__ | Ad group | Стабільний ключ групи/аудиторії |
ad_id | __CID__ | Креатив у стандартній структурі | Детальний ключ креативу |
sub1 | __PLACEMENT__ | TikTok або Pangle | Звітність і маршрутизація за плейсментом |
sub2 | __CAMPAIGN_NAME__ | Назва кампанії | Читабельний контекст |
sub3 | __AID_NAME__ | Назва ad group | Читабельний контекст |
sub4 | __CID_NAME__ | Назва креативу | Читабельний контекст |
Головна пастка: AID означає ad group ID, а не ad ID. CID — це creative ID, а не campaign ID. Якщо орієнтуватися лише на схожі літери, звітність тихо стане неправильною.
Smart+ додає окремий рівень ad
В оновленому Smart+ є чотири рівні: campaign, ad group, ad і creative. TikTok використовує __ADID_V2__ та __ADID_V2_NAME__ для Smart+ ad bundle, а __CID__ та __CID_NAME__ — для окремого креативу.
Мапінг для Smart+:
campaign_id=__CAMPAIGN_ID__&adset_id=__AID__&ad_id=__ADID_V2__&sub1=__PLACEMENT__&sub2=__CAMPAIGN_NAME__&sub3=__AID_NAME__&sub4=__ADID_V2_NAME__&sub5=__CID__&sub6=__CID_NAME__
Так Smart+ ad ID залишається в ad_id, а creative ID — у sub5. Якщо старий шаблон суперечить кабінету, джерелом правди має бути офіційна документація Smart+ reporting.

Не зводьте стандартні та Smart+ кампанії до неоднозначного визначення ad_id. Зафіксуйте шаблон для кожного типу й не змінюйте семантику всередині однієї кампанії.
TTCLID не замінює ієрархію
Коли TikTok-клік приходить з ttclid, DarkCore зберігає цей click ID. Він підтримує безперервність кліку й атрибуцію, але сам по собі не показує, яку кампанію, ad group, плейсмент чи креатив оптимізувати.
ttclidідентифікує окремий TikTok-клік, коли платформа його передала.campaign_id,adset_id,ad_idі sub-поля описують рекламний контекст цього кліку.
Не хардкодьте вигаданий ttclid і не записуйте туди campaign ID.
Auto-attach чи контрольований шаблон трекера
Інструкція TikTok з URL-параметрів дозволяє автоматично додавати UTM або створити кастомні параметри вручну.
Auto-attach корисний для GA-подібної вебаналітики, але це не обов’язково повний мапінг для трекера. Якщо DarkCore потрібні campaign_id, adset_id, ad_id і sub1, додайте ці ключі явно та перевірте preview на дублікати.
- Залишайте auto-UTM, якщо їх читає інша система аналітики.
- Зберігайте ідентичність кампанії у спеціальних полях DarkCore.
- Не визначайте один ключ двічі з різними значеннями.
- Використовуйте ID як ключі, а назви — як підписи.
Передача значень в оффер
Після кліку DarkCore може повторно використати контекст у вихідному Track Link:
https://affiliate.example/click?cid={click_id}&campaign={campaign_id}&adgroup={adset_id}&ad={ad_id}&placement={sub1}&creative={sub5}&ttclid={ttclid}
Для стандартної кампанії використовуйте той sub-слот, де реально збережений креатив; у Smart+ прикладі sub5 зарезервовано для __CID__.
TikTok підставляє __CAMPAIGN_ID__ до запиту на лендінг. DarkCore підставляє {campaign_id} та {click_id} під час формування вихідного URL. Змішування синтаксисів залишає буквальні макроси у воронці.
Pass/fail-перевірка запуску
| Тест | Очікуваний факт | Pass? |
|---|---|---|
| Query string | Один ?, коректні key=value, наступні ключі через & | ☐ |
| Підстановка TikTok | Немає буквальних __CAMPAIGN_ID__, __AID__ чи __CID__ | ☐ |
| Ієрархія | Campaign і ad group ID потрапили у правильні поля | ☐ |
| Визначення ad | Standard і Smart+ зберігають документовані рівні без змішування | ☐ |
| Плейсмент | sub1 містить фактичний плейсмент | ☐ |
| Click ID | ttclid збережений, коли TikTok його передав | ☐ |
| Вихідний URL | Усі потрібні макроси DarkCore підставилися один раз | ☐ |
| Конверсія | Один тестовий постбек прив’язаний до кліку без дубля виручки | ☐ |

Типові помилки
- AID записано як ad ID.
__AID__— це ad group ID, тому всі креативи групи інакше виглядатимуть однаково. - CID трактують як campaign ID.
__CID__— creative ID; кампанія —__CAMPAIGN_ID__. - У Smart+ злиті ad і creative.
__ADID_V2__та__CID__— різні рівні. - У TikTok вставлено синтаксис Meta. TikTok очікує
__CAMPAIGN_ID__, а не{{campaign.id}}. - Перевірено лише завантаження сторінки. Потрібен повний маршрут: клік, збережені ID, вихідний URL і постбек. Концепція описана в гайді про S2S-постбек, синтаксис на кшталт
click_id={subid}— у гайді з мапування макросів постбека, а маршрутизація — на сторінці DarkCore Streams.
FAQ
Який TikTok-макрос ставити в sub1?
У рекомендованій схемі — sub1=__PLACEMENT__.
Який макрос відповідає за TikTok ad group?
__AID__ — ID групи, __AID_NAME__ — її назва.
Чим відрізняються CID та ADID_V2?
__CID__ ідентифікує креатив. В оновленому Smart+ __ADID_V2__ ідентифікує ad bundle над рівнем креативу.
Скільки custom sub ID приймає DarkCore?
DarkCore зберігає sub1–sub10 і віддає їх у Track Links як {sub1}–{sub10}.