🖥️ Guide Technique — Déploiement Agent IA Vocal

Version Hardware / On-Premise — ITM Agency


VUE D'ENSEMBLE

Ce guide couvre le déploiement complet d'un agent IA vocal de réception d'appel directement sur le matériel installé chez le client. Les données ne quittent jamais les locaux de l'entreprise. C'est le tier premium "Sur devis" d'ITM Agency.

Avantages clés par rapport au Cloud/VPS : - Souveraineté totale des données (RGPD simplifié) - Pas de dépendance à une connexion internet pour le traitement IA - Performance constante indépendante de la charge serveur externe - Argument commercial fort : "vos données restent chez vous"

Stack technique : - Matériel : Mini-PC Intel NUC / Beelink / GMKtec (recommandé) ou Raspberry Pi 5 (entrée de gamme) - OS : Ubuntu Server 22.04 LTS (pré-installé par ITM Agency avant livraison) - Téléphonie : Twilio (numéro dédié + webhooks via tunnel sécurisé) - Tunnel sécurisé : Cloudflare Tunnel (gratuit, remplace ngrok) - STT local : Whisper (OpenAI, modèle small ou medium — tourne en local) - LLM local : Ollama + Mistral 7B ou LLaMA 3 (tourne en local, sans API externe) - TTS : Piper TTS (synthèse vocale locale, français) - Calendrier : Google Calendar API ou Outlook (connexion sortante uniquement) - Notifications : Twilio SMS


MATÉRIEL RECOMMANDÉ

Option A — Mini-PC (recommandé, ~200-350€)

Modèle RAM Stockage Prix indicatif
Beelink EQ12 16 Go 500 Go SSD ~200€
GMKtec NucBox M5 16 Go 512 Go SSD ~220€
Intel NUC 12 32 Go 1 To SSD ~350€

✅ Recommandé pour : performance, stabilité, modèles LLM plus puissants

Option B — Raspberry Pi 5 (entrée de gamme, ~120€)

Composant Détail Prix
Raspberry Pi 5 8Go Carte principale ~80€
Boîtier + refroidissement actif Pimoroni / Argon ~20€
SSD NVMe 256Go (via HAT) Stockage rapide ~30€

⚠️ Limité aux modèles LLM légers (Mistral 7B quantisé Q4)

Accessoires communs


ÉTAPE 1 — PRÉPARATION DU MATÉRIEL (chez ITM Agency, avant livraison)

1.1 Installation de l'OS

# Télécharger Ubuntu Server 22.04 LTS
# Flasher sur SSD/SD avec Raspberry Pi Imager ou Balena Etcher
# Configurer au premier boot :
# - Nom de la machine : agent-[nom-client]
# - Utilisateur : itmagent
# - SSH activé
# - Mot de passe fort noté dans la fiche client Notion

1.2 Installation de l'environnement complet

# Connexion SSH ou accès direct
sudo apt update && sudo apt upgrade -y

# Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# Python 3 + pip (pour Whisper et Piper)
sudo apt install -y python3 python3-pip ffmpeg

# PM2
sudo npm install -g pm2

# Ollama (moteur LLM local)
curl -fsSL https://ollama.ai/install.sh | sh

# Téléchargement du modèle LLM (à faire une fois, ~4Go)
ollama pull mistral

# Whisper (STT local)
pip3 install openai-whisper

# Piper TTS (voix française locale)
pip3 install piper-tts
# Télécharger la voix française
mkdir -p /home/itmagent/piper-voices
cd /home/itmagent/piper-voices
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/siwis/medium/fr_FR-siwis-medium.onnx
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/siwis/medium/fr_FR-siwis-medium.onnx.json

# Cloudflare Tunnel
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb

1.3 Installation du code agent

mkdir -p /home/itmagent/agent-ia
cd /home/itmagent/agent-ia
npm init -y
npm install express twilio axios dotenv multer

ÉTAPE 2 — CONFIGURATION DU TUNNEL CLOUDFLARE

Le tunnel permet à Twilio d'atteindre le mini-PC derrière le réseau du client sans ouvrir de port ni avoir d'IP fixe.

2.1 Création du tunnel (depuis le compte Cloudflare ITM Agency)

# Authentification Cloudflare
cloudflared tunnel login

# Création du tunnel nommé avec le nom du client
cloudflared tunnel create [nom-client]
# → Génère un fichier credentials JSON dans ~/.cloudflared/

# Configuration du tunnel
cat > ~/.cloudflared/config.yml << EOF
tunnel: [TUNNEL_ID]
credentials-file: /home/itmagent/.cloudflared/[TUNNEL_ID].json

ingress:
  - hostname: agent-[nom-client].itm-agency.fr
    service: http://localhost:3000
  - service: http_status:404
EOF

# Démarrage automatique
sudo cloudflared service install
sudo systemctl start cloudflared
sudo systemctl enable cloudflared

2.2 DNS Cloudflare

Dans le panneau Cloudflare ITM Agency → DNS → Ajouter : - Type : CNAME - Nom : agent-[nom-client] - Cible : [TUNNEL_ID].cfargotunnel.com

✅ Le client disposera d'une URL stable : https://agent-[nom-client].itm-agency.fr


ÉTAPE 3 — CODE DE L'AGENT IA (100% LOCAL)

3.1 Fichier principal server.js

const express = require('express');
const twilio = require('twilio');
const { exec } = require('child_process');
const fs = require('fs');
const path = require('path');
const axios = require('axios');
require('dotenv').config();

const app = express();
app.use(express.urlencoded({ extended: true }));
app.use(express.json());

const VoiceResponse = twilio.twiml.VoiceResponse;

// Prompt système — personnalisé par client
const SYSTEM_PROMPT = `Tu es ${process.env.CLIENT_AGENT_NAME}, l'assistant vocal de ${process.env.CLIENT_COMPANY_NAME}, entreprise du bâtiment.
Tu réponds uniquement en français, de manière professionnelle et chaleureuse.
Tes missions :
1. Accueillir l'appelant et identifier son besoin (devis, urgence, RDV, information)
2. Si RDV : proposer des créneaux disponibles
3. Si urgence : collecter les coordonnées et promettre un rappel rapide
4. Si devis : noter type de travaux, adresse, surface approximative
5. Clôturer poliment et confirmer les actions

Informations sur l'entreprise :
- Secteur : ${process.env.CLIENT_SECTOR}
- Zone d'intervention : ${process.env.CLIENT_ZONES}
- Horaires : ${process.env.CLIENT_HOURS}
Ne jamais inventer de prix ou délais. En cas de doute, promettre un rappel.`;

// Réception d'un appel
app.post('/incoming-call', (req, res) => {
  const twiml = new VoiceResponse();
  const gather = twiml.gather({
    input: 'speech',
    language: 'fr-FR',
    speechTimeout: 'auto',
    action: '/process-speech',
    method: 'POST'
  });
  gather.say({ voice: 'Polly.Lea', language: 'fr-FR' },
    `Bonjour, vous êtes bien chez ${process.env.CLIENT_COMPANY_NAME}. Je suis ${process.env.CLIENT_AGENT_NAME}. Comment puis-je vous aider ?`);
  res.type('text/xml');
  res.send(twiml.toString());
});

// Traitement via LLM local (Ollama)
app.post('/process-speech', async (req, res) => {
  const userSpeech = req.body.SpeechResult;
  const twiml = new VoiceResponse();

  if (!userSpeech) {
    twiml.say({ voice: 'Polly.Lea', language: 'fr-FR' }, "Je n'ai pas entendu votre réponse. Pouvez-vous répéter ?");
    return res.type('text/xml').send(twiml.toString());
  }

  try {
    // Appel Ollama local (Mistral)
    const ollamaRes = await axios.post('http://localhost:11434/api/generate', {
      model: 'mistral',
      prompt: `[INST] ${SYSTEM_PROMPT}\n\nAppelant: ${userSpeech}\nAssistant: [/INST]`,
      stream: false,
      options: { num_predict: 150, temperature: 0.7 }
    });

    const agentResponse = ollamaRes.data.response.trim();

    const gather = twiml.gather({
      input: 'speech',
      language: 'fr-FR',
      speechTimeout: 'auto',
      action: '/process-speech',
      method: 'POST'
    });
    gather.say({ voice: 'Polly.Lea', language: 'fr-FR' }, agentResponse);

  } catch (error) {
    console.error('Erreur LLM local:', error.message);
    twiml.say({ voice: 'Polly.Lea', language: 'fr-FR' },
      "Je rencontre une difficulté. Veuillez rappeler dans quelques instants, merci.");
  }

  res.type('text/xml').send(twiml.toString());
});

app.listen(3000, () => console.log(`✅ Agent IA [${process.env.CLIENT_COMPANY_NAME}] démarré sur le port 3000`));

3.2 Variables d'environnement .env

TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_PHONE_NUMBER=+33XXXXXXXXX
CLIENT_COMPANY_NAME=Maçonnerie Dupont
CLIENT_AGENT_NAME=Sophie
CLIENT_SECTOR=Maçonnerie, rénovation, gros œuvre
CLIENT_ZONES=Île-de-France, Seine-et-Marne
CLIENT_HOURS=Lundi au vendredi 7h-18h, samedi 8h-12h
OWNER_PHONE=+336XXXXXXXX
ITM_API_KEY=xxxxxxxx
ITM_APP_ID=xxxxxxxx

3.3 Démarrage automatique

cd /home/itmagent/agent-ia
pm2 start server.js --name "agent-ia-[nom-client]"
pm2 save
pm2 startup

ÉTAPE 4 — INSTALLATION CHEZ LE CLIENT

4.1 Matériel à apporter

4.2 Procédure sur site (20-30 minutes)

1. Brancher le mini-PC sur le réseau local (RJ45 sur le routeur/switch du client)
2. Brancher l'alimentation
3. Attendre 2 minutes (démarrage automatique)
4. Vérifier depuis votre téléphone : https://agent-[nom-client].itm-agency.fr/health
   → Doit répondre {"status":"ok"}
5. Appeler le numéro Twilio du client pour tester
6. Vérifier la réception du SMS de notification sur le téléphone du gérant
7. Former le client (15 min) : comment voir les logs, que faire en cas de panne

4.3 Test de validation sur site

□ Le mini-PC démarre seul après branchement
□ Le tunnel Cloudflare est actif (URL répond)
□ Twilio redirige bien les appels vers le mini-PC
□ L'agent décroche et parle en français
□ Le LLM local répond correctement (tester 3 scénarios)
□ SMS de notification reçu après l'appel test
□ Log de l'appel visible dans le dashboard ITM Agency
□ Le client a reçu ses identifiants et la fiche de contact SAV

ÉTAPE 5 — MAINTENANCE & SUPPORT

5.1 Accès à distance

Depuis le laptop ITM Agency, pour intervenir sans se déplacer :

# Via Cloudflare Tunnel (SSH distant)
cloudflared access ssh --hostname ssh-[nom-client].itm-agency.fr

Ajouter dans config.yml une entrée SSH en plus du HTTP.

5.2 Mise à jour du modèle LLM

# Sur le mini-PC (via SSH distant)
ollama pull mistral  # Télécharge la dernière version
pm2 restart agent-ia-[nom-client]

5.3 Mise à jour du script client

# Modifier le .env pour changer le comportement sans toucher au code
# Ex: changer les horaires, la zone, le nom de l'agent
pm2 restart agent-ia-[nom-client]

5.4 Monitoring

# Voir les logs en direct
pm2 logs agent-ia-[nom-client]

# Statut
pm2 status

ÉTAPE 6 — FORMATION CLIENT (incluse dans l'offre Sur devis)

Session de formation (2h en présentiel ou visio)

Module 1 — Comprendre l'agent IA (30 min) - Comment fonctionne l'agent (démonstration en direct) - Ce qu'il peut et ne peut pas faire - Lire les logs d'appels dans le dashboard ITM Agency

Module 2 — Personnalisation (45 min) - Modifier le script d'accueil (via formulaire simple) - Ajouter des cas particuliers (congés, promotions, nouveaux services) - Connecter le calendrier Google

Module 3 — En cas de problème (45 min) - Procédure de redémarrage (débrancher/rebrancher) - Contact SAV ITM Agency (SLA 24h ouvrées) - Vérifier que l'agent est actif (appel test)


COÛTS VARIABLES PAR CLIENT — VERSION HARDWARE

Poste Coût estimé
Numéro Twilio ~1€/mois
Appels Twilio (0,013$/min) ~5-15€ selon volume
Cloudflare Tunnel Gratuit
LLM local (Ollama) 0€ (tourne en local)
STT Whisper local 0€ (tourne en local)
TTS Piper local 0€ (tourne en local)
Total charges mensuelles ~6-16€/mois
Abonnement client (maintenance) 100-150€/mois
Matériel vendu 350-600€ one-shot
Formation vendue 300-500€ one-shot
Marge brute abonnement >85%

DIFFÉRENCES CLÉS VS VERSION CLOUD/VPS

Critère Cloud/VPS Hardware On-Premise
Données Serveur OVH Chez le client
LLM OpenAI GPT-4o-mini Mistral local
Latence réponse ~1-2 sec ~2-4 sec
Coût mensuel charges ~15-37€ ~6-16€
Revenus mensuels 149-249€ 100-150€
Revenus one-shot Frais install. 99€ Matériel + formation 650-1100€
Intervention sur site Non Oui (installation)
Argument RGPD Moyen Fort
Scalabilité ITM Haute Moyenne

CHECKLIST COMPLÈTE DE DÉPLOIEMENT HARDWARE

PRÉPARATION (chez ITM Agency)
□ Mini-PC commandé et reçu
□ Ubuntu Server 22.04 installé
□ Node.js, PM2, Ollama, Whisper, Piper installés
□ Modèle Mistral téléchargé (ollama pull mistral)
□ Voix Piper française téléchargée
□ Code agent configuré (.env rempli avec infos client)
□ PM2 configuré en démarrage automatique
□ Tunnel Cloudflare créé et nommé
□ DNS CNAME ajouté sur Cloudflare ITM Agency
□ Test complet effectué avant livraison

INSTALLATION SUR SITE
□ Mini-PC branché (RJ45 + alimentation)
□ URL tunnel répond correctement
□ Appel test validé (l'agent décroche et répond)
□ SMS notification reçu
□ Formation client réalisée
□ Fiche SAV remise au client
□ Fiche client créée dans Notion ITM Agency
□ Premier mois de maintenance démarré

ITM Agency — Guide Technique Hardware v1.0 — Mai 2026 Document interne — Non destiné à la diffusion client