Étudiante en Master Sécurité des Systèmes d’Information, je partage sur ce blog mon parcours en cybersécurité à travers mes projets, travaux pratiques et retours d’expérience. J’y aborde le DevSecOps, la sécurité cloud, le SOC, la sécurité applicative, les réseaux, la gestion des risques et les bonnes pratiques pour renforcer la protection des systèmes d’information.
/image%2F7223967%2F20260424%2Fob_edb7cf_chatgpt-image-21-avr-2026-00-30-37.png)
Avec l'évolution rapide des technologies de communication et de l'intelligence artificielle, les services vocaux deviennent de plus en plus intelligents et accessibles.
Dans le cadre de ce projet, encadré par M. KACHALLAH ABAGANA MAHAMAT, nous avons conçu et développé un Serveur Vocal Interactif Intelligent (SVI IA) capable de comprendre des requêtes vocales et de fournir des réponses automatisées, pertinentes et dynamiques.
Ce système permet à un étudiant d'appeler un numéro (3000), de parler naturellement en français, et d'obtenir des informations précises sur ses notes, son emploi du temps ou n'importe quel concept de ses cours — sans aucune intervention humaine.
Ce projet démontre la convergence entre la téléphonie IP (Asterisk/PJSIP), le traitement du langage naturel (Groq Whisper + LLaMA 3.1) et les bases de données MySQL, constituant une architecture moderne, robuste et entièrement open-source.
Avant de réaliser ce projet, les connaissances suivantes sont nécessaires :
L'objectif principal est de mettre en place un système autonome capable de :
Le principe est simple : l'étudiant compose le numéro 3000 depuis son téléphone SIP. L'assistant vocal prend l'appel et engage une conversation naturelle en français. Le système n'impose aucun menu à touches — l'utilisateur parle librement.
/image%2F7223967%2F20260424%2Fob_53da31_chatgpt-image-24-avr-2026-15-12-21.png)
L'assistant Vocal offre plusieurs fonctionnalités clés :
| Technologie | Rôle |
|---|---|
| Asterisk 22 | Serveur téléphonique (PBX) |
| PJSIP | Protocole SIP pour la gestion des extensions |
| Python 3 | Script AGI principal (svi_ia.py) |
| Groq Whisper | Speech-to-Text (conversion voix → texte) |
| Groq LLaMA3 | Intelligence artificielle (génération des réponses) |
| googletts.agi | Text-to-Speech (conversion texte → voix) |
| MySQL | Base de données des étudiants |
La première étape consiste à installer Asterisk sur Ubuntu Server et à configurer le protocole PJSIP pour la gestion des comptes SIP étudiants.
Si cette configuration est déjà en place de votre côté, vous pouvez directement passer à l'étape de mise à jour. Au cas contraire vous trouverez ici les etapes d'installation de asterisk : https://aquila-networks.overblog.fr/2026/03/installation-d-asterisk-sous-ubuntu-server-24.html
Dans notre cas, l'installation avait déjà été effectuée lors d'un précédent TP. Nous procédons donc directement à la mise à jour du système.
root@sakou:/home/sakou# sudo apt update && sudo apt upgrade -y
/image%2F7223967%2F20260424%2Fob_10c6cb_1.png)
Le dialplan dans le fichier extensions.conf définit ce qui se passe quand un étudiant appelle le numéro 3000 : Asterisk répond, force la langue française, puis délègue le traitement au script Python via le protocole AGI.
On ouvre le fichier de configuration extensions.conf:
commande: root@sakou:/etc/asterisk# sudo vim /etc/asterisk/extensions.con
On ajoute ce contenus dans le from internal :
from internal
; --- SVI IA sur 3000 ---
exten => 3000,1,NoOp(=== SVI IA 3000 ===)
same => n,Answer()
same => n,Wait(1)
same => n,Set(RECFILE=${STRFTIME${{EPOCH}},%Y%m%d-%H%m%S}})-IA-${CALLERID(num)}.wav)
same => n,AGI(svi_ia.py)
same => n,Hangup()
/image%2F7223967%2F20260424%2Fob_a860c7_2.png)
On recharge le dialplan pour appliquer les modifications:
commande: root@sakou:/etc/asterisk# sudo asterisk -rx "dialplan reload"
/image%2F7223967%2F20260424%2Fob_b1ed94_3.png)
Le script googletts.agi permet à Asterisk de convertir n'importe quel texte en voix française naturelle et de le lire directement à l'appelant.
Cette installation avait déjà été réalisée lors d'un précédent TP. Si ce n'est pas encore fait de votre côté, exécutez les commades suivantes:
On installe les dependances: certaines dépendances sont nécessaires pour gérer l’audio et les communications avec des services externes.
La commande suivante permet d’installer les outils audio essentiels :
commandes: root@sakou:/etc/asterisk# sudo apt install -y sox libsox-fmt-mp3 mpg123
Ces outils permettent de lire, convertir et manipuler des fichiers audio (notamment en MP3), indispensables pour diffuser les réponses vocales aux utilisateurs.
/image%2F7223967%2F20260424%2Fob_f32de0_4.png)
Ensuite, la commande ci-dessous installe un module Perl :
commande: sudo cpan install LWP::UserAgent
/image%2F7223967%2F20260424%2Fob_0b4172_5.png)
Le module LWP::UserAgent permet d’effectuer des requêtes HTTP vers des API externes, facilitant ainsi la communication avec des services d’intelligence artificielle (comme la reconnaissance vocale ou la génération de réponses).Ca prends beaucoup de temps pour s'installer.
Téléchargement du script Text-to-Speech
Ce script, appelé googletts.agi, permet de convertir du texte en voix (Text-to-Speech).
commande:root@sakou:/home/sakou# sudo wget -O /var/lib/asterisk/agi-bin/googletts.agi \
https://raw.githubusercontent.com/zaf/asterisk-googletts/master/googletts.agi
/image%2F7223967%2F20260424%2Fob_41e256_6.png)
Une fois installé, rendez le script exécutable :
commande:root@sakou:/home/sakou# sudo chmod +x /var/lib/asterisk/agi-bin/googletts.agi
/image%2F7223967%2F20260424%2Fob_202dc1_8.png)
La base de données svi_ia du projet de SVI intelligent permet de stocker les informations des étudiants ainsi que leurs notes. Elle est utilisée par l'API pour fournir des réponses dynamiques et automatisées via le serveur Asterisk.
Étape 1 — Se connecter à MySQL
commande : root@sakou:/home/sakou# sudo mysql -u root -p
/image%2F7223967%2F20260424%2Fob_364b40_9.png)
Étape 2 — Créer et sélectionner la base
commande: mysql> CREATE DATABASE IF NOT EXISTS svi_ia;
/image%2F7223967%2F20260424%2Fob_dd4553_10.png)
Le message WARNING indique simplement que la base existait déjà. C'est normal si vous aviez déjà effectué cette étape.
Étape 3 — Créer les tables et insérer les données
Chez nous on n'avait deja creer la base de donnees;si c'est pas le cas chez vous creer d'abord la base de donnees et inserer vos donnees:
On verifie la tables de la base de donnees
Étape 4 — Vérifier les données
On verifie les donnees de la base:
commande : mysql> USE svi_ia;
commande: mysql> show tables;
/image%2F7223967%2F20260424%2Fob_f8fad2_14.png)
mysql> SELECT * FROM etudiants;
/image%2F7223967%2F20260424%2Fob_dc7c16_11.png)
commande : mysql> SELECT * FROM emploi_du_temps;
/image%2F7223967%2F20260424%2Fob_e35410_12.png)
commande : mysql> SELECT * FROM notes_detail;
/image%2F7223967%2F20260424%2Fob_702eea_13.png)
commande : mysql> SELECT * FROM projets;
/image%2F7223967%2F20260424%2Fob_3808a0_20.png)
Étape 5 — Créer un utilisateur MySQL pour Asterisk
Cette commande crée un utilisateur MySQL dédié à Asterisk avec un accès local sécurisé et un mot de passe. Elle lui accorde uniquement le droit de lecture sur la base svi_ia, puis applique les permissions.
Importance : elle permet de sécuriser la base de données en limitant l'accès d'Asterisk uniquement à la lecture, évitant toute modification ou suppression des données.
commande :
mysql> CREATE USER 'asterisk_user'@'localhost'
-> IDENTIFIED BY 'Votre Mot de Passe';
/image%2F7223967%2F20260424%2Fob_fec7cf_21.png)
commande :
mysql> CREATE USER 'asterisk_user'@'localhost'
-> IDENTIFIED BY 'Votre Mot de Passe';
/image%2F7223967%2F20260424%2Fob_089414_22.png)
commande :
mysql> CREATE USER 'asterisk_user'@'localhost'
-> IDENTIFIED BY 'Votre Mot de Passe';
/image%2F7223967%2F20260424%2Fob_c50c3b_23.png)
Groq fournit deux modèles : Whisper large-v3 pour la transcription vocale en français, et LLaMA 3.1-8b-instant pour la génération de réponses intelligentes. La clé API est obtenue gratuitement sur console.groq.com.
Cliquez sur "Create API Key" :
/image%2F7223967%2F20260424%2Fob_b4fb73_24.png)
Ensuite executer ses commandes pour l'installation:
commande: root@sakou:/etc/asterisk# pip install groq
pip install mysql-connector-python
pip install requests
/image%2F7223967%2F20260424%2Fob_19391e_25.png)
On exporte ensuite la cle de l'API
commande: root@sakou:/etc/asterisk# export GROQ_API_KEY="votre cle"
/image%2F7223967%2F20260424%2Fob_6ce0af_26.png)
Pour la rendre permanent au demarrage:
commande : root@sakou:/etc/asterisk# echo 'export GROQ_API_KEY="votre cle"' >> ~/.bashrc
source ~/.bashrc
/image%2F7223967%2F20260424%2Fob_f9edf8_27.png)
On verifie que Grok est installer:
commande: root@sakou:/etc/asterisk# pip show groq
/image%2F7223967%2F20260424%2Fob_053106_28.png)
Le script Python est le cerveau du projet. Il coordonne tous les composants en une boucle conversationnelle structurée.
On le crée dans le répertoire AGI d'Asterisk :
commande: root@sakou:/etc/asterisk# sudo vim /var/lib/asterisk/agi-bin/svi_ia.py
Couche 1 — AGI (Communication avec Asterisk)
Quand Asterisk lance le script, il envoie des informations via stdin (numéro de l'appelant, canal, langue...). Le script les lit et les stocke.
/image%2F7223967%2F20260424%2Fob_188780_1.png)
La fonction agi_send() permet ensuite d'envoyer des ordres à Asterisk et de recevoir ses réponses. C'est le pont entre Python et Asterisk.
/image%2F7223967%2F20260424%2Fob_5fb24c_2.png)
La boucle lit les infos envoyées par Asterisk (numéro appelant, canal...) et agi_send() envoie les ordres à Asterisk.
Couche 2 — TTS (Text-to-Speech)
Cette couche transforme n'importe quel texte en voix française. Comme googletts.agi a une limite de caractères par appel, la fonction _decouper_texte() découpe intelligemment le texte sur les points et virgules. L'étudiant entend une voix fluide et continue.
/image%2F7223967%2F20260424%2Fob_0c3929_3.png)
Elle nettoie le texte (supprime le markdown), puis le découpe intelligemment par phrases avant de l'envoyer à Google TTS. C'est pour ça que la limite de caractères ne pose pas de problème.
Couche 3 — STT (Speech-to-Text)
Le fichier audio enregistré par Asterisk est envoyé à Groq Whisper via l'API. Whisper retourne le texte exact prononcé par l'étudiant en français. C'est cette couche qui rend le système capable de comprendre l'utilisateur.
/image%2F7223967%2F20260424%2Fob_c17fc4_29.png)
Couche 4 — DB (Base de données)
Cette couche interroge directement la base MySQL svi_ia. Quand l'étudiant demande sa note, le système ne l'invente pas — il va la chercher en base avec le numéro d'appelant. Même logique pour l'emploi du temps.
/image%2F7223967%2F20260424%2Fob_dd558b_30.png)
Cette fonction permet au serveur vocal SVI IA de récupérer automatiquement la note d’un étudiant à partir de son numéro de téléphone, afin de lui répondre vocalement lors d’un appel.
/image%2F7223967%2F20260424%2Fob_f11e03_31.png)
Cette fonction permet au système vocal de récupérer dynamiquement l’emploi du temps des étudiants depuis la base de données MySQL et de l’utiliser dans les réponses du SVI IA.
Couche 5 — IA (Intelligence Artificielle)
La question de l'étudiant est envoyée au modèle LLaMA 3.1 de Groq avec tout le contexte : nom de l'étudiant, notes, et les 4 derniers échanges de la conversation. L'IA génère une réponse complète, pédagogique et personnalisée en français.
/image%2F7223967%2F20260424%2Fob_18a1a3_34.png)
Cette fonction permet au serveur vocal de :
La boucle principale
/image%2F7223967%2F20260424%2Fob_8be994_chatgpt-image-21-avr-2026-03-57-05.png)
6.7 Test du système
Une fois tous les composants en place, on redémarre Asterisk pour s'assurer que toutes les configurations sont bien chargées :
commande: root@sakou:/etc/asterisk# sudo systemctl restart asterisk.
On verifie qu'asterisk tourne normallement:
commande : root@sakou:/etc/asterisk# sudo asterisk -rvvvvvvvvvvvvvvvvvvvvvv
/image%2F7223967%2F20260424%2Fob_2cef0c_35.png)
On compose ensuite le numéro 3000 depuis le softphone SIP. L'assistant vocal décroche, se présente en français et engage la conversation. Pour valider le bon fonctionnement du système, nous avons posé 3 questions distinctes qui couvrent les principales fonctionnalités du SVI.
Test 1 — Consultation des notes
L'étudiant pose la question :
"Donne-moi ma note"
Le système identifie l'appelant via son numéro SIP, interroge la table etudiants et notes_detail de la base svi_ia, et retourne la note personnalisée de l'étudiant en temps réel.
Verifiions les logs en temps reel:
commande:root@sakou:/etc/asterisk# tail -f /tmp/svi_ia.log
/image%2F7223967%2F20260424%2Fob_8a1bd0_36.png)
Test 2 — Consultation de l'emploi du temps
L'étudiant pose la question :
"Donne-moi mon emploi du temps"
Le système interroge la table emploi_du_temps et retourne les cours du jour avec les horaires, les salles et les professeurs correspondants.
/image%2F7223967%2F20260424%2Fob_2510d5_38.png)
Test 3 — Question académique
L'étudiant pose la question :
"Explique-moi la sécurité réseau"
Cette fois le système ne va pas chercher en base — il envoie directement la question au modèle LLaMA 3.1 de Groq qui génère une explication complète et pédagogique en français, adaptée au niveau de l'étudiant.
/image%2F7223967%2F20260424%2Fob_87e1df_37.png)
/image%2F7223967%2F20260424%2Fob_dc76d2_39.png)
Trouver le reste du code pour des scripts sur notre github: https://github.com/SakuraPa78/projet_svi_intelligent