Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

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

Publicité

Projet Systeme d'Enregistrement des Appels avec Asterisk Interface Web de Consultation et d'Ecoute des Enregistrements

 

1. INTRODUCTION

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.

1.1 Objectifs du projet
  • Configurer l'enregistrement automatique des appels dans Asterisk (entrants et sortants)
  • Stocker les metadonnees de chaque appel dans la base de donnees MySQL existante (svi_ia)
  • Developper une interface Web avec Flask pour consulter l'historique des appels
  • Permettre l'ecoute des enregistrements directement depuis le navigateur
  • Gerer la suppression des enregistrements depuis l'interface
1.2 Architecture 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

2. ETAPE 1 — Installation des dependances

2.1 Explication

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.

2.2 Commande a executer

commande: root@sakou:/etc/asterisk# pip3 install flask mysql-connector-python

 


2. ETAPE 1 — Installation des dependances

2.1 Explication

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.

2.2 Commande a executer

pip3 install flask mysql-connector-python

2.3 Verification

pip3 list | grep -E 'flask|mysql'

3. ETAPE 2 — Creation des dossiers du projet

3.1 Explication

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.

3.2 Commandes a executer

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

3.3 Structure obtenue

root@sakou:/etc/asterisk# ls -la /var/www/cdr/


4. ETAPE 3 — Creation de la table CDR dans MySQL

4.1 Explication

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.

4.2 Description des colonnes

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

4.3 Commande a executer

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)
);"

4.4 Verification

root@sakou:/etc/asterisk# mysql -u root -ppassword -D svi_ia -e "SHOW TABLES;

"La table cdr doit apparaitre dans la liste aux cotes des tables etudiants, notes_detail, emploi_du_temps et projets.


5. ETAPE 4 — Modification du Dialplan Asterisk

5.1 Explication

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.

 

5.2 Commande a executer

root@sakou:/etc/asterisk# vim extensions.conf

root@sakou:/etc/asterisk# asterisk -rx "dialplan reload"

5.3 Verification

root@sakou:/etc/asterisk# asterisk -rx "dialplan show from-internal"


6. ETAPE 5 — Script AGI save_cdr.py

6.1 Explication

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.

6.2 Commande a executer

root@sakou:/etc/asterisk# vim /var/lib/asterisk/agi-bin/save_cdr.py

root@sakou:/etc/asterisk# chmod +x /var/lib/asterisk/agi-bin/save_cdr.py


7. ETAPE 6 — Application Web Flask (app.py)

7.1 Explication

app.py est le serveur web Flask. Il expose trois routes HTTP qui correspondent aux trois actions disponibles dans l'interface :

  • / : affiche la liste complete de tous les appels tries par date decroissante
  • /ecouter/id : sert le fichier audio WAV pour lecture directe dans le navigateur
  • /supprimer/id : supprime le fichier audio sur le disque ET la ligne dans MySQL

Flask se connecte a la base svi_ia deja existante, ce qui illustre la continuite parfaite entre les deux projets.

7.2 Commande a executer

root@sakou:/etc/asterisk# vim  /var/www/cdr/app.py     


8. ETAPE 7 — Interface Web HTML (index.html)

8.1 Explication

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 :

  • Un en-tete avec le nom du projet
  • Des cartes statistiques : total appels, appels repondus, enregistrements
  • Un tableau avec date, source, destination, duree, lecteur audio et bouton suppression

Le lecteur audio HTML5 <audio controls> permet d'ecouter les enregistrements directement dans le navigateur sans telecharger le fichier.

8.2 Commande a executer

root@sakou:/etc/asterisk# vim  /var/www/cdr/templates/index.htm

 


9. ETAPE 8 — Lancement et Test

9.1 Lancement de Flask

 

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

9.3 Test d'un appel entre extensions

  1. Composer 1001 depuis l'extension 1000
  2. Decrocher sur 1001 et parler quelques secondes
  3. Raccrocher
  4. Verifier que le fichier WAV est cree dans /recordings
  5. Verifier que la ligne est inseree dans la table cdr

root@sakou:/etc/asterisk# ls -lh /var/lib/asterisk/recordings/

mysql -u root -ppassword -D svi_ia -e "SELECT * FROM cdr;"

 

9.4 Acces a l'interface web

http://192.168.1.7:5000

10. CONCLUSION

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.

10.1 Competences acquises

  • Configuration de MixMonitor dans le dialplan Asterisk pour l'enregistrement audio
  • Developpement d'un script AGI Python pour l'ecriture en base de donnees
  • Creation d'une application web Flask avec connexion MySQL
  • Utilisation du moteur de templates Jinja2 pour l'affichage dynamique
  • Gestion de fichiers audio WAV depuis une application web
  • Integration continue entre plusieurs composants d'un systeme VoIP

10.2 Perspectives d'amelioration

  • Ajouter une authentification a l'interface web (login/mot de passe)
  • Ajouter une fonction de recherche et filtrage par date ou extension
  • Envoyer automatiquement un email avec le fichier audio apres chaque appel
  • Integrer la transcription automatique des appels via le module STT deja en place

 

 

Publicité
Retour à l'accueil
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article