Aller au contenu

Variables d’environnement

Le serveur et le worker lisent les mêmes variables ; l’inbox n’en lit qu’une, CHAT_API_URL. Une valeur vide vaut « non défini ». Chaque défaut est celui qui marche sur un poste de développement, avec le docker compose du dépôt.

OùFichier
en production, avec Docker Compose.env, à côté de docker-compose.yml ; les secrets des outils de l’IA dans outils.env — voir Mise en production
en développement, le serveurapps/server/.env (modèle commenté : apps/server/.env.example)
en développement, l’inboxapps/web/.env.local
VariableRôle
NODE_ENVproduction. Rend CHAT_SECRET obligatoire, ignore CHAT_DEV_AGENT (une requête sans session est refusée), n’écrit pas la démonstration dans une base vide, retire la page /demo, refuse une requête du widget sans origine, et interdit seed
CHAT_SECRETsigne les jetons des visiteurs, les liens des fichiers et l’aller-retour chez le fournisseur d’identité, scelle les secrets des webhooks, et donne la clé des alertes sur le téléphone. 32 caractères au moins : openssl rand -base64 32. Sans lui, le serveur ne démarre pas en production ; en développement, un secret fixe le remplace. Le changer rend illisibles les secrets des webhooks, et chaque téléphone doit réactiver ses alertes ; les sessions des conseillers n’en dépendent pas
DATABASE_URLle PostgreSQL du schéma chat (voir plus bas)
CHAT_WEB_ORIGIN, CHAT_PUBLIC_URL, CHAT_API_URLoù sont l’inbox et le serveur (voir plus bas) : leurs défauts visent localhost
VariableDéfautRôle
CHAT_PORT8810le port du serveur : connexion, API, WebSocket, script du widget, API REST, MCP
CHAT_PUBLIC_URLhttp://localhost: suivi de CHAT_PORTl’adresse publique du serveur, sans / final. Le fournisseur d’identité y renvoie (/api/auth/oidc/callback), Twilio y appelle pour chaque SMS (/channels/twilio/…) et y lit les fichiers envoyés en RCS, et le cookie de session n’est Secure que si elle commence par https:
CHAT_WEB_ORIGINhttp://localhost:3210l’origine de l’inbox, seule admise : CORS, ouverture du WebSocket, cadre de l’aperçu du widget. Les liens d’invitation et ceux des e-mails la prennent pour adresse, et le retour du fournisseur d’identité y ramène
CHAT_TRUST_PROXY—1 derrière une passerelle : l’adresse du visiteur et celle de qui se connecte sont lues dans X-Forwarded-For, l’adresse publique dans X-Forwarded-Proto et X-Forwarded-Host. Sans passerelle, laissez-la vide : ces en-têtes seraient à qui veut les écrire
CHAT_WORKER—separate : les tâches de fond (IA, webhooks, automatisations, réveil des conversations en attente) quittent le serveur pour le worker, qu’il faut alors lancer

L’inbox et le serveur doivent partager un site — deux sous-domaines du même domaine, ou le même nom : le cookie de session est celui du serveur. Voir Mise en production.

Facultatives : sans elles, les conseillers se connectent par mot de passe seulement. Le bouton de connexion ne paraît que si CHAT_OIDC_ISSUER et CHAT_OIDC_CLIENT_ID sont définis. Voir Comptes et connexion.

VariableDéfautRôle
CHAT_OIDC_ISSUER—l’émetteur OpenID Connect : https://login.microsoftonline.com/<locataire>/v2.0, https://accounts.google.com, https://sso.exemple.fr/realms/<royaume>…
CHAT_OIDC_CLIENT_ID—l’identifiant du client déclaré chez le fournisseur
CHAT_OIDC_CLIENT_SECRET—son secret ; vide pour un client public
CHAT_OIDC_NAMESSOle nom sur le bouton : Continuer avec Microsoft
VariableDéfautRôle
DATABASE_URLpostgres://chat:chat@127.0.0.1:55440/chatPostgreSQL 16 avec l’extension pgvector. Le serveur y crée et migre le schéma chat à chaque démarrage : paramétrage, comptes, conversations. La file des tâches (pg-boss, schéma pgboss) et le temps réel (LISTEN/NOTIFY) y passent aussi. Le rôle doit pouvoir créer l’extension vector ; pour les questions en SQL des tableaux de bord, il doit aussi pouvoir créer le rôle chat_analytics, qui lit le schéma analytics et rien d’autre — sans lui, seules les questions assistées fonctionnent (tableaux de bord)

L’inbox la lit à chaque requête, pas à la construction : la même image sert toute instance.

VariableDéfautRôle
CHAT_API_URLhttp://localhost:8810l’adresse du serveur, telle que le navigateur des conseillers la joint : la connexion, l’API, le WebSocket, l’aperçu du widget et la ligne d’installation du widget

Sans clé, et sans modèle servi sur localhost, pas d’IA : chaque conversation va droit aux conseillers.

VariableDéfautRôle
CHAT_AI_PROVIDERmistralmistral, openai ou ollama (http://localhost:11434/v1)
CHAT_AI_BASE_URLl’adresse du fournisseurtout serveur compatible OpenAI : Azure, vLLM, une passerelle
CHAT_AI_API_KEY—la clé du fournisseur ; facultative pour un modèle sur localhost ou 127.0.0.1
CHAT_AI_MODELmistral-small-latestle modèle des réponses, du copilote, des étiquettes et des résumés
CHAT_AI_EMBEDDING_MODELmistral-embedle modèle des vecteurs de la base de connaissance (1024 dimensions, celles du schéma)
CHAT_AI_VISION_MODELCHAT_AI_MODELle modèle qui lit les images jointes
CHAT_AI_OCR_MODELmistral-ocr-latest chez Mistral, aucun ailleurslit les PDF joints ; off pour s’en passer
CHAT_AI_SPEECH_MODELvoxtral-mini-tts-latest chez Mistral, aucun ailleurslit les messages à voix haute en mode audio ; off : la voix du navigateur
CHAT_AI_SPEECH_VOICEfr_marie_neutral chez Mistralla voix de ce modèle
CHAT_AI_REDACTmasquage si le modèle est externe0 : les données personnelles partent telles quelles. Un modèle est externe sauf sur localhost, 127.0.0.1, ::1 ou un nom en .internal
CHAT_AI_MIN_SIMILARITY0.7la similarité au-dessous de laquelle un passage de la base de connaissance n’est pas une source

Au démarrage, le journal dit ce qu’il en est : chat : IA mistral-small-latest, données personnelles masquées, ou chat : IA désactivée — CHAT_AI_API_KEY absent ; les conversations vont aux conseillers.

VariableDéfautRôle
CHAT_FILES_DIR.files, dans le dossier de travail du processusoù sont gardés les fichiers envoyés dans les conversations, jamais en base. Le serveur et le worker doivent voir le même dossier
GIPHY_API_KEY—la clé GIPHY des GIF que les conseillers envoient. Sans elle, la palette n’a que les emoji. La recherche passe par le serveur : la clé n’atteint jamais un navigateur

Facultatives : sans serveur SMTP, la messagerie n’écrit aucun e-mail de son propre chef — les liens des comptes se transmettent à la main, et rien ne part au visiteur d’un site qui n’a pas son adresse e-mail. Voir Comptes et connexion et le widget.

VariableDéfautRôle
CHAT_SMTP_URL—le serveur SMTP : smtp://utilisateur:motdepasse@smtp.exemple.fr:587 (STARTTLS), ou smtps://…:465 (TLS dès la connexion). Un caractère spécial du mot de passe s’écrit encodé (%40 pour @). En développement, smtp://127.0.0.1:1025 : le Mailpit du docker compose du dépôt, lu à http://localhost:8025
CHAT_MAIL_FROMMessagerie <messagerie@localhost> hors productionl’expéditeur : Support Acme <support@exemple.fr>. Requis en production avec CHAT_SMTP_URL : le serveur ne démarre pas sans lui

Rien à définir : la clé des alertes (VAPID) est tirée de CHAT_SECRET. Les services de push des navigateurs demandent seulement qui les appelle.

VariableDéfautRôle
CHAT_PUSH_SUBJECTCHAT_WEB_ORIGIN s’il est en https:, sinon mailto: et l’adresse de CHAT_MAIL_FROMune adresse mailto: ou https: où les services de push (Apple, Google, Mozilla, Microsoft) peuvent écrire à l’exploitant

Le téléphone d’un conseiller doit joindre l’inbox en HTTPS : un navigateur ne propose les alertes qu’à une page sûre. Voir Alertes.

Un numéro de Administration › Numéros SMS ne porte pas le secret de son compte : il nomme la variable qui le contient, comme un outil de l’IA. Le nom est libre — la démonstration dit TWILIO_AUTH_TOKEN — et la variable se définit à côté des autres. Sans elle, le numéro refuse ce qui arrive et ne répond pas. Voir SMS et RCS.

VariableDéfautRôle
le nom que donne le numéro—Twilio : l’Auth Token du compte, qui vérifie la signature de chaque appel de Twilio et signe les envois. SMS Mode : la clé d’API, envoyée dans X-Api-Key

Une adresse de Administration › Adresses e-mail ne porte pas son mot de passe : elle nomme la variable qui le contient. Le nom est libre — la démonstration dit SUPPORT_MAIL_PASSWORD — et la variable se définit à côté des autres. Sans elle, l’adresse n’est pas relevée et ses réponses ne partent pas. Ces adresses ne dépendent pas de CHAT_SMTP_URL. Voir E-mail.

VariableDéfautRôle
le nom que donne l’adresse—le mot de passe — ou le mot de passe d’application — du compte, pour ses serveurs IMAP et SMTP
VariableDéfautRôle
CHAT_WEBHOOK_ALLOW—des destinataires du réseau interne, séparés par des virgules : un nom (crm.interne.example), un domaine et ses sous-domaines (*.interne.example), une plage (10.20.0.0/16). Sans elle, un webhook n’appelle qu’une adresse publique, en HTTPS sur le port 443
CHAT_WEBHOOK_DEV—1 : HTTP et adresses locales permis, pour essayer un récepteur sur sa machine. À réserver au développement

Elles valent aussi pour l’étape Appeler une adresse des automatisations. Voir Webhooks.

Un outil de l’IA ou un serveur MCP déclaré dans Administration › Outils IA ne porte jamais son secret : il nomme une variable d’environnement du serveur, ${METEO_TOKEN} dans un en-tête par exemple. Le nom est libre ; la variable se définit à côté des autres (outils.env avec Docker Compose). Un en-tête dont la variable manque n’est pas envoyé. Voir Outils de l’IA.

VariableDéfautRôle
CHAT_DEV_AGENT—l’adresse e-mail d’un conseiller actif, au nom duquel le serveur répond aux requêtes de l’inbox sans session : pas de connexion sur un poste de développement. Le modèle apps/server/.env.example y met le superviseur de la démonstration, marc.jamain@exemple.fr. Ignorée en production
CHAT_MCP_DEMO_PORT8820le port du serveur MCP de démonstration (mcp-demo)

Au premier démarrage sur une base vide, hors production, le serveur écrit le paramétrage de démonstration (Acme Assurances) ; corepack pnpm seed vide le schéma chat et y ajoute les conversations de démonstration.

Un logiciel libre d’Eodia, studio de logiciel IA-natif — frère de basedb.