G GPFT

Plateforme & API

Une architecture simple, robuste et auditable

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.

Stack technique

Des composants standards, maintenus depuis des années, disponibles sur n'importe quel hébergeur européen.

CoucheTechnologieRôle
ServeurUbuntu 24.04 LTS · Plesk ObsidianServeur dédié, administration, certificats, sauvegardes
Webnginx (reverse proxy) + Apache · HTTP/2 · TLS 1.3Service des pages et de l'API, compression, cache statique
ApplicationPHP 8.3 FPMCRM, API d'ingestion, webhooks, tâches planifiées
DonnéesMariaDB 10.11 (InnoDB, utf8mb4)Leads, journaux SMS, visites, réponses, campagnes
SMSPasserelle SMS française (API REST, webhooks DLR et réponses)Envoi, accusés de réception, réponses, STOP, coût réel
NotificationsTelegram Bot API · SMTPAlertes temps réel par flux
IntégrationsGoogle Apps Script · Google Sheets APIImport Meta Lead Ads, export des leads qualifiés vers les partenaires
FrontHTML, Tailwind CSS compilé, JavaScript sans frameworkInterface CRM et landing pages légères (< 100 Ko)

Modules du CRM

Leads

Liste filtrable, fiche détaillée, statuts, actions manuelles (renvoi SMS, qualification, archivage), doublons, export.

SMS

Journal de chaque envoi avec statut opérateur, coût, segments, modèle utilisé, file d'attente des heures calmes.

Réponses

Réponses SMS reçues via webhook, rattachées au lead, STOP traités automatiquement, mise en opposition.

Campagnes

Performance par source et campagne : volumes, clics, conversion, coût SMS, coût par lead qualifié.

Visites

Mesure d'audience des landing pages sans cookie : pages vues, visiteurs uniques du jour, étapes du formulaire atteintes, source UTM.

Campagne SMS

Envoi de masse vers un fichier de contacts, lien de campagne court, compteur de clics, attribution de la source.

Cycle de vie d'un lead

  1. Ingestion : le lead arrive par l'API (POST /api/lead.php) avec un jeton secret. Téléphone normalisé en E.164, déduplication par téléphone puis e-mail.
  2. Notification : alerte « nouveau lead » avec source et campagne sur le canal dédié.
  3. SMS : envoi immédiat d'un SMS personnalisé avec lien court unique (/l/TOKEN), ou mise en file si heures calmes. Jamais deux SMS automatiques en moins de 24 h.
  4. Clic : le lien enregistre le clic, change le statut, notifie, puis redirige vers la landing pré-remplie.
  5. Qualification : le prospect répond à deux questions et confirme ses coordonnées (POST /api/requalif.php). Statut « converti », notification détaillée, export vers le Google Sheet du partenaire.
  6. Relance : si pas de clic ou de qualification, relances programmées par tâche planifiée jusqu'au plafond défini, arrêt immédiat en cas de STOP.

API & webhooks

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).

RouteUsageSécurité
POST /api/lead.phpIngestion 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.phpFormulaire 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.phpMesure d'audience : page vue, étape de formulaire atteinte, source UTM. Appelé en sendBeacon.IP anonymisée, pas de cookie
POST /api/sms_webhook.phpWebhook de la passerelle SMS : réponses, STOP, accusés de réception (DLR).Jeton dans l'URL, journalisation
GET /l/TOKENLien court du SMS : enregistre le clic, notifie, redirige vers la landing pré-remplie.Jeton unique, détection des robots

Exemple d'ingestion

# 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âches planifiées

TâcheFréquenceRôle
CRON relanceToutes les heures, jours ouvrésEnvoi 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éceptionToutes les 15 minutesRécupération des statuts de livraison manquants auprès de la passerelle SMS
CRON synchronisation SheetsToutes les 10 minutesRejeu des exports partenaires en échec, cohérence CRM / Google Sheet
CRON sauvegardeQuotidienneDump chiffré de la base et des fichiers, rétention 30 jours, copie hors serveur

Modèle de données

Cinq tables principales, toutes horodatées, avec index sur le téléphone, le jeton et le statut.

leads

Identité, coordonnées, situation, objectif, source, campagne, statut, jeton du lien court, horodatages (import, SMS, clic, qualification), compteurs (SMS, clics, doublons).

sms_logs

Un enregistrement par envoi : lead, modèle, nombre de segments, identifiant opérateur, statut de livraison, coût réel, erreurs.

sms_replies

Réponses reçues par webhook, rattachement au lead par numéro, détection STOP, horodatage.

visits

Chemin, référent, source UTM, empreinte visiteur du jour (hash), IP anonymisée, agent utilisateur, drapeau robot, étape de formulaire.

sms_queue

File d'attente des envois différés (heures calmes), dédupliquée par lead, vidée par la tâche du matin.

settings / config

Configuration hors du dossier web : accès base, clés API, modèles SMS, heures calmes, canaux de notification.

Landing pages de qualification

  • Parcours en trois étapes, optimisé mobile, formulaire pré-rempli depuis le lien SMS.
  • Validation et normalisation du téléphone côté client et serveur (France, Belgique, Suisse).
  • Attribution automatique de la source : utm_source, gclid, msclkid, ttclid.
  • Micro-conversions (étape 2, étape 3, envoi) disponibles pour nourrir les algorithmes d'enchères publicitaires, uniquement après consentement.
  • Consent Mode v2 Google et UET Consent Microsoft : aucun cookie publicitaire sans accord explicite.
  • Variantes A/B livrables depuis un script de génération, pour tester accroches et formulaires sans dupliquer le code.

Performance & exploitation

  • Pages servies en moins de 200 ms, CSS compilé et minifié, aucune bibliothèque JavaScript lourde.
  • API d'ingestion idempotente : un ré-import ne crée jamais de doublon ni de second SMS.
  • Journalisation applicative des erreurs, supervision des services (nginx, PHP-FPM, MariaDB, cron), alertes.
  • Sauvegardes testées par restauration trimestrielle sur un environnement de secours.
  • Documentation d'exploitation remise au client : schéma, routes, variables de configuration, procédures de reprise.

Vous voulez voir la plateforme en action ?

Démonstration sur un environnement de test, avec vos propres scénarios.

Demander une démo