Макросы 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}.
Для TikTok-флоу с установкой отдельно проверьте, как ttclid, source IDs и внутренний click ID проходят через PWA-приложение в арбитраже. А сравнение PWA-сервисов поможет оценить платформы не по витрине, а по полноценному тесту маршрута и постбека.