É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_c8888a_chatgpt-image-24-avr-2026-21-01-20.png)
Ce projet s'inscrit dans la continuite du projet SVI Intelligent precedemment realise avec Asterisk et l'Intelligence Artificielle. Apres avoir mis en place un serveur vocal interactif permettant aux etudiants de consulter leurs notes et emplois du temps par la voix, nous enrichissons le systeme avec une fonctionnalite essentielle : l'enregistrement automatique de tous les appels et la mise a disposition d'une interface web pour les consulter et les ecouter.
Dans un environnement professionnel ou pedagogique, l'enregistrement des appels repond a plusieurs besoins concrets : tracer les interactions entre utilisateurs, garder un historique des consultations effectuees via le SVI IA, et permettre a un administrateur de verifier le bon fonctionnement du systeme.
| Composant | Role |
|---|---|
| Asterisk 22 | Serveur telephonique, gere les appels SIP |
| PJSIP | Protocole SIP pour les extensions 1000-1009 |
| MixMonitor | Enregistre les 2 cotes de l'appel |
| Python 3 / AGI | Script save_cdr.py qui sauvegarde dans MySQL |
| MySQL / svi_ia | Base de donnees existante, nouvelle table cdr |
| Flask | Framework web Python pour l'interface |
/image%2F7223967%2F20260424%2Fob_57f248_chatgpt-image-24-avr-2026-21-36-42.png)
Flask est le micro-framework web Python que nous allons utiliser pour creer l'interface de consultation des enregistrements. Il est leger, facile a utiliser et parfaitement adapte a ce type de projet. Le module mysql-connector-python permet a Flask de se connecter a notre base de donnees MySQL existante (svi_ia) pour lire et ecrire les informations des appels.
commande: root@sakou:/etc/asterisk# pip3 install flask mysql-connector-python
/image%2F7223967%2F20260425%2Fob_616740_40.png)
Flask est le micro-framework web Python que nous allons utiliser pour creer l'interface de consultation des enregistrements. Il est leger, facile a utiliser et parfaitement adapte a ce type de projet. Le module mysql-connector-python permet a Flask de se connecter a notre base de donnees MySQL existante (svi_ia) pour lire et ecrire les informations des appels.
pip3 install flask mysql-connector-python
/image%2F7223967%2F20260425%2Fob_3bd325_40.png)
pip3 list | grep -E 'flask|mysql'
/image%2F7223967%2F20260425%2Fob_5aab94_42.png)
/image%2F7223967%2F20260425%2Fob_b06b52_40.png)
Nous creeons une arborescence de dossiers claire pour notre application web. Flask utilise une convention de nommage : les fichiers HTML doivent etre dans un sous-dossier templates et les fichiers CSS/JS dans un sous-dossier static. Le dossier recordings existe deja depuis le projet SVI IA, nous nous assurons juste qu'Asterisk a les droits d'ecriture pour y sauvegarder les nouveaux enregistrements.
mkdir -p /var/www/cdr
mkdir -p /var/www/cdr/templates
mkdir -p /var/www/cdr/static
mkdir -p /var/lib/asterisk/recordings
chown -R asterisk:asterisk /var/lib/asterisk/recordings
/image%2F7223967%2F20260425%2Fob_447279_41.png)
root@sakou:/etc/asterisk# ls -la /var/www/cdr/
/image%2F7223967%2F20260425%2Fob_fdf1f6_42.png)
Nous ajoutons une nouvelle table cdr dans la base svi_ia qui existe deja depuis le projet precedent. Nous ne creeons pas une nouvelle base, nous enrichissons la base existante, ce qui illustre parfaitement la continuite des deux projets.
| Colonne | Description |
|---|---|
| id | Identifiant unique auto-incremente |
| calldate | Date et heure de l'appel (automatique) |
| src | Numero appelant — ex: 1000 |
| dst | Numero appele — ex: 1001 ou 3000 |
| duration | Duree totale de l'appel en secondes |
| billsec | Duree facturee apres decrochage |
| disposition | Statut : ANSWERED, NO ANSWER... |
| recording_file | Chemin complet du fichier audio .wav |
root@sakou:/etc/asterisk# mysql -u root -ppassword -D svi_ia -e "
CREATE TABLE IF NOT EXISTS cdr (
id INT AUTO_INCREMENT PRIMARY KEY,
calldate DATETIME DEFAULT NOW(),
src VARCHAR(20),
dst VARCHAR(20),
duration INT DEFAULT 0,
billsec INT DEFAULT 0,
disposition VARCHAR(45) DEFAULT 'ANSWERED',
recording_file VARCHAR(255)
);"
/image%2F7223967%2F20260425%2Fob_d83654_43.png)
root@sakou:/etc/asterisk# mysql -u root -ppassword -D svi_ia -e "SHOW TABLES;
/image%2F7223967%2F20260425%2Fob_50e5f6_44.png)
"La table cdr doit apparaitre dans la liste aux cotes des tables etudiants, notes_detail, emploi_du_temps et projets.
Le dialplan (extensions.conf) est le coeur de la configuration Asterisk. C'est lui qui definit ce qui se passe pour chaque appel. Nous ajoutons l'instruction MixMonitor a chaque extension pour demarrer l'enregistrement automatiquement.
MixMonitor est une application native d'Asterisk qui capture les deux cotes de la conversation (appelant ET appele) et les mixe dans un seul fichier audio. L'option b signifie que l'enregistrement demarre des que le canal est ponte. Le nom du fichier audio est genere dynamiquement avec la date et l'heure pour eviter les doublons.
root@sakou:/etc/asterisk# vim extensions.conf
/image%2F7223967%2F20260425%2Fob_b1c138_45.png)
root@sakou:/etc/asterisk# asterisk -rx "dialplan reload"
/image%2F7223967%2F20260425%2Fob_0df12e_46.png)
root@sakou:/etc/asterisk# asterisk -rx "dialplan show from-internal"
/image%2F7223967%2F20260425%2Fob_c34615_47.png)
Le script save_cdr.py est un script AGI Python appele automatiquement par Asterisk a la fin de chaque appel via le dialplan. Son role est d'inserer les informations de l'appel dans la table cdr de MySQL. Il recoit en arguments : le numero appelant, le numero appele, la duree, la duree facturee et le chemin du fichier audio.
root@sakou:/etc/asterisk# vim /var/lib/asterisk/agi-bin/save_cdr.py
/image%2F7223967%2F20260425%2Fob_eb9968_48.png)
root@sakou:/etc/asterisk# chmod +x /var/lib/asterisk/agi-bin/save_cdr.py
app.py est le serveur web Flask. Il expose trois routes HTTP qui correspondent aux trois actions disponibles dans l'interface :
Flask se connecte a la base svi_ia deja existante, ce qui illustre la continuite parfaite entre les deux projets.
root@sakou:/etc/asterisk# vim /var/www/cdr/app.py
/image%2F7223967%2F20260425%2Fob_5e28b8_49.png)
index.html est la page web affichee dans le navigateur. Elle utilise Jinja2 (moteur de templates de Flask) pour afficher dynamiquement les donnees provenant de MySQL. La page comprend trois sections :
Le lecteur audio HTML5 <audio controls> permet d'ecouter les enregistrements directement dans le navigateur sans telecharger le fichier.
root@sakou:/etc/asterisk# vim /var/www/cdr/templates/index.htm
/image%2F7223967%2F20260425%2Fob_93fc52_50.png)
root@sakou:/etc/asterisk# cd /var/www/cdr && python3 app.py > /tmp/flask_cdr.log 2>&1 &
sleep 2 && curl -s http://localhost:5000 | grep ESMT
[1] 1673
9.2 Verification que Flask tourne
root@sakou:/etc/asterisk# ps aux | grep app.py
cat /tmp/flask_cdr.log
/image%2F7223967%2F20260425%2Fob_83be4f_51.png)
root@sakou:/etc/asterisk# ls -lh /var/lib/asterisk/recordings/
mysql -u root -ppassword -D svi_ia -e "SELECT * FROM cdr;"
/image%2F7223967%2F20260425%2Fob_42ae41_52.png)
http://192.168.1.7:5000
/image%2F7223967%2F20260425%2Fob_220b83_53.png)
Ce mini-projet a permis de mettre en place un systeme complet d'enregistrement et de consultation des appels telephoniques en s'appuyant sur l'infrastructure deja deployee lors du projet SVI Intelligent. Cette continuite demontre l'importance d'une architecture bien pensee des le depart.
En ajoutant MixMonitor dans le dialplan Asterisk, tous les appels sont desormais enregistres automatiquement, qu'il s'agisse d'appels entre extensions (1000-1009), d'appels vers le SVI classique (5081) ou d'interactions avec le SVI Intelligent (3000). Chaque enregistrement est sauvegarde sous forme de fichier audio WAV et ses metadonnees sont stockees dans la base de donnees MySQL.
L'interface web developpee avec Flask offre une visualisation claire de l'historique des appels, avec la possibilite d'ecouter chaque enregistrement directement depuis le navigateur grace au lecteur audio HTML5.
/image%2F7223967%2F20260425%2Fob_629719_54.png)