Asterisk MySQL : Différence entre versions

De Wiki NCad
Aller à : navigation, rechercher
(Prérequis)
(Prérequis)
 
(38 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 +
{{ Asterisk }}
 +
 
= Prérequis =
 
= Prérequis =
  
Vous devez disposer d'une machine avec les logiciels suivants :
+
* Asterisk doit être compilé avec le support mysql.
* Asterisk 1.4.X / 1.6.X ''(configuration conseillée c.f. [[:Asterisk Installation]])'';
+
* Serveur web Apache (c.f. [[:Apache_Installation]] sauf pour Ubuntu/Debian);
+
* Application PHPMyAdmin installée et configurée (c.f. [[:PHPMyAdmin]] sauf pour Ubuntu/Debian).
+
  
= Installation =
+
= Création des tables =
 +
 
 +
* La table '''cdr''' contiendra les '''statistiques d'appels''' du serveur.
 +
 
 +
CREATE TABLE cdr (
 +
        calldate datetime NOT NULL default '0000-00-00 00:00:00',
 +
        clid varchar(80) NOT NULL default '',
 +
        src varchar(80) NOT NULL default '',
 +
        dst varchar(80) NOT NULL default '',
 +
        dcontext varchar(80) NOT NULL default '',
 +
        channel varchar(80) NOT NULL default '',
 +
        dstchannel varchar(80) NOT NULL default '',
 +
        lastapp varchar(80) NOT NULL default '',
 +
        lastdata varchar(80) NOT NULL default '',
 +
        duration int(11) NOT NULL default '0',
 +
        billsec int(11) NOT NULL default '0',
 +
        disposition varchar(45) NOT NULL default '',
 +
        amaflags int(11) NOT NULL default '0',
 +
        accountcode varchar(20) NOT NULL default '',
 +
        uniqueid varchar(32) NOT NULL default '',
 +
        userfield varchar(255) NOT NULL default ''
 +
);
 +
 
 +
* La table '''sipfriends''' contiendra les '''faisceaux SIP''' ainsi que les '''utilisateurs SIP'''.
 +
 
 +
CREATE TABLE `sipfriends` (
 +
      `id` int(11) NOT NULL AUTO_INCREMENT,
 +
      `name` varchar(10) NOT NULL,
 +
      `ipaddr` varchar(15) DEFAULT NULL,
 +
      `port` int(5) DEFAULT NULL,
 +
      `regseconds` int(11) DEFAULT NULL,
 +
      `defaultuser` varchar(10) DEFAULT NULL,
 +
      `fullcontact` varchar(35) DEFAULT NULL,
 +
      `regserver` varchar(20) DEFAULT NULL,
 +
      `useragent` varchar(20) DEFAULT NULL,
 +
      `lastms` int(11) DEFAULT NULL,
 +
      `host` varchar(40) DEFAULT NULL,
 +
      `type` enum('friend','user','peer') DEFAULT NULL,
 +
      `context` varchar(40) DEFAULT NULL,
 +
      `permit` varchar(40) DEFAULT NULL,
 +
      `deny` varchar(40) DEFAULT NULL,
 +
      `secret` varchar(40) DEFAULT NULL,
 +
      `md5secret` varchar(40) DEFAULT NULL,
 +
      `remotesecret` varchar(40) DEFAULT NULL,
 +
      `transport` enum('udp','tcp','udp,tcp','tcp,udp') DEFAULT NULL,
 +
      `dtmfmode` enum('rfc2833','info','shortinfo','inband','auto') DEFAULT NULL,
 +
      `directmedia` enum('yes','no','nonat','update') DEFAULT NULL,
 +
      `nat` enum('yes','no','never','route') DEFAULT NULL,
 +
      `callgroup` varchar(40) DEFAULT NULL,
 +
      `pickupgroup` varchar(40) DEFAULT NULL,
 +
      `language` varchar(40) DEFAULT NULL,
 +
      `allow` varchar(40) DEFAULT NULL,
 +
      `disallow` varchar(40) DEFAULT NULL,
 +
      `insecure` varchar(40) DEFAULT NULL,
 +
      `trustrpid` enum('yes','no') DEFAULT NULL,
 +
      `progressinband` enum('yes','no','never') DEFAULT NULL,
 +
      `promiscredir` enum('yes','no') DEFAULT NULL,
 +
      `useclientcode` enum('yes','no') DEFAULT NULL,
 +
      `accountcode` varchar(40) DEFAULT NULL,
 +
      `setvar` varchar(40) DEFAULT NULL,
 +
      `callerid` varchar(40) DEFAULT NULL,
 +
      `amaflags` varchar(40) DEFAULT NULL,
 +
      `callcounter` enum('yes','no') DEFAULT NULL,
 +
      `busylevel` int(11) DEFAULT NULL,
 +
      `allowoverlap` enum('yes','no') DEFAULT NULL,
 +
      `allowsubscribe` enum('yes','no') DEFAULT NULL,
 +
      `videosupport` enum('yes','no') DEFAULT NULL,
 +
      `maxcallbitrate` int(11) DEFAULT NULL,
 +
      `rfc2833compensate` enum('yes','no') DEFAULT NULL,
 +
      `mailbox` varchar(40) DEFAULT NULL,
 +
      `session-timers` enum('accept','refuse','originate') DEFAULT NULL,
 +
      `session-expires` int(11) DEFAULT NULL,
 +
      `session-minse` int(11) DEFAULT NULL,
 +
      `session-refresher` enum('uac','uas') DEFAULT NULL,
 +
      `t38pt_usertpsource` varchar(40) DEFAULT NULL,
 +
      `regexten` varchar(40) DEFAULT NULL,
 +
      `fromdomain` varchar(40) DEFAULT NULL,
 +
      `fromuser` varchar(40) DEFAULT NULL,
 +
      `qualify` varchar(40) DEFAULT NULL,
 +
      `defaultip` varchar(40) DEFAULT NULL,
 +
      `rtptimeout` int(11) DEFAULT NULL,
 +
      `rtpholdtimeout` int(11) DEFAULT NULL,
 +
      `sendrpid` enum('yes','no') DEFAULT NULL,
 +
      `outboundproxy` varchar(40) DEFAULT NULL,
 +
      `callbackextension` varchar(40) DEFAULT NULL,
 +
      `registertrying` enum('yes','no') DEFAULT NULL,
 +
      `timert1` int(11) DEFAULT NULL,
 +
      `timerb` int(11) DEFAULT NULL,
 +
      `qualifyfreq` int(11) DEFAULT NULL,
 +
      `constantssrc` enum('yes','no') DEFAULT NULL,
 +
      `contactpermit` varchar(40) DEFAULT NULL,
 +
      `contactdeny` varchar(40) DEFAULT NULL,
 +
      `usereqphone` enum('yes','no') DEFAULT NULL,
 +
      `textsupport` enum('yes','no') DEFAULT NULL,
 +
      `faxdetect` enum('yes','no') DEFAULT NULL,
 +
      `buggymwi` enum('yes','no') DEFAULT NULL,
 +
      `auth` varchar(40) DEFAULT NULL,
 +
      `fullname` varchar(40) DEFAULT NULL,
 +
      `trunkname` varchar(40) DEFAULT NULL,
 +
      `cid_number` varchar(40) DEFAULT NULL,
 +
      `callingpres` enum('allowed_not_screened','allowed_passed_screen','allowed_failed_screen','allowed','prohib_not_screened','prohib_passed_screen','prohib_failed_screen','prohib') DEFAULT NULL,
 +
      `mohinterpret` varchar(40) DEFAULT NULL,
 +
      `mohsuggest` varchar(40) DEFAULT NULL,
 +
      `parkinglot` varchar(40) DEFAULT NULL,
 +
      `hasvoicemail` enum('yes','no') DEFAULT NULL,
 +
      `subscribemwi` enum('yes','no') DEFAULT NULL,
 +
      `vmexten` varchar(40) DEFAULT NULL,
 +
      `autoframing` enum('yes','no') DEFAULT NULL,
 +
      `rtpkeepalive` int(11) DEFAULT NULL,
 +
      `call-limit` int(11) DEFAULT NULL,
 +
      `g726nonstandard` enum('yes','no') DEFAULT NULL,
 +
      `ignoresdpversion` enum('yes','no') DEFAULT NULL,
 +
      `allowtransfer` enum('yes','no') DEFAULT NULL,
 +
      `dynamic` enum('yes','no') DEFAULT NULL,
 +
      PRIMARY KEY (`id`),
 +
      UNIQUE KEY `name` (`name`),
 +
      KEY `ipaddr` (`ipaddr`,`port`),
 +
      KEY `host` (`host`,`port`)
 +
);
 +
 
 +
* La table '''voicemail_users''' contiendra les boîtes vocales des utilisateurs.
 +
 
 +
CREATE TABLE `voicemail_users` (
 +
  `uniqueid` int(11) NOT NULL auto_increment,
 +
  `customer_id` int(11) NOT NULL default '0',
 +
  `context` varchar(50) NOT NULL default '',
 +
  `mailbox` int(5) NOT NULL default '0',
 +
  `password` varchar(10) NOT NULL default '0',
 +
  `fullname` varchar(50) NOT NULL default '',
 +
  `email` varchar(50) NOT NULL default '',
 +
  `pager` varchar(50) NOT NULL default '',
 +
  `stamp` timestamp(14) NOT NULL,
 +
  PRIMARY KEY (`uniqueid`),
 +
  KEY `mailbox_context` (`mailbox`,`context`)
 +
);
 +
 
 +
= Configuration d'Asterisk =
 +
 
 +
== Fichier cdr_mysql.conf ==
 +
 
 +
* Ce fichier est spécifique au module de journalisation des appels ''('''C'''all '''D'''ata '''R'''ecord)''. Pour que le modules puisse fonctionner, il faut y renseigner les paramètres de connexion à la base de données MySQL :
 +
 
 +
[global]
 +
hostname=localhost
 +
dbname=asterisk
 +
table=nom_de_la_table
 +
password=motDePasse
 +
user=login
 +
port=3306
 +
sock=/var/run/mysqld/mysqld.sock
 +
userfield=1
 +
 
 +
== Fichier extconfig.conf ==
 +
 
 +
* Pour qu'Asterisk consulte la base de données MySQL, il faut activer la recherche via le fichier '''extconfig.conf'''. Les lignes suivantes seront dé-commentées et modifiées :
 +
 
 +
agents        => mysql,general,queue_agent_table
 +
sipusers      => mysql,general,sip
 +
sippeers      => mysql,general,sip
 +
voicemail    => mysql,general,users
 +
queues        => mysql,general,queue_table
 +
queue_members => mysql,general,queue_member_table
 +
 
 +
* Avec :
 +
** '''agents :''' désigne le nom du fichier de configuration;
 +
** '''mysql :''' le type de la base de données;
 +
** '''general :''' le contexte de définition des informations de connexion à la base;
 +
** '''queue_agent_table :''' le nom de la table renfermant les paramètres ainsi que les valeurs affectées pour chaque enregistrement.
 +
 
 +
== Fichier res_config_mysql.conf ==
 +
 
 +
* Il faudra indiquer à Asterisk les informations de connexion à la base de données MySQL dans le fichier '''res_config_mysql.conf'''.
 +
 
 +
[general]
 +
dbhost = localhost
 +
dbname = asterisk
 +
dbuser = login
 +
dbpass = motDePasse
 +
dbport = 3306
 +
dbsock = /var/run/mysqld/mysqld.sock
  
 
= Requêtes =
 
= Requêtes =
  
 
== Synthax ==
 
== Synthax ==
 +
 +
Les requêtes MySQL s'implémentent dans le DialPlan du fichier de configuration extensions.conf de la manière suivante :
 +
 +
exten => 1,1,[[Asterisk_Synthax#NoOp|NoOp(######## Requête MySQL ########)]]
 +
exten => 1,2,MYSQL(Connect connid ${DBHOST} ${DBUSER} ${DBPASS}
 +
exten => 1,3,MYSQL(Query resultid ${connid} <Requête SQL>)
 +
exten => 1,4,MYSQL(Fetch fetchid ${resultid} Resultat) <span style="color:darkgrey;font-style:italic">; le résultat de la requête est stocké dans la variable Resultat.</span>
 +
exten => 1,5,MYSQL(Disconnect ${connid})
  
 
== Récupérer des données SELECT ==
 
== Récupérer des données SELECT ==
 +
 +
En reprenant l'exemple ci-dessus :
 +
 +
exten => s,1,MYSQL(Connect connid <span style="color:purple">${DBHOST} ${DBUSER} ${DBPASS} ${DBNAME}</span>)
 +
exten => s,2,MYSQL(Query resultid <span style="color:purple">${connid}</span> <span style="color:darkblue">SELECT Value FROM myconf WHERE Param="AcceptAnon" AND Line="<span style="color:purple">${Line}</span>"</span>)
 +
exten => s,3,MYSQL(Fetch fetchid <span style="color:purple">${resultid}</span> AcceptAnon)
 +
exten => s,4,MYSQL(Disconnect <span style="color:purple">${connid}</span>)
 +
exten => s,5,NoOp(Les appels anonymes sont-ils autorisés ? <span style="color:purple">${Resultat}</span>)
  
 
== Manipuler des données INSERT/UPDATE/DELETE ==
 
== Manipuler des données INSERT/UPDATE/DELETE ==
Ligne 20 : Ligne 214 :
 
== CDR ''(Call Data Records)'' ==
 
== CDR ''(Call Data Records)'' ==
  
{{ Asterisk }}
+
[[Category:Asterisk]]

Version actuelle en date du 7 novembre 2015 à 18:25

.:[ Asterisk IPBX ]:.

Installation >> Utiliser un forfait SIP >> MySQL >> Boîte Vocale >> Synthax
Inter-Asterisk eXchange | MOH Musique d'Attente

Prérequis

  • Asterisk doit être compilé avec le support mysql.

Création des tables

  • La table cdr contiendra les statistiques d'appels du serveur.
CREATE TABLE cdr ( 
       calldate datetime NOT NULL default '0000-00-00 00:00:00', 
       clid varchar(80) NOT NULL default , 
       src varchar(80) NOT NULL default , 
       dst varchar(80) NOT NULL default , 
       dcontext varchar(80) NOT NULL default , 
       channel varchar(80) NOT NULL default , 
       dstchannel varchar(80) NOT NULL default , 
       lastapp varchar(80) NOT NULL default , 
       lastdata varchar(80) NOT NULL default , 
       duration int(11) NOT NULL default '0', 
       billsec int(11) NOT NULL default '0', 
       disposition varchar(45) NOT NULL default , 
       amaflags int(11) NOT NULL default '0', 
       accountcode varchar(20) NOT NULL default , 
       uniqueid varchar(32) NOT NULL default , 
       userfield varchar(255) NOT NULL default  
);
  • La table sipfriends contiendra les faisceaux SIP ainsi que les utilisateurs SIP.
CREATE TABLE `sipfriends` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `name` varchar(10) NOT NULL,
     `ipaddr` varchar(15) DEFAULT NULL,
     `port` int(5) DEFAULT NULL,
     `regseconds` int(11) DEFAULT NULL,
     `defaultuser` varchar(10) DEFAULT NULL,
     `fullcontact` varchar(35) DEFAULT NULL,
     `regserver` varchar(20) DEFAULT NULL,
     `useragent` varchar(20) DEFAULT NULL,
     `lastms` int(11) DEFAULT NULL,
     `host` varchar(40) DEFAULT NULL,
     `type` enum('friend','user','peer') DEFAULT NULL,
     `context` varchar(40) DEFAULT NULL,
     `permit` varchar(40) DEFAULT NULL,
     `deny` varchar(40) DEFAULT NULL,
     `secret` varchar(40) DEFAULT NULL,
     `md5secret` varchar(40) DEFAULT NULL,
     `remotesecret` varchar(40) DEFAULT NULL,
     `transport` enum('udp','tcp','udp,tcp','tcp,udp') DEFAULT NULL,
     `dtmfmode` enum('rfc2833','info','shortinfo','inband','auto') DEFAULT NULL,
     `directmedia` enum('yes','no','nonat','update') DEFAULT NULL,
     `nat` enum('yes','no','never','route') DEFAULT NULL,
     `callgroup` varchar(40) DEFAULT NULL,
     `pickupgroup` varchar(40) DEFAULT NULL,
     `language` varchar(40) DEFAULT NULL,
     `allow` varchar(40) DEFAULT NULL,
     `disallow` varchar(40) DEFAULT NULL,
     `insecure` varchar(40) DEFAULT NULL,
     `trustrpid` enum('yes','no') DEFAULT NULL,
     `progressinband` enum('yes','no','never') DEFAULT NULL,
     `promiscredir` enum('yes','no') DEFAULT NULL,
     `useclientcode` enum('yes','no') DEFAULT NULL,
     `accountcode` varchar(40) DEFAULT NULL,
     `setvar` varchar(40) DEFAULT NULL,
     `callerid` varchar(40) DEFAULT NULL,
     `amaflags` varchar(40) DEFAULT NULL,
     `callcounter` enum('yes','no') DEFAULT NULL,
     `busylevel` int(11) DEFAULT NULL,
     `allowoverlap` enum('yes','no') DEFAULT NULL,
     `allowsubscribe` enum('yes','no') DEFAULT NULL,
     `videosupport` enum('yes','no') DEFAULT NULL,
     `maxcallbitrate` int(11) DEFAULT NULL,
     `rfc2833compensate` enum('yes','no') DEFAULT NULL,
     `mailbox` varchar(40) DEFAULT NULL,
     `session-timers` enum('accept','refuse','originate') DEFAULT NULL,
     `session-expires` int(11) DEFAULT NULL,
     `session-minse` int(11) DEFAULT NULL,
     `session-refresher` enum('uac','uas') DEFAULT NULL,
     `t38pt_usertpsource` varchar(40) DEFAULT NULL,
     `regexten` varchar(40) DEFAULT NULL,
     `fromdomain` varchar(40) DEFAULT NULL,
     `fromuser` varchar(40) DEFAULT NULL,
     `qualify` varchar(40) DEFAULT NULL,
     `defaultip` varchar(40) DEFAULT NULL,
     `rtptimeout` int(11) DEFAULT NULL,
     `rtpholdtimeout` int(11) DEFAULT NULL,
     `sendrpid` enum('yes','no') DEFAULT NULL,
     `outboundproxy` varchar(40) DEFAULT NULL,
     `callbackextension` varchar(40) DEFAULT NULL,
     `registertrying` enum('yes','no') DEFAULT NULL,
     `timert1` int(11) DEFAULT NULL,
     `timerb` int(11) DEFAULT NULL,
     `qualifyfreq` int(11) DEFAULT NULL,
     `constantssrc` enum('yes','no') DEFAULT NULL,
     `contactpermit` varchar(40) DEFAULT NULL,
     `contactdeny` varchar(40) DEFAULT NULL,
     `usereqphone` enum('yes','no') DEFAULT NULL,
     `textsupport` enum('yes','no') DEFAULT NULL,
     `faxdetect` enum('yes','no') DEFAULT NULL,
     `buggymwi` enum('yes','no') DEFAULT NULL,
     `auth` varchar(40) DEFAULT NULL,
     `fullname` varchar(40) DEFAULT NULL,
     `trunkname` varchar(40) DEFAULT NULL,
     `cid_number` varchar(40) DEFAULT NULL,
     `callingpres` enum('allowed_not_screened','allowed_passed_screen','allowed_failed_screen','allowed','prohib_not_screened','prohib_passed_screen','prohib_failed_screen','prohib') DEFAULT NULL,
     `mohinterpret` varchar(40) DEFAULT NULL,
     `mohsuggest` varchar(40) DEFAULT NULL,
     `parkinglot` varchar(40) DEFAULT NULL,
     `hasvoicemail` enum('yes','no') DEFAULT NULL,
     `subscribemwi` enum('yes','no') DEFAULT NULL,
     `vmexten` varchar(40) DEFAULT NULL,
     `autoframing` enum('yes','no') DEFAULT NULL,
     `rtpkeepalive` int(11) DEFAULT NULL,
     `call-limit` int(11) DEFAULT NULL,
     `g726nonstandard` enum('yes','no') DEFAULT NULL,
     `ignoresdpversion` enum('yes','no') DEFAULT NULL,
     `allowtransfer` enum('yes','no') DEFAULT NULL,
     `dynamic` enum('yes','no') DEFAULT NULL,
     PRIMARY KEY (`id`),
     UNIQUE KEY `name` (`name`),
     KEY `ipaddr` (`ipaddr`,`port`),
     KEY `host` (`host`,`port`)
);
  • La table voicemail_users contiendra les boîtes vocales des utilisateurs.
CREATE TABLE `voicemail_users` (
 `uniqueid` int(11) NOT NULL auto_increment,
 `customer_id` int(11) NOT NULL default '0',
 `context` varchar(50) NOT NULL default ,
 `mailbox` int(5) NOT NULL default '0',
 `password` varchar(10) NOT NULL default '0',
 `fullname` varchar(50) NOT NULL default ,
 `email` varchar(50) NOT NULL default ,
 `pager` varchar(50) NOT NULL default ,
 `stamp` timestamp(14) NOT NULL,
 PRIMARY KEY (`uniqueid`),
 KEY `mailbox_context` (`mailbox`,`context`)
);

Configuration d'Asterisk

Fichier cdr_mysql.conf

  • Ce fichier est spécifique au module de journalisation des appels (Call Data Record). Pour que le modules puisse fonctionner, il faut y renseigner les paramètres de connexion à la base de données MySQL :
[global]
hostname=localhost
dbname=asterisk
table=nom_de_la_table
password=motDePasse
user=login
port=3306
sock=/var/run/mysqld/mysqld.sock
userfield=1

Fichier extconfig.conf

  • Pour qu'Asterisk consulte la base de données MySQL, il faut activer la recherche via le fichier extconfig.conf. Les lignes suivantes seront dé-commentées et modifiées :
agents        => mysql,general,queue_agent_table
sipusers      => mysql,general,sip
sippeers      => mysql,general,sip
voicemail     => mysql,general,users
queues        => mysql,general,queue_table
queue_members => mysql,general,queue_member_table
  • Avec :
    • agents : désigne le nom du fichier de configuration;
    • mysql : le type de la base de données;
    • general : le contexte de définition des informations de connexion à la base;
    • queue_agent_table : le nom de la table renfermant les paramètres ainsi que les valeurs affectées pour chaque enregistrement.

Fichier res_config_mysql.conf

  • Il faudra indiquer à Asterisk les informations de connexion à la base de données MySQL dans le fichier res_config_mysql.conf.
[general]
dbhost = localhost
dbname = asterisk
dbuser = login
dbpass = motDePasse
dbport = 3306
dbsock = /var/run/mysqld/mysqld.sock

Requêtes

Synthax

Les requêtes MySQL s'implémentent dans le DialPlan du fichier de configuration extensions.conf de la manière suivante :

exten => 1,1,NoOp(######## Requête MySQL ########)
exten => 1,2,MYSQL(Connect connid ${DBHOST} ${DBUSER} ${DBPASS}
exten => 1,3,MYSQL(Query resultid ${connid} <Requête SQL>)
exten => 1,4,MYSQL(Fetch fetchid ${resultid} Resultat) ; le résultat de la requête est stocké dans la variable Resultat.
exten => 1,5,MYSQL(Disconnect ${connid})

Récupérer des données SELECT

En reprenant l'exemple ci-dessus :

exten => s,1,MYSQL(Connect connid ${DBHOST} ${DBUSER} ${DBPASS} ${DBNAME})
exten => s,2,MYSQL(Query resultid ${connid} SELECT Value FROM myconf WHERE Param="AcceptAnon" AND Line="${Line}")
exten => s,3,MYSQL(Fetch fetchid ${resultid} AcceptAnon)
exten => s,4,MYSQL(Disconnect ${connid})
exten => s,5,NoOp(Les appels anonymes sont-ils autorisés ? ${Resultat})

Manipuler des données INSERT/UPDATE/DELETE

Fonctions

CDR (Call Data Records)