Атрибуты, теги или переменные: как выбрать правильный инструмент

На платформе есть три способа что-то запомнить о пользователе или сохранить значение по ходу диалога — атрибут, тег и переменная. Каждый разбирали отдельно (см. «Атрибуты профиля и теги: в чём разница и как это работает» и «Переменные в платформе: что это такое и когда их использовать»), но на практике вопрос обычно один: «а какой из трёх мне тут нужен?». Вот сводная таблица и короткое правило выбора.

Сравнение

АтрибутТегПеременная
Нужно создавать заранее в настройкахДа (кроме системных: имя, телефон, почта, external id)НетНет
Хранит значениеДа, типизированноеНет — только сам факт наличияДа, любое
Виден в профиле клиентаДаДаНет
Участвует в фильтрации чатов и сегментации аудиторииДаДаНет
Где живётВ профиле, постоянноВ профиле, постоянноВнутри процедуры — save_variable в рамках всего проекта, set только на время текущей процедуры
Где используетсяСценарии, чат-центр, аудитория, рассылкиСценарии, чат-центр, аудитория, рассылкиТолько внутри процедур (DTL-код)

Когда что брать

Атрибут — когда нужно значение, которое потом пригодится за пределами одного диалога: подставить в текст, сравнить в условии, использовать для сегментации аудитории. Атрибут доступен везде на платформе.

Тег — когда нужно просто пометить профиль без значения, и сделать это быстро, не заводя ничего в настройках заранее. Тоже виден везде и тоже участвует в сегментации — просто без значения, только по факту наличия.

Переменная — когда данные нужны только для логики внутри процедуры и наружу выходить не должны. Ни в профиле, ни в фильтрах, ни в чат-центре её не видно — это чисто техническая, временная сущность.

Короткое правило

Если значение должно быть видно за пределами процедуры (в профиле, в фильтре, в другом сценарии) — это атрибут или тег, не переменная. Между атрибутом и тегом выбор такой же, как в статье про них: есть значение — атрибут, просто факт — тег. Если данные нужны только на время выполнения текущей логики процедуры — берите переменную.