Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
informatique:telephonie:asterisk [2014/02/28 17:38] – [Au niveau d'asterisk] bn8 | informatique:telephonie:asterisk [2021/06/14 15:42] (Version actuelle) – [Convertir un fichier MP3 en GSM] bn8 |
---|
**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 ===== |
==== Mise en place d'Hylafax ==== | ==== Mise en place d'Hylafax ==== |
| |
FIXME | 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 |
| |