-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path.env.example
More file actions
141 lines (120 loc) · 8.62 KB
/
Copy path.env.example
File metadata and controls
141 lines (120 loc) · 8.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# lead-engine env-example. Скопировать в .env (gitignored) и заполнить.
# Большинство значений нужны только для prod-deploy'я; для local dev
# достаточно DATABASE_URL + PLATFORM_MASTER_KEY + TELEGRAM_WEBHOOK_SECRET.
# ── Postgres (docker compose up -d) ──────────────────────────────────────────
# Совпадает с docker-compose.yml: user=lead, password=lead, db=lead_engine,
# port=5434 (не 5432/5433 — чтобы не конфликтовать с другими projects'
# Postgres-контейнерами на той же машине).
DATABASE_URL=postgres://lead:lead@localhost:5434/lead_engine
# ── Crypto ───────────────────────────────────────────────────────────────────
# 32-байтный ключ для AES-256-GCM в tenant_secrets. Сгенерить:
# openssl rand -hex 32
PLATFORM_MASTER_KEY=
# HMAC секрет для JWT-like auth tokens (signAuthToken). Если не задан —
# fallback на PLATFORM_MASTER_KEY. Лучше отдельный — ротация чтобы не
# инвалидировать все active sessions при rotation master-key'а.
PLATFORM_AUTH_SECRET=
# Публичный self-service signup. По умолчанию ЗАКРЫТ (POST /api/auth/signup → 403).
# Поставить 1 чтобы открыть (нужно для локальной разработки и self-serve).
ALLOW_PUBLIC_SIGNUP=
# ── Telegram ─────────────────────────────────────────────────────────────────
# Используется header X-Telegram-Bot-Api-Secret-Token при setWebhook.
TELEGRAM_WEBHOOK_SECRET=dev-tg-secret
# MTProto app credentials (my.telegram.org → API development tools).
# Платформенные — одно приложение на всю платформу. Нужны ТОЛЬКО для
# onboarding'а personal-account userbot'ов (kind='telegram_userbot').
# Пусто = userbot-onboarding отключён (UI-таб скрыт, роуты 503).
TELEGRAM_API_ID=
TELEGRAM_API_HASH=
# In-process userbot outbound dispatcher (claim'ит kind='telegram_userbot').
USERBOT_DISPATCHER_POLL_MS=300
USERBOT_DISPATCHER_BATCH=16
# ── HTTP-сервер ──────────────────────────────────────────────────────────────
PORT=3000
PLATFORM_BASE_DOMAIN=
# Subdomain тенанта → c.var.tenantSlug в admin-API. Local dev — пусто,
# тогда admin routes под /admin/* отключены (SaaS /api/admin/* всегда on).
# Externally-reachable URL apps/api для auto-setWebhook при POST
# /api/admin/channels/telegram. Пусто = admin вручную дёргает setWebhook
# через curl. Local dev: использовать ngrok / cloudflared tunnel.
# Пример: https://api.leadengine.app
PLATFORM_PUBLIC_URL=
# ── LLM (опционально — без них pipeline persist'ит, но не отвечает) ──────────
LLM_PROVIDER= # openai | openrouter | ollama
LLM_MODEL=
LLM_API_KEY=
LLM_BASE_URL=
# Embedder для RAG (опционально):
LLM_EMBED_PROVIDER=
LLM_EMBED_MODEL=
LLM_EMBED_API_KEY=
LLM_EMBED_BASE_URL=
LLM_EMBED_DIM=1536
# ── Knowledge base files ────────────────────────────────────────────────────
# Оригиналы загруженных KB-файлов (.pdf/.md/.txt/.json) сохраняются на apps/api.
# В prod укажите persistent volume, чтобы файлы не терялись между deploy'ями.
KB_UPLOAD_DIR=data/kb-files
KB_MAX_UPLOAD_BYTES=26214400
# Sales-engine knobs:
STYLE_SLUG= # alina-infinity-v1 | flirty-belfort-v1 | empathetic-nepq-v1 | cold-direct-pas-v1
EXPERIMENT_SLUG=
STAGE_CLASSIFIER= # "" | regex | llm
# ── Exchange vertical ────────────────────────────────────────────────────────
# Платформенный ДЕФОЛТ котируемой (локальной) валюты обменника: PHP (дефолт),
# THB, VND, IDR. Рабочая валюта задаётся per-tenant в админке (Обменка →
# «Валюта выдачи», exchange_settings.quote_asset); env влияет только на
# фоллбэк для тенантов без настройки и на дефолт демо-сида.
EXCHANGE_QUOTE_ASSET=
# ── Channels (опционально) ───────────────────────────────────────────────────
WHATSAPP_VERIFY_TOKEN=
# Meta dashboard → App Settings → Basic → App Secret. Используется для
# HMAC-SHA256 валидации X-Hub-Signature-256. Пусто = signature check
# отключён (warning'ом в boot-логе apps/api).
WHATSAPP_APP_SECRET=
STRIPE_WEBHOOK_SECRET=
WEB_WS_AUTH_SECRET= # shared-secret для /ws/:slug?auth=... (pilot-stage)
WEB_DISPATCHER_POLL_MS=200
WEB_DISPATCHER_BATCH=32
# URL CDN-bundle'а web-виджета (`/widget.js`). Если задан — POST
# /api/admin/channels/web возвращает production-ready `<script src=...>`
# snippet. Пусто = fallback на `<PLATFORM_PUBLIC_URL>/widget.js` placeholder.
WEB_WIDGET_SCRIPT_URL=
# ── Per-tenant bot tokens (override) ─────────────────────────────────────────
# Имя env: BOT_TOKEN_<TENANT_SLUG_UPPER_WITH_UNDERSCORES>, fallback BOT_TOKEN.
# Реальные токены ДОЛЖНЫ ехать через tenant_secrets (encrypted) — env только
# для одного-tenant'ного legacy bootstrap'а.
BOT_TOKEN=
# WA_ACCESS_TOKEN_<SLUG> / WA_ACCESS_TOKEN — то же для WhatsApp.
WA_ACCESS_TOKEN=
# ── Worker ───────────────────────────────────────────────────────────────────
DISPATCHER_POLL_MS=1000
DISPATCHER_BATCH_SIZE=16
# Prometheus-порт worker'а; 0 = выключен.
METRICS_PORT=9100
# Worker polls channels из БД каждые N мс чтобы подхватить onboarded
# через UI каналы без рестарта. 0 = disabled (только на boot).
WORKER_CHANNEL_RELOAD_MS=30000
# ── Rate limit (anti runaway-cost) ───────────────────────────────────────────
# Per-tenant sliding window для inbound webhook'ов. Превышение → 429
# Retry-After. 0 / 0 = disabled (warning'ом в boot-логе).
RATE_LIMIT_PER_MIN=60
RATE_LIMIT_PER_HOUR=600
# ── Stripe billing (опционально — без них checkout/portal вернут 503) ────────
# Test mode: sk_test_xxx. Live: sk_live_xxx.
STRIPE_SECRET_KEY=
# Price IDs из Stripe dashboard → Products → ... → Pricing
# `Standard pricing` → копируем `price_xxx`.
STRIPE_PRICE_STARTER=
STRIPE_PRICE_PRO=
# Redirect URLs после Stripe Checkout. `{TENANT}` placeholder
# подставляется на slug tenant'а.
STRIPE_CHECKOUT_SUCCESS_URL=https://leadengine.app/dashboard?upgrade=success
STRIPE_CHECKOUT_CANCEL_URL=https://leadengine.app/dashboard?upgrade=cancel
# ── Superadmin API ────────────────────────────────────────────────────────────
# Платформенный Bearer-токен для /api/superadmin/* endpoints.
# Генерировать: openssl rand -hex 32
PLATFORM_SUPERADMIN_TOKEN=
# ── Landing page ──────────────────────────────────────────────────────────────
# URL для записи на демо (лендинг → кнопка "Смотреть демо").
# По умолчанию — Calendly placeholder, замените на реальную ссылку.
VITE_DEMO_URL=https://calendly.com/leadengine/demo