Plateforme & API
Pas de framework exotique ni de dépendance SaaS critique : une application PHP moderne, une base MariaDB, un serveur dédié. Tout est lisible, sauvegardable et transférable.
Des composants standards, maintenus depuis des années, disponibles sur n'importe quel hébergeur européen.
| Couche | Technologie | Rôle |
|---|---|---|
| Serveur | Ubuntu 24.04 LTS · Plesk Obsidian | Serveur dédié, administration, certificats, sauvegardes |
| Web | nginx (reverse proxy) + Apache · HTTP/2 · TLS 1.3 | Service des pages et de l'API, compression, cache statique |
| Application | PHP 8.3 FPM | CRM, API d'ingestion, webhooks, tâches planifiées |
| Données | MariaDB 10.11 (InnoDB, utf8mb4) | Leads, journaux SMS, visites, réponses, campagnes |
| SMS | Passerelle SMS française (API REST, webhooks DLR et réponses) | Envoi, accusés de réception, réponses, STOP, coût réel |
| Notifications | Telegram Bot API · SMTP | Alertes temps réel par flux |
| Intégrations | Google Apps Script · Google Sheets API | Import Meta Lead Ads, export des leads qualifiés vers les partenaires |
| Front | HTML, Tailwind CSS compilé, JavaScript sans framework | Interface CRM et landing pages légères (< 100 Ko) |
Liste filtrable, fiche détaillée, statuts, actions manuelles (renvoi SMS, qualification, archivage), doublons, export.
Journal de chaque envoi avec statut opérateur, coût, segments, modèle utilisé, file d'attente des heures calmes.
Réponses SMS reçues via webhook, rattachées au lead, STOP traités automatiquement, mise en opposition.
Performance par source et campagne : volumes, clics, conversion, coût SMS, coût par lead qualifié.
Mesure d'audience des landing pages sans cookie : pages vues, visiteurs uniques du jour, étapes du formulaire atteintes, source UTM.
Envoi de masse vers un fichier de contacts, lien de campagne court, compteur de clics, attribution de la source.
POST /api/lead.php) avec un jeton secret. Téléphone normalisé en E.164, déduplication par téléphone puis e-mail./l/TOKEN), ou mise en file si heures calmes. Jamais deux SMS automatiques en moins de 24 h.POST /api/requalif.php). Statut « converti », notification détaillée, export vers le Google Sheet du partenaire.Toutes les routes répondent en JSON. Les routes d'écriture exigent un jeton secret ou sont limitées à l'origine du site. Les erreurs renvoient un code HTTP explicite (403, 405, 422).
| Route | Usage | Sécurité |
|---|---|---|
POST /api/lead.php | Ingestion d'un lead (nom, prénom, téléphone, e-mail, situation, source, campagne). Déduplication, SMS automatique. | Jeton token comparé en temps constant |
POST /api/requalif.php | Formulaire de la landing : requalifie un lead existant (par id ou téléphone) ou crée un lead direct déjà qualifié. | Même origine, validation des champs |
GET /api/prefill.php?t= | Renvoie les coordonnées associées au lien court pour pré-remplir la landing. | Jeton unique par lead, non devinable |
POST /api/hit.php | Mesure d'audience : page vue, étape de formulaire atteinte, source UTM. Appelé en sendBeacon. | IP anonymisée, pas de cookie |
POST /api/sms_webhook.php | Webhook de la passerelle SMS : réponses, STOP, accusés de réception (DLR). | Jeton dans l'URL, journalisation |
GET /l/TOKEN | Lien court du SMS : enregistre le clic, notifie, redirige vers la landing pré-remplie. | Jeton unique, détection des robots |
# Envoi d'un lead depuis n'importe quel outil capable d'appeler une URL curl -X POST https://votre-crm.fr/api/lead.php \ -H "Content-Type: application/json" \ -d '{ "token": "••••••••", "prenom": "Marie", "nom": "Durand", "telephone": "06 12 34 56 78", "email": "marie@exemple.fr", "source": "META", "campagne": "retraite-oct" }' # Réponse { "ok": true, "id": 1248, "duplicate": false, "sms_sent": true }
| Tâche | Fréquence | Rôle |
|---|---|---|
| CRON relance | Toutes les heures, jours ouvrés | Envoi groupé de la file nocturne le matin, relances J+1 / J+3 des leads sans clic, respect du plafond par lead |
| CRON accusés de réception | Toutes les 15 minutes | Récupération des statuts de livraison manquants auprès de la passerelle SMS |
| CRON synchronisation Sheets | Toutes les 10 minutes | Rejeu des exports partenaires en échec, cohérence CRM / Google Sheet |
| CRON sauvegarde | Quotidienne | Dump chiffré de la base et des fichiers, rétention 30 jours, copie hors serveur |
Cinq tables principales, toutes horodatées, avec index sur le téléphone, le jeton et le statut.
Identité, coordonnées, situation, objectif, source, campagne, statut, jeton du lien court, horodatages (import, SMS, clic, qualification), compteurs (SMS, clics, doublons).
Un enregistrement par envoi : lead, modèle, nombre de segments, identifiant opérateur, statut de livraison, coût réel, erreurs.
Réponses reçues par webhook, rattachement au lead par numéro, détection STOP, horodatage.
Chemin, référent, source UTM, empreinte visiteur du jour (hash), IP anonymisée, agent utilisateur, drapeau robot, étape de formulaire.
File d'attente des envois différés (heures calmes), dédupliquée par lead, vidée par la tâche du matin.
Configuration hors du dossier web : accès base, clés API, modèles SMS, heures calmes, canaux de notification.
utm_source, gclid, msclkid, ttclid.Vous voulez voir la plateforme en action ?
Démonstration sur un environnement de test, avec vos propres scénarios.