Les CDR

Publié le par BORY DIALLO

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

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

Après téléchargement :

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

 

Celui-là aussi

 

  • Créer la base de données censée accueillir les informations

 

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 

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 

Voici d'ailleurs la description de la table

 

Place au test

Liste des numéros en ligne (666 et 667)

Un appels entre les deux

Sur la console d'Asterisk

 

 

Dans la table cdr

Ce sont les informations de l'appel !

 

Puisqu'il y a beaucoup de champs, affichons donc l'essentiel pour voir clair

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 !

Voici notre interface :

 

Quand on clique sur le bouton Afficher , voici le résultat :

 

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 :

Les informations de cet enregistrement apparaissent à gauche sur l'interface, comme le montre la figure !

Trop stylé n'est-ce pas ? 😉

Publié dans Téléphonie

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
M
good Job Bory je veux le code source CDR.py
Répondre
M
Tout à fait, c'est trop stylé avec des choses intéressantes à découvrir. Courage le jeune génie
Répondre
B
Merci beaucoup MAKENDJI. C’est toi le génie 🥳
M
tres interessant Bory onne continuation frere
Répondre
B
Merci Moussa
K
Très intéressant très Bory. J’aime ce que tu es entrain de faire. <br /> Je te conseille de continuer sur cette même lancée et de l’afficher via une interface web et pourquoi pas mobile dans l’avenir.
Répondre
B
Merci bcp M. Kachallah. D’accord je vais y penser
C
Salut Bory. C'est un plaisir de parcourir ton blog car c'est une mine d'or. Tes articles me sauvent vraiment la vie. J'espère te rencontrer un jour 😇
Répondre
B
Salut Cassandra. C’est un plaisir pour moi d’aider les autres. Te rencontrer un jour, je l’espère aussi ✔️