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é

SVI Intelligent avec Asterisk, Groq et Python — Guide complet

1. Introduction

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.


2. Prérequis

2.1 Connaissances techniques

Avant de réaliser ce projet, les connaissances suivantes sont nécessaires :

  • Bases en réseaux et télécommunications (VoIP, SIP, RTP)
  • Administration système Linux sur Ubuntu Server
  • Programmation Python 3.8+
  • Concepts API REST et JSON
  • Bases de données relationnelles avec MySQL
  • Notions en intelligence artificielle
2.2 Environnement requis
  • Un serveur Ubuntu (local, VM ou VPS)
  • Un accès internet stable pour les APIs Groq et Google TTS
  • Asterisk version 18 ou supérieure installé et configuré
  • Python 3.8+ avec pip
  • MySQL Server
  • Un softphone SIP comme Linphone ou Zoiper pour les tests

3. Objectif du projet

L'objectif principal est de mettre en place un système autonome capable de :

  1. Recevoir un appel vocal via le réseau SIP
  2. Enregistrer la voix de l'utilisateur
  3. Transcrire la voix en texte grâce à Groq Whisper (STT)
  4. Analyser la demande et interroger la base de données si nécessaire
  5. Générer une réponse intelligente via Groq LLaMA 3.1
  6. Restituer la réponse sous forme vocale via Google TTS

4. Concept du SVI Intelligent

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.

4.1 Flux de traitement d'un appel
4.2 Fonctionnalités de l'assistant vocal

L'assistant Vocal offre plusieurs fonctionnalités clés :

  • Consultation de la base de donees de facon vocal avec l'assistant vocaal
  • Explication complète de tout concept académique
  • Conversation multi-tours avec mémoire des échanges
  • Gestion des silences avec relances progressives
  • Déconnexion automatique après 5 minutes d'inactivité

5. Technologies utilisées

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

6. Étapes de mise en œuvre

6.1 Installation d'Asterisk

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


6.2 Configuration du Dialplan

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

On recharge le dialplan pour appliquer les modifications:

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

 

 


6.3 Installation du moteur TTS

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.

Ensuite, la commande ci-dessous installe un module Perl :

commande: sudo cpan install LWP::UserAgent

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

Une fois installé, rendez le script exécutable :

commande:root@sakou:/home/sakou# sudo chmod +x /var/lib/asterisk/agi-bin/googletts.agi


6.4 Mise en place de la base de données

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

Étape 2 — Créer et sélectionner la base

commande: mysql> CREATE DATABASE IF NOT EXISTS svi_ia;

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;

 

mysql> SELECT * FROM etudiants;

commande : mysql> SELECT * FROM emploi_du_temps;

commande : mysql> SELECT * FROM notes_detail;

commande : mysql> SELECT * FROM projets;

 

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

🔐 Création d’un utilisateur MySQL sécurisé

commande : 

mysql> CREATE USER 'asterisk_user'@'localhost' 

    -> IDENTIFIED BY 'Votre Mot de Passe';

 

📌 Attribution des droits

 commande : 

mysql> CREATE USER 'asterisk_user'@'localhost' 

    -> IDENTIFIED BY 'Votre Mot de Passe';

 

🔄 Application des privilèges

commande : 

mysql> CREATE USER 'asterisk_user'@'localhost' 

    -> IDENTIFIED BY 'Votre Mot de Passe';

 

 

6.5 Intégration de l'API Groq

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" :

Ensuite executer ses commandes pour l'installation:

commande: root@sakou:/etc/asterisk# pip install groq

pip install mysql-connector-python

pip install requests

On exporte ensuite la cle de l'API

commande: root@sakou:/etc/asterisk# export GROQ_API_KEY="votre cle"

Pour la rendre permanent au demarrage:

commande :  root@sakou:/etc/asterisk# echo 'export GROQ_API_KEY="votre cle"' >> ~/.bashrc

source ~/.bashrc

On verifie que Grok est installer:

commande: root@sakou:/etc/asterisk# pip show groq


6.6 Le script svi_ia.py — cœur du système

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.

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.

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.

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.

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.

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.

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.

Cette fonction permet au serveur vocal de :

  • comprendre les questions des étudiants
  • utiliser une IA pour générer des réponses intelligentes
  • respecter des règles strictes selon le type de demande

 

La boucle principale

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

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

 

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.

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.

 

 

 

Trouver le reste du code pour des scripts sur notre github: https://github.com/SakuraPa78/projet_svi_intelligent

 

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