api#326 Числовые UTM и новый шум каждого перехода
This commit is contained in:
1 parent
f30742c2fb
commit
81e189ca67
16 files changed
+303
-160
No files matched your search
@@ -6,34 +6,30 @@
|
||||
маленькая заглушка `Yii::t` в `i18n.php`.
|
||||
|
||||
Активные production: `https://zoompixel.ru`, `https://zoompixel.online`; текущая цель выката — только `https://zoomstage.online`. Пример ссылки входа:
|
||||
`https://zoomstage.online/?indpic=1&theme=dark°r=2®istration=after&bchoice=a&tp=1&utm_source=test&subid=CLICK1`.
|
||||
`https://zoomstage.online/?indpic=e9st1mm12b&theme=e9st1mm12b°r=e9st2mm12b®=e9st2mm12b&chob=e9st2mm12b&tp=e9st1mm12b&utm_source=test&subid=CLICK1`.
|
||||
|
||||
## Как работает
|
||||
|
||||
### Метки
|
||||
### Метки (api#326)
|
||||
|
||||
`index.php` разбирает параметры адреса по разделу `utm` из `config.json`. Для каждой настроенной метки:
|
||||
Из публичного значения учитывается только пятый символ: цифра1–9 выбирает вариант,0 на Preland выбирает его по прежним `weights`. Отсутствующий, короткий, массивный и невалидный ввод получает `default`. Открытые `1`, `rnd`, `dark`, старые имена `registration/bchoice/chb` больше не выбирают варианты. Точная длина входной строки не ограничена; Unicode-шум не изменяет позицию управляющего символа.
|
||||
|
||||
- значение из адреса принимается, если оно есть в `weights`;
|
||||
- `rnd` — случайное значение по весам (`weights`), так делится трафик между вариантами;
|
||||
- неизвестное значение отбрасывается, отсутствующее — заменяется на `default`.
|
||||
| Метка | Числовые значения |
|
||||
|---|---|
|
||||
| `indpic` | номер настроенного набора1–9 (`/1/`, `/2/` и т.д.) |
|
||||
| `theme` |1 dark,2 light |
|
||||
| `degr` | номер настроенной группы1–9 |
|
||||
| `reg` |1 before (PIN до оплаты),2 after |
|
||||
| `chob` |1 без попапа банка,2 с попапом |
|
||||
| `tp` | номер настроенной тарифной группы1–9 |
|
||||
| `cons` | номер группы согласий1–9; существование проверяет API |
|
||||
| `focus` |1 face,2 center |
|
||||
|
||||
Ненастроенные параметры (`utm_source`, `keyword`, `subid` и любые другие) проходят как есть. Перед переходом
|
||||
Preland всегда формирует полный resolved-набор своих восьми меток: явное допустимое значение остаётся, `rnd`
|
||||
разрешается по весам, отсутствующее получает `default`. Вместе с внешними рекламными параметрами этот набор
|
||||
уходит в `claim`, а затем сайт переносит его в `upscale`; ни один из восьми параметров не должен пропадать только
|
||||
потому, что был назначен default.
|
||||
`config.json` хранит публичные числовые `weights/default`. Внутри PHP сохраняются прежние semantic enum. Runtime-конфиг мигрируется `bin/ensure-utm-config.php`: только согласованные UTM, с сохранением весов, default и JSON-типов соседних полей. Скрипт идемпотентен; старые focus/cons patch-скрипты больше не вызываются доставкой.
|
||||
|
||||
| Метка | Что задаёт | Где |
|
||||
|---|---|---|
|
||||
| `indpic` | картинка-пример на преленде | корневой каталог сета `/1/`, `/2/` и т. д. |
|
||||
| `theme` | `light` / `dark` | преленд и сайт |
|
||||
| `degr` | пресет ухудшения превью «До» | сайт (#42) |
|
||||
| `registration` | `before` — PIN до оплаты, `after` — после | сайт, страница результата |
|
||||
| `bchoice` | попап выбора банка (`a` — показать) | сайт, оплата (#44) |
|
||||
| `cons` | номер группы согласий на Join; `rnd` выбирает группу по весам, исходно 1 с вероятностью 100%, default — 2 | сайт, оплата |
|
||||
| `tp` | группа тарифов | сайт, cpanel «Группы тарифов (tp)» |
|
||||
| `focus` | первоначальная область лупы Join: `center`/`face` | сайт, cpanel после `tp` |
|
||||
Перед каждым переходом Preland создаёт для всех восьми меток новый шум из10 ASCII букв/цифр, с уже выбранной цифрой в пятой позиции. Retry и recovery меняют только шум; вариант повторно не выбирается. Выбранные цифры сохраняются в upload record. Старые записи IndexedDB адаптируются только на пути recovery, без публичных alias старого URL.
|
||||
|
||||
Чужие параметры (`utm_source`, `keyword`, `subid` и любые другие) сохраняют значения после обычного URL-кодирования. Технические `key/id/stage/shown_theme` не маскируются; внешний `key` не может подменить одноразовый ключ загрузки. `shown_theme` берётся из фактически показанной темы непосредственно при переходе.
|
||||
|
||||
### Загрузка и переход на сайт
|
||||
|
||||
@@ -99,7 +95,7 @@ Preland хранит наборы ровно как Index, поэтому их
|
||||
N/05_...
|
||||
```
|
||||
|
||||
`indpic=N` выбирает корневой каталог `/N/`. Набор копируется с Index в корень
|
||||
`indpic=abcdNefghi` выбирает корневой каталог `/N/`. Набор копируется с Index в корень
|
||||
домена целиком: без переименования, вложения в `images/` и промежуточных
|
||||
каталогов. Устаревшие `images/demo*` не являются частью поставки.
|
||||
|
||||
@@ -145,8 +141,8 @@ N/05_...
|
||||
curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' 'https://<host>/api/images/public/claim?key=x'
|
||||
# 302 на https://<host>/ — точка передачи на сайте есть
|
||||
```
|
||||
В браузере: открыть `https://<домен>/?indpic=1&theme=dark&subid=TEST`, выбрать фото — адрес сменится на
|
||||
`https://<host>/public/upscale?id=…&indpic=1&theme=dark&subid=TEST…` (без `key=`), пойдёт обработка.
|
||||
В браузере: открыть `https://<домен>/?indpic=abcd1efghi&theme=abcd1efghi&subid=TEST`, выбрать фото — адрес сменится на
|
||||
`https://<host>/public/upscale?id=…&indpic=<новый шум с1>&theme=<новый шум с1>&subid=TEST…` (без `key=`), пойдёт обработка.
|
||||
Это настоящая загрузка и обработка на сайте.
|
||||
|
||||
## Автодеплой (Gitea Actions)
|
||||
|
||||
Reference in new issue
Block a user