Table des matières
Introduction
Tout d’abord nous allons supposer que les serveurs Asterisk et MySQL sont parfaitement installés et configurés (et sécurisés 🙂 ). Ce n’est pas l’objet de ce guide (Howto).
Installation d’ODBC
Nous allons commencer par installer les drivers ODBC nécessaires. Installer les paquets nécessaires pour le bon fonctionnement de ODBC et MySQL :
apt-get install unixodbc libmyodbc unixodbc iodbc
Maintenant, nous allons configurer odbc afin de se connecter à notre serveur MySQL.
Paramétrage de ODBC
Editer le fichier suivant /etc/odbcinst.ini, et copier les éléments suivants :
[MySQL] Description = MySQL ODBC Driver Driver = /usr/lib/odbc/libmyodbc.so Setup = /usr/lib/odbc/libodbcmyS.so CPTimeout = 0 CPReuse = 0
Maintenant, il faut éditer /etc/odbc.ini et ajouter le code suivant :
[MySQL-asterisk] Description = Connection to MySQL Driver = MySQL Socket = /var/run/mysqld/mysqld.sock Server = localhost User = YourUsername Password = YourPassword Database = YourDatabase Option = 3
N’oublier pas d’adapter le User, Password et Database selon vos éléments, sinon vous obtiendrez une belle erreur !.
Création de la base de données CDR
Connectez vous à votre serveur MySQL et entrez le code suivant (attention aux espaces qui peuvent causer des erreurs)
CREATE TABLE cdr(calldate DATETIME NOT NULL,clid varchar(80) NOT NULL DEFAULT'aDefaultValue',src varchar(80) NOT NULL DEFAULT 'aDefaultValue',dstVARCHAR(80) NOT NULL DEFAULT 'aDefaultValue',dcontext VARCHAR(80) NOT NULLDEFAULT 'aDefaultValue',channel VARCHAR(80) NOT NULL DEFAULT 'aDefaultValue',dstchannel VARCHAR(80) NOT NULL DEFAULT'aDefaultValue',lastapp VARCHAR(80) NOT NULL DEFAULT 'aDefaultValue',lastdataVARCHAR(80) NOT NULL DEFAULT 'aDefaultValue',duration int(11) NOT NULLDEFAULT '0',billsec int(11) NOT NULL DEFAULT '0',disposition VARCHAR(45) NOTNULL DEFAULT 'aDefaultValue',amaflags int(11) NOT NULL DEFAULT'0',accountcode VARCHAR(20) NOT NULL DEFAULT 'aDefaultValue',uniqueidVARCHAR(32) NOT NULL DEFAULT 'aDefaultValue',userfield VARCHAR(255) NOT NULLDEFAULT 'aDefaultValue'); GRANT ALL PRIVILEGES ON YourDatabase.* TO YourUsername@localhost IDENTIFIED BY 'YourPassword'; FLUSH PRIVILEGES;
Il faut tester le bon fonctionnement de notre connecteur ODBC avant d’aller plus loin. Entrez cette commande dans votre terminal :
isql -v MySQL-asterisk
Si tout fonctionne correctement, vous êtes connecté, sinon vous devriez voir un gentil message d’erreur 🙁 .
Paramétrage d’asterisk
Configuration d’ODBC
Nous allons commencer par paramétrer les fichiers de configuration d’Asterisk afin qu’il puisse utiliser ODBC afin de se connecter au serveur MySQL. Pour cela, nous allons éditer le fichier /etc/asterisk/res_odbc.conf et y ajouter :
[mysql] enabled => yes dsn => MySQL-asterisk username => YourUsername password => YourPassword pre-connect => yes
puis, éditer le fichier /etc/asterisk/cdr_odbc.conf, et remplacer les lignes par celles-ci :
[global] dsn=MySQL-asterisk ;username=asterisk ;password=asterisk loguniqueid=yes dispositionstring=yes table=cdr ;"cdr" is default table name usegmtime=no
Configuration de cdr.conf
Pour cela, nous allons éditer le fichier /etc/asterisk/cdr.conf et activer l’enregistrement des CDR dans une base de données via ODBC. Pour cela modifier au début du fichier :
enabled = yes
puis ajouter à la fin du fichier les lignes suivantes :
[odbc] usegmtime=yes loguniqueid=yes loguserfiled=yes
Et maintenant redémarrer votre serveur Asterisk, connectez vous à la console et vérifier que le module res_odbc est bien chargé (reload res_odbc). faites de même avec le module cdr_odbc.
Puis faites un appel afin de vérifier que son CDR est bien dans la base de données.
Conclusion
Après avoir suivi attentivement ce guide, vous avez maintenant une installation Asterisk où vous pouvez enregistrer vos CDR via ODBC dans une base de données MySQL locale ou distante. Vous pouvez ainsi par exemple stocker les CDRs de vos serveurs Asterisk dans une base de données centralisées afin d’exploiter des données riches avec une application comme CDR-STATS, afin d’analyser vos appels et extraire de jolies stats pour les chefs.
ODBC testé sous Elastix 2.3 et 2.4 donc sous Centos et ça marche nickel, juste un petit correctif à apporter, dans [global] dans ton exemple tu as mis dsn=MySQL-asterisk dans res_odbc.conf et dans cdr_odbc.conf ce qui fait redondance, il faut plutôt mettre dsn=mysql dans [global]
[global]
dsn=mysql et non "MySQL-asterisk"
J’aurais du lire ce commentaire il y a au moins 2 heures…
J’ai finis par trouver – à coup de Google, j’ai finis sur la liste de diffusion qui contient ce même conseil. Je reviens ici pour l’ajouter en commentaire, pour me rendre compte qu’il était déjà ici.
^__^’
Note : le lien vers la liste de diffusion pour les curieux : http://thr3ads.net/asterisk-users/2012/06/1941342-Asterisk-1.8.13.0-problem-with-cdr-logging-mysql-odbc
@fabien Quelle version de Centos as-tu testé ?
Hello Mathias,
J'ai testé la version Centos sur laquelle est installé Elastix 2.3 c'est à dire Centos 5.7
@+
Fabien
Un grand merci pour cet article.
En revanche, j’ai eu des problèmes au moment de copier le script SQL. Quand je copie/colle dans un éditeur de texte, la syntaxe n’est pas bonne, j’ai eu des problèmes avec des caractères ESPACE qui disparaissaient. Je copie ici le texte sans les espaces, ça servira peut être:
CREATE TABLE cdr(calldate DATETIME NOT NULL, clid varchar(80) NOT NULL DEFAULT ‘aDefaultValue’, src varchar(80)
NOT NULL DEFAULT ‘aDefaultValue’,
dst VARCHAR(80) NOT NULL DEFAULT ‘aDefaultValue’,
dcontext VARCHAR(80) NOT NULL DEFAULT ‘aDefaultValue’,
channel VARCHAR(80) NOT NULL DEFAULT ‘aDefaultValue’,
dstchannel VARCHAR(80) NOT NULL DEFAULT ‘aDefaultValue’,
lastapp VARCHAR(80) NOT NULL DEFAULT ‘aDefaultValue’,
lastdata VARCHAR(80) NOT NULL DEFAULT ‘aDefaultValue’,
duration int(11) NOT NULL DEFAULT ‘0’,
billsec int(11) NOT NULL DEFAULT ‘0’,
disposition VARCHAR(45) NOT NULL DEFAULT ‘aDefaultValue’,
amaflags int(11) NOT NULL DEFAULT ‘0’,
accountcode VARCHAR(20) NOT NULL DEFAULT ‘aDefaultValue’,
uniqueid VARCHAR(32) NOT NULL DEFAULT ‘aDefaultValue’,
userfield VARCHAR(255) NOT NULL DEFAULT ‘aDefaultValue’);
GRANT ALL PRIVILEGES ON cdr.* TO root@localhost IDENTIFIED BY ‘password’;
FLUSH PRIVILEGES;