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 [2012/01/05 09:47] bn8informatique:telephonie:asterisk [2021/06/14 15:42] (Version actuelle) – [Convertir un fichier MP3 en GSM] bn8
Ligne 1: Ligne 1:
-====== Téléphones Grandstream ======+====== Asterisk ======
  
-===== Patch pour faire fonctionner les LED BLF =====+===== Convertir un fichier MP3 en GSM ===== 
 + 
 +**Exemple : ** 
 + 
 +<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 ===== 
 + 
 +==== Patch pour faire fonctionner les LED BLF ====
  
 <code>--- chan_sip.c.orig 2007-03-18 20:37:06.000000000 +0000 <code>--- chan_sip.c.orig 2007-03-18 20:37:06.000000000 +0000
Ligne 16: 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 :
 +<code>echo "export QUILT_PATCHES=debian/patches" > ~/.quiltrc
 +cd /usr/local/src
 +apt-get source asterisk
 +apt-get install packaging-dev
 +cd asterisk-~~~
 +quilt push -a
 +quilt new fix_grandstream_blf_led
 +quilt add channels/chan_sip.c
 +vi channels/chan_sip.c  # et faite la modif.
 +quilt diff # Ca vous montre votre modif
 +quilt refresh # met à jour le patch
 +dhc # Met à jour le changelog debian
 +dpkg-buildpackage # construction des paquets debian dans ../</code>
 +===== Problème de son derrière une Freebox non-dégroupé =====
 +
 +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.1325756854.txt.gz
  • Dernière modification : 2012/01/05 09:47
  • de bn8