feat(admin): canaux IA par palier (z.ai/DeepSeek directs), emails generes par IA, reductions Stripe
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m40s

- Chaque modele d'un palier devient une route {canal, modele} : openrouter,
  deepseek direct, zhipu (z.ai, nouveau canal), minimax, openai, xai ;
  repli automatique sur la route suivante si la cle manque, compatibilite
  ascendante avec les anciens reglages a chaines
- Page Fournisseurs refondue en sections ; interrupteurs et chaine de
  secours retablis ; tests de connexion avec delai d'attente
- Emails de relance generes par IA (canal au choix, prompt construit depuis
  le plan marketing, HTML sane, RTL arabe/persan, jamais d'envoi automatique)
- Codes promo : validation locale avant Stripe, Coupon+PromotionCode avec
  double plafond, comptage par session (webhook+sync=1 fois), ecriture
  atomique, relier-a-Stripe, suppression, validation publique au checkout
- Page Tarifs : champ code promo (?promo=) avec verification traduite
- Tests : 1357 verts (facturation par palier testee dans le worker,
  point de contact providers/available, promos, generation)
This commit is contained in:
2026-09-05 19:46:33 +02:00
parent 6c26712687
commit 0a013c679d
47 changed files with 7210 additions and 679 deletions

View File

@@ -71,6 +71,36 @@ OPENAI_HEALTH_CHECK_TIMEOUT=5
OPENROUTER_API_KEY=
OPENROUTER_MODEL=deepseek/deepseek-chat
# DeepSeek Configuration (API directe, compatible OpenAI). Optional. If absent: provider disabled.
# NOTE: pour le routage par palier (page « Modèles & abonnements ») et la
# génération d'emails, la clé API seule suffit (réglage admin ou DEEPSEEK_API_KEY).
# Les bascules *_ENABLED ne concernent que l'ancienne chaîne de secours du registre.
# Get API key from: https://platform.deepseek.com/api_keys
DEEPSEEK_ENABLED=false
DEEPSEEK_API_KEY=
DEEPSEEK_MODEL=deepseek-chat
# DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
# z.ai / Zhipu Configuration (modèles GLM — API directe compatible OpenAI). Optional. If absent: provider disabled.
# NOTE: la clé API seule suffit pour le routage par palier et la génération
# d'emails ; ZHIPU_ENABLED ne concerne que l'ancienne chaîne de secours.
# Get API key from: https://z.ai/manage-apikey/apikey-list
ZHIPU_ENABLED=false
ZHIPU_API_KEY=
ZHIPU_MODEL=glm-5.3
# Base par défaut ; l'API internationale z.ai est compatible OpenAI.
# ZHIPU_BASE_URL=https://api.z.ai/api/paas/v4
# Minimax Configuration (API publique compatible OpenAI). Optional. If absent: provider disabled.
# NOTE: la clé API seule suffit pour le routage par palier et la génération
# d'emails ; MINIMAX_ENABLED ne concerne que l'ancienne chaîne de secours.
# Get API key from: https://www.minimax.io/ (MINIMAX_GROUP_ID requis selon le compte)
MINIMAX_ENABLED=false
MINIMAX_API_KEY=
MINIMAX_MODEL=MiniMax-M3
# MINIMAX_BASE_URL=https://api.minimax.io/v1
MINIMAX_GROUP_ID=
# Mistral OCR — translation of SCANNED PDFs (image-only pages).
# Optional. If absent: scanned PDFs are rejected with an explicit error.
# Get API key from: https://console.mistral.ai/ (~$1 / 1000 pages)