---
title: "Завіса сторінки"
description: "Короткий банер, що з'являється на сторінках Ring із пропозицією додати застосунок на головний екран або рекламованим товаром; як відвідувачі його закривають, як продавці вмикають рекламу товарів і як автори сторінок отримують комісію"
locale: "uk"
---
# Завіса сторінки

Завіса сторінки це тонкий банер (близько 10% висоти екрана), який з'являється, коли відвідувач перестає гортати. Вона показує один із двох видів пропозицій: **Додати на головний екран** для застосунку або **товар**, який продавець вирішив рекламувати. На сторінках новин і в дописах блогів учасників товар, доданий із завіси, може принести автору сторінки комісію, коли покупець згодом оплатить замовлення.

> **Info**
> Використовуйте вкладки **Founder** / **Developer** у бічній панелі документації, щоб фільтрувати цю сторінку. Спільні розділи стосуються обох аудиторій.

> **Success**
> **Статус (2026-10-26):** Випущено в Layer 1 і налаштовується для кожного клону через блок `curtain` у `ring-config.json`. Черга тепер враховує попередні відмови, тож відвідувач, який обрав «Не сьогодні», не побачить той самий банер знову на наступній сторінці.

| Без завіси | Із завісою |
|------------|------------|
| Підказки встановлення залежать від браузера | Ring сам пропонує додати на головний екран, один раз за вікно політики |
| Автори не заробляють на товарах, які згадують | Автори отримують додаткові кредити з оплачених кошиків, що почалися з їхньої сторінки |
| Продавці платять за рекламу деінде | Продавці вмикають рекламу товару й задають комісію автору від 1% до 10% |

### For founders

## Чому це важливо для вашої спільноти

Автори приводять читачів, продавці шукають покупців. Завіса поєднує їх без окремої рекламної системи. Продавець позначає товар, автор посилається на нього або пише на ту саму тему, і коли читач купує товар, автор отримує винагороду в кредитах платформи. Виплата продавцю не зменшується: комісія нараховується як додаткові кредити.

  
- **[Новини](/docs/features/news.md)** — Сторінки статей, де з'являються пропозиції товарів.

  
- **[Блог учасника](/docs/features/member-blog.md)** — Дописи учасників отримують ті самі пропозиції товарів і комісію автору.

  
- **[Магазин](/docs/features/store.md)** — Продавці вмикають рекламу в завісі у формі товару.

### Типові сценарії

- **Фуд-блогер посилається на мед ферми** у статті. Читачі бачать мед у завісі, натискають «Додати в кошик» і оплачують протягом 30 днів. Блогер отримує 5% від цієї позиції кредитами.
- **Новий відвідувач на мобільному** читає три сторінки. На одній із них завіса пропонує додати на головний екран. Він натискає «Не сьогодні» і не бачить цього 24 години.
- **Читач натискає «Не для мене»** на товарі. Цей товар більше ніколи йому не з'явиться.

```mermaid
flowchart LR
  A[Vendor enables advertise] --> B[Article page]
  B --> C[Curtain offer]
  C -->|Add to cart| D[Signed touch stored]
  D --> E[Paid order within 30 days]
  E --> F[Author gets credit]
```

### Де дивитися результати

- **Продавці:** сторінка доходів показує 7-денну воронку завіси: показано, показано повторно, CTA, не сьогодні, не для мене, прокручено, оплачено і нараховані кредити.
- **Автори:** My News (`/my-news`) показує ту саму 7-денну воронку для їхніх сторінок плюс зароблені кредити завіси.
- **Оператори:** сторінка аналітики адміністратора показує ту саму воронку для всього клону поруч з активною політикою завіси.

### For developers

## Конфігурація

`ring-config.template.json` постачається з такими значеннями за замовчуванням. Перевизначте будь-який ключ у `ring-config.json` свого клону. Значення читає `getCurtainPolicy()` у `lib/ring-config-core.ts`, а перевіряє `parseCurtainPolicy` у `features/curtain/lib/policy.ts`.

| Ключ | За замовчуванням | Допустимі значення |
|------|------------------|--------------------|
| `curtain.enabled` | `true` | `false` вимикає всі пропозиції |
| `curtain.productSource` | `page_then_pool` | `page_then_pool`, `page_only`, `pool_only` |
| `curtain.maxImpressionsPerDay` | `5` | від 1 до 50 на пропозицію за добу UTC |
| `curtain.notTodayHours` | `24` | від 1 до 168 |

{`{
  "curtain": {
    "enabled": true,
    "productSource": "page_only",
    "maxImpressionsPerDay": 3,
    "notTodayHours": 48
  }
}`}

## Як обираються пропозиції

`requestCurtainDrop` у `features/curtain/actions.ts` повертає до трьох пропозицій (`CURTAIN_QUEUE_MAX`):

1. Повністю пропускається, коли політику вимкнено або шлях починається з `/admin`, `/login`, `/register`, `/auth`, `/vendor` чи `/store/checkout`.
2. Пропозиції товарів лише на сторінках, що передають `newsArticleId` через `CurtainPageProvider` (статті новин і дописи блогів учасників). Стаття має бути опублікована й видима глядачу згідно з `canViewNewsArticle`.
3. Товари **сторінки** це посилання `/store/`, знайдені в тексті статті. Товари **пулу** це активні товари з `curtainAdvertiseEnabled`. Кожен має бути рекламованим, активним, мати ціну, не бути власним товаром продавця-глядача і не бути приглушеним.
4. Сортування: спершу товари з посилань, потім збіг теми з категорією й тегами статті, потім менше показів сьогодні.
5. Вільне місце заповнюється пропозицією додати на головний екран, якщо браузер ще не запускає встановлений застосунок.

`curtain-host.tsx` показує чергу й застосовує `canShowOffer` до кожного елемента черги, що й виправляє повернення закритих банерів.

## Відповіді відвідувачів

| Відповідь | Ефект |
|-----------|-------|
| CTA | Додати в кошик (товар) або підказка встановлення (A2HS) |
| Не сьогодні | Приглушено на `notTodayHours` від цього моменту |
| Не для мене | Приглушено назавжди для цієї пропозиції |
| Прокрутка | Записується, без приглушення |

Налаштування зберігаються в `localStorage` (`ring_curtain_prefs`), а для учасників, що увійшли, ще й у таблиці `curtain_preferences` (міграція `050`, частина `schema.sql`) через `syncCurtainPrefs`.

## Атрибуція і комісія

- Кожна пропозиція товару несе HMAC `offerToken` з `features/curtain/lib/offer-token.ts`, підписаний `AUTH_SECRET`. Він пов'язує пропозицію, товар, автора й статтю.
- Дотики CTA зберігаються в cookie `ring_curtain_attr` і сховищі (вікно 30 днів, щонайбільше 12 дотиків).
- Оформлення замовлення залишає лише дотики, що проходять `verifyCurtainTouches`. Автор і відсоток беруться з токена й актуального товару, ніколи з браузера.
- Після оплати `mintCurtainAuthorCommission` у `features/curtain/services/commission.ts` додає автору кредити: підсумок позиції помножений на відсоток товару (від 1 до 10, за замовчуванням 5). Пропускає покупку самому собі, реферера замовлення, дублікати й працює лише коли кредитні винагороди ввімкнено.
- Події `curtain_shown`, `curtain_response`, `curtain_cta`, `curtain_suppress` і `curtain_paid` живлять `getCurtainFunnel` у `features/analytics/lib/curtain-analytics.ts`.

## Увімкнення продавцем

Форма товару продавця містить `AdvertiseProductWidget` (`features/curtain/components/advertise-product-widget.tsx`). Він записує `curtainAdvertise: { enabled, commissionPercent }` і `curtainAdvertiseEnabled` у товар. Товар без ціни не можна рекламувати.

## Часті запитання

### Вплив

#### Чи віднімається комісія з виплати продавцю?

Ні. Це додаткові кредити, нараховані автору й записані з джерелом `curtain_author`.

### Міграція

#### Чи потрібна міграція?

Не для нової інсталяції. Наявним базам даних потрібна `050_curtain_offers.sql` для `curtain_preferences` та індексу аналітики.

### Експлуатація

#### Як вимкнути завісу для одного клону?

Встановіть `"curtain": { "enabled": false }` у `ring-config.json` цього клону й перезберіть.

  
- [features/store](/docs/features/store.md) — Залежить від: товарів, кошика й оплачених замовлень, що запускають комісію.

  
- [features/news](/docs/features/news.md) — Той самий процес: сторінки статей, що містять пропозиції товарів.

  
- [features/member-blog](/docs/features/member-blog.md) — Той самий процес: дописи учасників містять ті самі пропозиції.

  
- [features/rewards](/docs/features/rewards.md) — Дивіться також: кредитні винагороди, які мають бути ввімкнені для комісії.

  
- [features/refcodes](/docs/features/refcodes.md) — Дивіться також: реферальна атрибуція, що має те саме 30-денне вікно.
