Les CDR
Les statistiques d'appel (Call Detail Record ou CDR) sont l'ensemble de données recueillies concernant un appel (fixe, VoIP, mobile). Ces données sont recueillies par les opérateurs de téléphonies et peuvent être réutilisées pour l'optimisation du réseau Service Assurance (Performance Management), la facturation (billing) et la détection d'incident (fault management).
Mise en oeuvre des CDR sous Asterisk
# apt install unixodbc iodbc -y
# apt install mariadb-server -y
Le vrai module ODBC ne s’installe pas avec la commande apt-get install. Il y a toute une démarche à suivre pour avoir ce module. La voici :
Se rendre sur le site officiel d’Oracle en cliquant ici pour télécharger la version TAR du module selon l'architecture du serveur (64 ou 32-bits).
/image%2F3625927%2F20211227%2Fob_dba758_1.png)
NB: Tout d'abord créer un compte afin de pouvoir télécharger quoique se soit.
Après création du compte et authentification, nous pouvons enfin télécharger ce que nous voulons...
/image%2F3625927%2F20211227%2Fob_f6ef7a_2.png)
Après téléchargement :
/image%2F3625927%2F20211227%2Fob_6f498d_3.png)
Désarchiver le fichier et faire les actions suivantes :
# tar -xzf mysql-connector-odbc-8.0.27-linux-glibc2.12-x86-64bit.tar.gz
# cd mysql-connector-odbc-8.0.27-linux-glibc2.12-x86-64bit
# cp bin/* /usr/local/bin/
# cp -r lib/* /usr/local/lib/
# sudo chmod 777 /usr/local/lib/libmy*
# apt-get install libodbc1
# myodbc-installer -d -l
- Rendez-vous dans le dossier source de Asterisk et activer les modules concernés :
# make menuselect
/image%2F3625927%2F20211227%2Fob_077ae5_4.png)
Celui-là aussi
/image%2F3625927%2F20211227%2Fob_aef6e7_5.png)
- Créer la base de données censée accueillir les informations
/image%2F3625927%2F20211227%2Fob_d2988f_6.png)
Configurations
- Éditer le fichier /etc/odbc.ini et y mettre les informations suivantes :
[MySQL-asterisk]
Description = Connexion to MySQL
Driver = /usr/local/lib/libmyodbc8w.so
port = 3306
Setup = /usr/local/lib/libmyodbc8a.so
Soocket = /var/run/mysqld/mysql.sock
Server = localhost
User = bory
password = passer123
Database = asterisk_cdr
- Le fichier /etc/odbcinst.ini
[MySQL ODBC 8.0 Driver]
Driver=/usr/local/lib/libmyodbc8w.so
Setup=/usr/local/lib/libmyodbc8a.so
UsageCount=1
FileUsage=1
Threading=0
[MySQL OBBC 8.0]
Driver=/usr/local/lib/libmyodbc8a.so
UsageCount=1
FileUsage=1
Threading=0
- Vérification de la connexion ODBC
/image%2F3625927%2F20211227%2Fob_1ca90e_9.png)
Nous sommes sur le bon chemin!
- Le fichier /etc/asterisk/res_odbc.conf (à la fin du fichier)
[asterisk-mysql]
enable => yes
dsn => MySQL-asterisk
username => bory
password => passer123
pre-connect => yes
- Le fichier /etc/asterisk/cdr_odbc.conf (à la fin du fichier)
[global]
dsn=asterisk-mysql
loguniqid=yes
dispositionstring=yes
table=cdr
- Le fichier /etc/asterisk/cdr.conf (à la fin du fichier)
[odbc]
usegmtime=yes
loguniqueid=yes
loguserfield=yes
Les comptes utilisateurs et leur plan de numérotation étant déjà définis respectivement dans sip.conf et extensions.conf , Nous allons donc nous occupés de la table chargée enregistrer le trafic :
La table chargée accueillir le trafic aura le nom de cdr, sa création se fait à travers le schéma ci-dessous :
create table cdr (calldate datetime,clid varchar(80),src varchar(80),dst varchar(80),dcontext varchar(80),channel varchar(80),dstchannel varchar(80),lastapp varchar(80),lastdata varchar(80),duration int(11) NOT NULL default '0',billsec int(11) NOT NULL default '0',disposition varchar(45),amaflags int(11) NOT NULL default '0',accountcode varchar(20),uniqueid varchar(32),userfield varchar(255));
Un schéma que je préfère mettre dans un fichier (table.sql) et l'importer
/image%2F3625927%2F20211227%2Fob_84a7c4_14.png)
Voici d'ailleurs la description de la table
/image%2F3625927%2F20211227%2Fob_225bfd_15.png)
Place au test
Liste des numéros en ligne (666 et 667)
/image%2F3625927%2F20211227%2Fob_e96e0c_16.png)
Un appels entre les deux
Sur la console d'Asterisk
/image%2F3625927%2F20211227%2Fob_d9400f_17.png)
Dans la table cdr
/image%2F3625927%2F20211227%2Fob_5338b6_20.png)
Ce sont les informations de l'appel !
Puisqu'il y a beaucoup de champs, affichons donc l'essentiel pour voir clair
/image%2F3625927%2F20211228%2Fob_012d99_24.png)
Avec cette config, les détails de communication de chaque appel passé seront enregistrés dans cette base de données, qu'on pourra d'ailleurs exploiter à d'autres fins. C'est ça les CDR.
C'est joli d'avoir ces informations dans une base de données. Mais quand n'est-il de les afficher sur une interface indépendante ?
Nous pouvons le faire à travers une interface Web en utilisant du PHP, Mais je préfère passer par une interface python !
Amusons-nous à afficher les détails de communication avec le langage python, à travers sa bibliothèque Tkinter !
Le fichier contenant le script python s'appelle cdr.py. Nous avons utilisé python3, donc on exécute ce script avec cette version !
/image%2F3625927%2F20220121%2Fob_5df6a8_02.png)
Voici notre interface :
/image%2F3625927%2F20220121%2Fob_6c65af_03.png)
Quand on clique sur le bouton Afficher , voici le résultat :
/image%2F3625927%2F20220121%2Fob_4ebc60_04.png)
Si nous voulons voir de plus près un enregistrement, il suffit de cliquer sur ce dernier pour obtenir d'amples informations. Comme le montre le figure suivante :
/image%2F3625927%2F20220121%2Fob_1e3243_05.png)
Les informations de cet enregistrement apparaissent à gauche sur l'interface, comme le montre la figure !
Trop stylé n'est-ce pas ? 😉