Аналітика і точки відмови
Місток пише подію на кожному кроці — від створення замовлення до оплати — і показує, де саме і скільки грошей зійшло з рейок.
Що збирається
| Подія | Коли | Атрибути |
|---|---|---|
order_created | вебхук orders/create (наші методи та накладений) | країна, область, місто з адреси доставки, сума, спосіб |
pay_click | покупець натиснув кнопку (/pay) | + пристрій (mobile/desktop), країна за IP (Cloudflare/nginx), мова |
redirected | рахунок створено, редірект на PSP | шлюз, сума, правило передоплати |
returned | повернувся зі сторінки PSP | |
paid / prepaid / failed / expired / cancelled / reversed / refunded / reminder_sent / link_opened | відповідні переходи | причина відмови від шлюзу |
Точки відмови
- Не натиснули «Оплатити» — замовлення є, кнопки не торкалися 30+ хв. Найчастіше: блок не увімкнено або непомітний.
- Пішли на сторінку оплати і не повернулися — класичний «подумаю»; лікується нагадуваннями.
- Відхилено банком/PSP — з причиною з відповіді шлюзу (недостатньо коштів, 3DS, ліміт).
- Прострочено, скасовано, розбіжність суми.
Для кожної точки дашборд показує кількість і суму втрачених грошей, а таблиця «зависли сьогодні» — конкретні замовлення, які ще можна дотиснути дзвінком чи повідомленням.
Аномалії, що підсвічуються
- ≥ 30 % відхилень у шлюзі (при ≥ 5 спробах) — перевірити токен/ліміти.
- ≥ 40 % замовлень без кліку по кнопці — перевірити блок на Thank-you page.
- ≥ 5 покупців не повернулися — увімкнути нагадування.
- Конверсія країни < 30 % — потрібен локальний метод (BLIK для PL, Stripe для решти).
- Мобільна конверсія суттєво нижча за десктопну — перевірити Apple/Google Pay і сторінку оплати на телефоні.
Географія
Країна/область/місто — з адреси доставки Shopify (надійніше за IP); країна за IP додається як окремий атрибут для виявлення покупців з-за кордону, що замовляють в Україну. Таблиці: країни (конверсія, виручка), області/воєводства, міста.
Дашборд: /admin/dashboard?key=…&days=7|30|90. JSON: /admin/api/stats. Telegram: /today.
Модуль аналітики (/admin/analytics)
Дашборд відповідає на «де втрачаємо гроші», модуль аналітики — на «звідки гроші приходять і чи повертаються покупці». Працює на тих самих даних Містка, без GA і без cookie-банерів.
| Блок | Звідки дані | Що показує |
|---|---|---|
| 📣 Джерела трафіку | landing_site / referring_site / source_name з вебхука orders/create та customerJourneySummary із Admin API | utm_source / utm_medium (напр. google / cpc), інакше хост реферера (instagram.com), інакше джерело Shopify (POS, чернетка). Замовлення, оплати, конверсія, виручка, середній чек по кожному джерелу; UTM-кампанії окремо. |
| 🔁 Нові vs повторні | customer.numberOfOrders + історія оплат за email/телефоном | частка повторних, середній чек нових і повторних, топ-10 покупців за сумою. |
| 📦 Товари | знімок позицій замовлення в момент оплати | топ-15 за виручкою, штуки, середній кошик. |
| ⏱️ Час до оплати | створення замовлення → оплата | гістограма (< 2 хв … > 3 днів), медіана, p90 — підказка, коли слати нагадування. |
| 🔔 Нагадування | лічильник нагадувань на рахунку | скільки замовлень отримали нагадування, скільки з них оплачено, повернута виручка. |
| 🌍×💳 Країна × провайдер | адреса доставки + шлюз | оплачено / замовлень у кожній клітинці — видно, де бракує локального методу. |
| 🧑🤝🧑 Когорти | тиждень першої оплати | частка покупців, що купили ще раз (12 тижнів). |
KPI зверху порівнюються з попереднім періодом такої ж довжини (▲▼). Висновки формуються автоматично: падіння конверсії ≥ 15 %, слабке джерело, ефективність нагадувань, частка повторних, надто довгий час до оплати. Експорт: /admin/analytics.csv?days=30 (секції source / campaign / product / weekday / country_provider / cohort), JSON: /admin/api/analytics?days=30.
💸 Комісії провайдерів і 📬 тижневий дайджест
Блок «Комісії провайдерів» показує, скільки з’їдає еквайринг: фактична комісія береться з виписки mono (/api/merchant/statement, раз на поллінг), зі статусів LiqPay (receiver_commission), WayForPay (fee) і Fondy; для решти — оцінка за тарифом (FEE_RATE_<PROVIDER> у .env). KPI «чистими» = виручка − комісії; висновок підсвічує найдорожчий шлюз.
нове Для оцінки там, де PSP не повідомляє комісію, є правила FEE_RULES (Налаштування → «Комісії еквайрингу» або .env): масив {provider, country, currency, minAmount, maxAmount, rate, fixed, note}, перше збіжне правило виграє; provider — код, список через кому або *; rate у %, fixed у копійках за операцію. Приклад: [{"provider":"stripe","currency":"PLN","rate":1.5,"fixed":100},{"provider":"*","country":"PL","rate":2.9}]. Під таблицею провайдерів — розбивка комісій за ринками (країна × валюта).
Щопонеділка о 09:00 (Київ) бот надсилає дайджест тижня: виручка, конверсія, середній чек і покупці зі стрілками проти минулого тижня, джерела, втрати, провайдери, нагадування, висновки. DIGEST=off вимикає, DIGEST_DOW/DIGEST_HOUR змінюють час, /digest у боті — на вимогу.
Джерела та товари зберігаються для замовлень, створених після оновлення; старі замовлення показуються як «прямий / невідомо». У пісочниці всі блоки заповнені вигаданими даними.