informatique:telephonie:asterisk

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
informatique:telephonie:asterisk [2013/10/17 15:18] – [Patch pour faire fonctionner les LED BLF] bn8informatique:telephonie:asterisk [2021/06/14 15:42] (Version actuelle) – [Convertir un fichier MP3 en GSM] bn8
Ligne 5: Ligne 5:
 **Exemple : ** **Exemple : **
  
-<code>rasterisk -x "file convert /tmp/file_in.mp3 /tmp/file_out.gsm"</code>+<code bash>rasterisk -x "file convert /tmp/file_in.mp3 /tmp/file_out.gsm"</code>
  
 +**Ou via la commande //sox// :**
 +
 +<code bash>
 +FILE=my-file
 +sox $FILE.wav -r 8000 -c1 $FILE.gsm lowpass 4000 compand 0.02,0.05 -60,-60,-30,-10,-20,-8,-5,-8,-2,-8 -8 -7 0.05</code>
 +
 +<note tip>Pour que sox supporte le format **MP3** en entrée, installé le paquet Debian //libsox-fmt-mp3//. À défaut, convertissez au préalable les fichiers au format WAV par exemple.</note>
 +
 +===== Générer un message (PicoTTS & Sox) =====
 +
 +  * Installation des paquets nécessaires : <code bash>apt install libttspico-utils sox</code>
 +  * Génération du fichier WAV avec PicoTTS : <code bash>pico2wave -l fr-FR -w /tmp/message.wav "[le texte de votre message]"</code>
 +  * Conversion du fichier WAV en un fichier compatible avec Asterisk : <code bash>sox /tmp/message.wav -q -r 32000 -t raw /tmp/message.sln32</code>
  
 ===== Téléphones Grandstream ===== ===== Téléphones Grandstream =====
Ligne 25: Ligne 38:
  
 Source : http://forums.digium.com/viewtopic.php?f=1&t=78245&start=0 Source : http://forums.digium.com/viewtopic.php?f=1&t=78245&start=0
 +Repos de paquets Debian : http://debian.zionetrix.net/#asterisk
  
 Pour l'appliquer proprement : Pour l'appliquer proprement :
Ligne 44: Ligne 58:
 Free accapare le port UDP 5004 (RTP) pour les freebox non-dégroupé (potentiellement les ports 5006 et 5008 également). Du coup il est impératif de modifier le port d'écoute RTP local du téléphone en 5010 par exemple. Free accapare le port UDP 5004 (RTP) pour les freebox non-dégroupé (potentiellement les ports 5006 et 5008 également). Du coup il est impératif de modifier le port d'écoute RTP local du téléphone en 5010 par exemple.
  
 +===== Mise en place du fax2mail =====
 +
 +==== Au niveau d'asterisk ====
 +
 +On commence par mettre en place un compte //IAX// qui sera utilisé par //iaxmodem// pour se connecter à Asterisk. Pour cela on ajoute dans /etc/asterisk/iax.conf : <code>[fax1]
 +type=friend
 +secret=mypassword
 +port=4570
 +host=dynamic
 +context=internal
 +disallow=all
 +allow=ulaw
 +requirecalltoken=no
 +qualify=yes</code>
 +
 +On route ensuite dans le fichier /etc/asterisk/extentions.conf, les appels entrant sur un numéro vers le FAX : <code>[incoming]
 +
 +exten => 0102030405,1,Goto(fax-in,fax1)
 +
 +[fax-in]
 +
 +exten => fax1,1,Dial(IAX2/fax1)
 +exten => fax1,n,Hangup()</code>
 +
 +==== Mise en place d'iaxmodem ====
 +
 +On l'installe à partir du paquet Debian : <code>apt-get install iaxmodem</code>
 +
 +On créé ensuite une instance pour notre fax en créant un fichier /etc/iaxmodem/ttyIAX0 : <code>device /dev/ttyIAX0
 +owner uucp:uucp
 +mode 660
 +port 4570
 +refresh 60
 +server 127.0.0.1
 +peername fax1
 +secret mypassword
 +cidname My Company
 +cidnumber 0102030405
 +codec ulaw</code>
 +
 +On lance le service : <code>/etc/init.d/iaxmodem start</code>
 +
 +A partir de la, un //iax2 show peers// dans la console d'asterisk devrait vous monter qu'iaxmodem est bien connecté.
 +
 +==== Mise en place d'Hylafax ====
 +
 +On installe le serveur hylafax :
 +<code>apt-get install hylafax-server</code>
 +
 +On met en place la configuration global dans le fichier ///etc/hylafax/config// :
 +<code>#ContCoverPage:         "etc/cover.templ"
 +#DestControls:          "etc/destctrls"
 +#DialStringRules:       "etc/dialrules"
 +#QualifyCID:            "etc/cid"
 +#QualifyTSI:            "etc/tsi"
 +ServerTracing:          1
 +InternationalPrefix:    00
 +
 +#
 +## AvantFAX
 +#
 +NotifyCmd:      bin/notify.php</code>
 +
 +On met ensuite en place la configuration du modem dans le fichier ///etc/hylafax/config.ttyIAX0// :
 +<code>
 +CountryCode:            33
 +AreaCode:               1
 +FAXNumber:              +33.1.02.03.04.05
 +LongDistancePrefix:     0
 +InternationalPrefix:    00
 +DialStringRules:        etc/dialrules
 +ServerTracing:          1
 +SessionTracing:         11
 +RecvFileMode:           0600
 +LogFileMode:            0600
 +DeviceMode:             0600
 +RingsBeforeAnswer:      1
 +SpeakerVolume:          off
 +GettyArgs:              "-h %l dx_%s"
 +LocalIdentifier:        "My Company"
 +TagLineFont:            etc/lutRS18.pcf
 +TagLineFormat:          "%%l|%c|Page %%P sur %%T"
 +MaxRecvPages:           200
 +#
 +#
 +# Modem-related stuff: should reflect modem command interface
 +# and hardware connection/cabling (e.g. flow control).
 +#
 +ModemType:              Class1          # use this to supply a hint
 +
 +#
 +# Enabling this will use the hfaxd-protocol to set Caller*ID
 +#
 +#ModemSetOriginCmd:     AT+VSID="%s","%d"
 +
 +#
 +# If "glare" during initialization becomes a problem then take
 +# the modem off-hook during initialization, and then place it
 +# back on-hook when done.
 +#
 +#ModemResetCmds:        "ATH1\nAT+VCID=1"       # enables CallID display
 +#ModemReadyCmds:        ATH0
 +
 +Class1AdaptRecvCmd:     AT+FAR=1
 +Class1TMConnectDelay:   400             # counteract quick CONNECT response
 +
 +#
 +# If you have trouble with V.17 receiving or sending,
 +# you may want to enable one of these, respectively.
 +#
 +#Class1RMQueryCmd:      "!24,48,72,96"  # enable this to disable V.17 receiving
 +#Class1TMQueryCmd:      "!24,48,72,96"  # enable this to disable V.17 sending
 +
 +#
 +# You'll likely want Caller*ID display (also displays DID) enabled.
 +#
 +ModemResetCmds:         AT+VCID=1       # enables CallID display
 +
 +#
 +# The pty does not support changing parity.
 +#
 +PagerTTYParity:         none
 +
 +#
 +# If you are "missing" Caller*ID data on some calls (but not all)
 +# and if you do not have adequate glare protection you may want to
 +# not answer based on RINGs, but rather enable the CallIDAnswerLength
 +# for NDID, disable AT+VCID=1 and do this:
 +#
 +#RingsBeforeAnswer: 0
 +#ModemRingResponse: AT+VRID=1
 +
 +# Uncomment DATE and TIME if you really want them, but you probably don't.
 +#CallIDPattern:          "DATE="
 +#CallIDPattern:          "TIME="
 +CallIDPattern:          "NMBR="
 +CallIDPattern:          "NAME="
 +CallIDPattern:          "ANID="
 +#CallIDPattern:          "USER="        # username provided by call
 +#CallIDPattern:          "PASS="        # password provided by call
 +#CallIDPattern:          "CDID="        # DID context in call
 +CallIDPattern:          "NDID="
 +#CallIDAnswerLength:    4
 +
 +#
 +## AvantFAX
 +#
 +FaxRcvdCmd:     /var/spool/hylafax/bin/faxrcvd.php
 +DynamicConfig:  /var/spool/hylafax/bin/dynconf.php
 +UseJobTSI:      true</code>
 +
 +On redémarre le serveur Hylafax :
 +<code>service restart hylafax</code>
 +
 +==== Mise en place d'Avantfax ====
 +
 +On installe les dépendances :
 +<code>apt-get install libapache2-mod-php5 php5-cli imagemagick netpbm sudo php-mail php-mail-mime php-file php-db php5-mysql psutils wdiff rsync postfix php-net-smtp php-mdb2 php-mdb2-driver-mysql html2ps</code>
 +
 +On commence par préparer l'arborescence d’installation :
 +<code>mkdir -p /var/www/empty /var/www/fax/upstream</code>
 +
 +Télécharger ensuite l'archive tar.gz du projet (je travaille ici avec la version 3.3.3) dans le dossier ///var/www/fax/upstream//. On extrait ensuite le contenu de l'archive dans le dossier ///var/www/fax/avantfax-3.3.3// et on met en place le lien symbolique de la racine web :
 +<code>cd /var/www/fax/
 +ln -s avantfax-3.3.3/avantfax public_html</code>
 +
 +On peut mettre en place ensuite le repos Apache dans le fichier ///etc/apache2/sites-available/fax// :
 +<code>
 +<VirtualHost *:80>
 +        ServerName fax.mycompany.com
 +
 +        DocumentRoot /var/www/empty
 +
 +        RedirectMatch ^(.*)$ https://fax.mycompany.com$1
 +
 +        ErrorLog /var/log/apache2/fax.mycompany.com.error.log
 +        CustomLog /var/log/apache2/fax.mycompany.com.access.log combined
 +</VirtualHost>
 +
 +<VirtualHost *:443>
 +        ServerName fax.mycompany.com
 +        ServerAlias fax
 +
 +        DocumentRoot /var/www/fax/public_html
 +
 +        SSLEngine On
 +
 +        ErrorLog /var/log/apache2/fax.mycompany.com.error.log
 +        CustomLog /var/log/apache2/fax.mycompany.com.access.log combined
 +</VirtualHost></code>
 +
 +<note important>Je part ici du principe que la configuration SSL d'Apache est en place. Vous pouvez suivre [[informatique:securite:utilisation_d_un_certificat_ssl_par_apache|cette doc]] pour la mettre en place.</note>
 +
 +On active ensuite ce VirtualHost :
 +<code>a2ensite fax
 +service apache2 reload</code>
 +
 +Réglons maintenant les privilèges des dossiers/fichiers d'avantfax :
 +<code>cd /var/www/fax/avantfax-3.3.3/
 +chmod 0770 avantfax/includes/templates/admin_theme/templates_c/ avantfax/includes/templates/admin_theme/cache/  avantfax/includes/templates/main_theme/templates_c/ avantfax/includes/templates/main_theme/cache/ avantfax/tmp avantfax/faxes
 +chmod 0755 avantfax/includes/faxcover.php avantfax/includes/faxrcvd.php avantfax/includes/notify.php avantfax/tools/update_contacts.php avantfax/tools/faxcover.php avantfax/includes/avantfaxcron.php avantfax/includes/dynconf.php
 +chown -R www-data:www-data avantfax/
 +chown -R www-data:uucp avantfax/tmp avantfax/faxes</code>
 +
 +On met en place la base de données MySQL :
 +<code>
 +mysqladmin --default-character-set=utf8 --user='avantfax' --password='M1DBP@ss' create avantfax
 +mysql --user='avantfax' --password='M1DBP@ss' avantfax < create_tables.sql
 +</code>
 +
 +On ajoute le modem dans la base de données :
 +<code>echo 'INSERT INTO Modems (device,alias,contact) VALUES ('ttyIAX0','My Company','fax@mycompany.com');'|mysql --user='avantfax' --password='M1DBP@ss' avantfax</code>
 +
 +On met en place les scripts utilisés par le serveur Hylafax :
 +<code>
 +ln -s /var/www/fax/public_html/includes/faxrcvd.php /var/spool/hylafax/bin/faxrcvd.php
 +ln -s /var/www/fax/public_html/includes/dynconf.php /var/spool/hylafax/bin/dynconf.php
 +ln -s /var/www/fax/public_html/includes/notify.php  /var/spool/hylafax/bin/notify.php
 +</code>
 +
 +On met en place la configuration //sudo// : 
 +<code>echo 'www-data ALL= NOPASSWD: /sbin/reboot, /sbin/halt, /usr/sbin/faxdeluser, /usr/sbin/faxadduser -u * -p *' > /etc/sudoers.d/avantfax
 +chmod 0440 /etc/sudoers.d/avantfax</code>
 +
 +On met en place le cron : 
 +<code>echo '0 0 * * * www-data php /var/www/fax/public_html/includes/avantfaxcron.php -t 2' > /etc/cron.d/avantfax</code>
 +
 +Pour finir, on met en place le fichier de configuration. Pour cela, dans //public_html/includes//, on commence par copier le fichier //local_config-example.php// en //local_config.php// et on adapte :
 +
 +  * La configuration de l'accès à la base de données : //AFDB_USER// , //AFDB_PASS// et //AFDB_NAME//
 +  * Utilisateur utilisé pour envoyer les fax : //FAXMAILUSER// (//fax// ou //faxmaster// par exemple)
 +  * Utilisateur d'apache : //WWWUSER// (="www-data")
 +  * Mail de l'admin : //ADMIN_EMAIL//
 +  * La langue par défaut : //$dft_config_lang//
 +  * La société : //$FROM_COMPANY//
 +  * Le chemin de l'outils //html2ps// : //$HTML2PS// (Pour Debian : /usr/bin/html2ps)
 +  * La taille des feuilles de papier par défaut : //$PAPERSIZE// (//a4//)
 +  * On modifie la configuration de reporting d'erreur PHP au vue de l'age du code ... Pour cela ajouter en fin (ou début de fichier) : <code>error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);</code>
 +
 +<note>L'application force elle même le reporting d'erreur PHP à //E_ALL// dans le fichier //config.php//. Avec ce dernier paramètre on viens écraser ce choix non-adapté à l'age du code.</note>
 +
 +=== Astuces ===
 +
 +== Activer le debug ==
 +
 +Configuration  : //$AVANTFAX_DEBUG//
 +
 +== Désactiver la fonctionnalité de page de garde ==
 +
 +Configuration //$SENDFAX_USE_COVERPAGE// à //false//.
 +
 +
 +== Activer l'OCR ==
 +
 +Installation de tesseract :
 +<code>apt-get install tesseract-ocr tesseract-ocr-fra</code>
 +
 +Configuration : 
 +
 +  * ENABLE_OCR_SUPPORT = true
 +  * OCR_BINARY = /usr/bin/tesseract
 +  * OCR_LANGUAGE = fra
 +
 +===== Activer les logs des files téléphoniques en base de données  =====
 +
 +Prenons ici en exemple le log dans //PostgreSQL// :
 +
 +  * Il faut tout d'abord avoir une base de données sur votre instance //PostgreSQL// et y créé une table //queue_log// avec la requête SQL suivante : <code>CREATE TABLE "queue_log" (
 +"id" SERIAL,
 +"time" TIMESTAMP WITHOUT TIME ZONE DEFAULT now() NOT NULL, 
 +"callid" character varying(50) NOT NULL, 
 +"queuename" character varying(50) NOT NULL, 
 +"agent" character varying(50) NOT NULL, 
 +"event" character varying(20) NOT NULL, 
 +"data1" character varying(50) NOT NULL, 
 +"data2" character varying(50) NOT NULL, 
 +"data3" character varying(50) NOT NULL, 
 +"data4" character varying(50) NOT NULL, 
 +"data5" character varying(50) NOT NULL, 
 +CONSTRAINT queue_log_pkey PRIMARY KEY (id)
 +) WITHOUT OIDS;
 +
 +GRANT ALL ON TABLE queue_log TO asterisk;</code>
 +  * Il faut ensuite faire en sorte que le module //res_config_pgsql.so// soit activé. Vérifier donc qu'il n'y ai pas de ligne //unload// dans le fichier //modules.conf// et ajouter y au contraire une ligne //load//.
 +  * Il faudra également configurer la connexion //Postgres// dans le fichier //res_pgsql.conf// : <code>[general]
 +dbhost=127.0.0.1
 +dbport=5432
 +dbname=asterisk
 +dbuser=asterisk
 +dbpass=astpass
 +requirements=warn</code>
 +  * Pour faire en sorte que le champs //data// soit éclaté en plusieurs champs //data1,data2,...//, ajouter dans la section //[general]// du fichier //logger.conf// : <code>queue_adaptive_realtime = yes</code>
 +  * Pour conserver le fichier de log en plus de la base de données, ajouter également : <code>queue_log_to_file = yes</code>
 +  * Activer enfin les logs queue_log via Postgres dans le fichier //extconfig.conf// en ajoutant dans la section //[settings]// : <code>queue_log => pgsql,asterisk,queue_log</code>
 +  * Il ne vous restera plus qu'a recharger la configuration d'asterisk : <code>rasterisk -x reload</code>
 +
 +===== Mise en place d'un service de conférence avec MeetMe =====
 +
 +<note important>L'application MeetMe n'est plus présente dans les versions récentes d'Asterisk (> Debian Wheezy). Il faut désormais utiliser l'application ConfBridge sensiblement identique mais avec tout de même quelques différences importantes :
 +  * Plus de dépendance sur le module //dahdi//
 +  * Il n'existe plus de menu d'accès au conférence permettant de générer la création d'un conférence ou encore de permettre de rejoindre une conférence existante
 +</note>
 +
 +
 +  * Installation : <code bash>apt-get install asterisk-dahdi dahdi dahdi-linux dahdi-source module-assistant
 +m-a prepare
 +m-a a-i dahdi
 +service asterisk stop
 +modprobe dahdi
 +service asterisk start</code>
 +  * Configurer une extension pour rejoindre/créer une conférence :
 +    * Dans le fichier //extensions.conf//, dans le contexte que vous voulez vous pouvez créer les extensions suivantes :
 +      * pour rejoindre ou créer une conférence : <code>exten => conference,1,MeetMe(,saMD)</code>
 +      * pour rejoindre une conférence existante : <code>exten => conference,1,MeetMe(,M)</code>
 +
 +===== Blacklist de certains appelants =====
 +
 +==== Installation ====
 +
 +Dans le fichier ///etc/asterisk/extentions.conf// :
 +
 +  * Ajouter le contexte //blacklisted// : <code>[blacklisted]
 +exten => s,1,Answer()
 +exten => s,n,Wait(3)
 +exten => s,n,Playback(tt-weasels)
 +exten => s,n,Playback(/usr/share/asterisk/sounds/en/tt-monkeys)
 +exten => s,n,Hangup()</code>
 +  * Dans le traitement des appels entrants, ajouter un truc du genre : <code>exten =>
 +standard,1,GotoIf(${DB_EXISTS(blacklist/${CALLERID(num)})}?blacklisted,s,1)</code>
 +
 +==== Gérer les numéros blacklistés ====
 +
 +=== En ligne de commande ===
 +
 +Via la cli asterisk (''asterisk -r'') :
 +
 +  * lister les numéros blacklistés : <code>database show blacklist</code>
 +  * blacklister un numéro : <code>database put blacklist 0171434150 "John Doe"</code>
 +  * dé-blacklister un numéro : <code>database del blacklist 0171434150</code>
 +
 +=== Interface web ===
 +
 +Il est aussi possible d'utiliser une [[http://git.zionetrix.net/manage-asterisk-blacklist|petite interface web]] pour cela :
 +
 +  * créer un compte pour l'API //manager// d'Asterisk pour l'application :
 +    * dans le fichier ///etc/asterisk/manager.conf//, vérifier que ce bloc est dé-commenter : <code>[general]
 +enabled = yes
 +port = 5038</code>
 +    * créé le fichier  ///etc/asterisk/manager.d/blacklist.conf// : <code>[manage-blacklist]
 +secret=secret
 +write = system,command</code>
  
 +  * Mettre en place l'interface web :
 +    * installer les librairies en dépendance :
 +      * [[https://logging.apache.org/log4php|log4php]] ({{ :informatique:telephonie:php-apache-log4php_2.3.0-1_all.deb |paquet Debian}})
 +      * [[https://github.com/marcelog/PAMI|PAMI]] ({{ :informatique:telephonie:php-pami_1.70.2-1_all.deb |paquet Debian}})
 +    * dans un dossier accessible via HTTP, mettre en place le code source récupérer du dépôt Git
 +    * éditer le fichier //index.php// et ajuster les paramètres //username// & //secret// en haut du fichier
  
  • informatique/telephonie/asterisk.1382023083.txt.gz
  • Dernière modification : 2013/10/17 15:18
  • de bn8