Комментарии 1
Хороший практичный подход, особенно для соло-разработчика: одна строка на пользователя часто действительно дает больше пользы, чем попытка сразу строить полноценную event-аналитику.
Я бы добавил к такой схеме еще два небольших слоя. Первый — хранить рядом с source не только строку канала, но и captured_at / landing_path. Даже если это остается JSON в одной колонке, потом проще отличать «человек пришел из статьи» от «человек вернулся через сохраненную ссылку спустя неделю».
Второй — явно разделить first_touch и session/current_source. First-touch хорош для ответа «кто познакомил с продуктом», но в Telegram Mini App часто бывают повторные заходы через start_param из разных мест: статья, био, закреп, бот-меню. Если их не перетирать, то можно потерять понимание, какой конкретный CTA оживил уже знакомого пользователя.
Дисклеймер: я сейчас делаю похожую связку Telegram Mini App + AI/voice-продукт, поэтому боль с web/TG/app attribution очень знакомая. У нас я бы, скорее всего, оставлял first_touch неизменным, а последние входы писал бы уже как легкие события, не обязательно в большую CDP.

Откуда пришли пользователи: first-touch attribution для NestJS + React + Telegram Mini App в 100 строк кода