La téléphonie Internet libre basée sur Asterisk par Sylvain Thérien http://www.tux89.com Si test = "$téléphonie == 'NUL'"; Alors Goto "www.tux89.com" Tue, 29 Apr 2014 17:30:59 +0000 fr-FR hourly 1 https://wordpress.org/?v=4.8 Recomposition sur destination occupée http://www.tux89.com/telephonie/recomposition-sur-destination-occupee/ http://www.tux89.com/telephonie/recomposition-sur-destination-occupee/#comments Sat, 12 Apr 2014 16:43:34 +0000 http://www.tux89.com/?p=1527 L’idée de base derrière cet article est la motivation suivante. Il arrive à l’occasion que l’on tente de joindre le médecin spécialiste afin de prendre rendez-vous. Puisqu’il y a plus de demandes que d’offre, ce dernier n’offre la prise de rendez-vous qu’une fois par mois et son calendrier se complète en moins de deux heures seulement. Il n’offre pas de priorité aux urgences et l’on ne peut le joindre que par ligne directe, aucun service de répondeur ou de file d’attente. La plupart du temps, lorsque l’on réussit à joindre le bureau, son calendrier mensuel est complet et l’on doit patienter jusqu’au mois suivant.

J’ai donc effectué quelques recherches sur la recomposition automatique sur destination occupée, et les seules références dont j’ai trouvés sont les suivantes : « Asterisk tips campon »

Le but est donc de réessayer la composition automatique d’un poste externe occupé à intervalle régulier en mettant l’appelant en attente avec de la musique jusqu’à ce qu’il y ait réponse au poste externe en question.

Plusieurs solutions potentielles au problème existent sur voip-info, dont les suivantes :

  • Campon : Solution de recomposition pour les postes internes seulement.
  • Campon V2 : Solution de recomposition pour la réception d’appels.
  • Campon for busy outgoing : Solution intéressante qui cependant demande de modifier le plan de composition d’appel actuel d’Asterisk, ce qui brise l’implémentation d’Asterisk si l’on utilise FreePBX.

Aucune de ces solutions ne comble vraiment mes besoins. Après les avoir essayés, j’en suis venu à la conclusion qu’il existait une méthode simple d’implémenter le tout par la commande « RetryDial » offerte par Asterisk.

La commande RetryDial offre les mêmes fonctionnalités que la commande Dial, mais permet en plus de recomposer automatiquement un nombre de fois déterminé avec un délai variable entre chaque essai.

En théorie, je n’aurais qu’à remplacer la commande Dial par RetryDial et le tout serait réglé, cependant j’utilise FreePBX et le contrôle du plan de composition est sous la gouverne de ce dernier. Ce qui veut dire qu’à chaque fois que j’effectue un changement via l’interface d’administration FreePBX, le fichier /etc/asterisk/extensions_additionnal.conf est régénéré automatiquement par FreePBX, et donc mes changements seraient perdus.

Je pourrais aussi remplacer une partie du plan de composition en utilisant des fichiers précis de FreePBX, cependant, je briserais à long terme l’évolution de FreePBX sur mon système.

Après réflexion, une solution qui me semble un compromis est de créer une nouvelle route pour ce besoin. Cela peut être fait en trois étapes simples.

Premièrement ajoutez une route spécifique pour la recomposition sur appels occupés. Disons que l’on nommera la nouvelle route « outrt-repeat-busy ». Pour inclure cette route, éditer le fichier /etc/asterisk/extensions_custom.conf et y inclure le code suivant à la fin du fichier :

; Route pour la recomposition sur appels occupés.
[outbound-allroutes-custom]
include => outrt-repeat-busy

Il est à noter que « extensions_additional.conf » fait appel à « outbound-allroutes-custom », nous permettant ainsi d’ajouter notre propre route nommée « outrt-repeat-busy ».

Deuxièmement, ajoutez le code pour cette route en copiant une route de sortie déjà existante. Dans le cas qui m’intéresse, j’ai pris la route pour les appels locaux Amérique du Nord à dix chiffres « NXXNXXXXXX » que j’ai copié à partir du fichier /etc/asterisk/extensions_additional.conf.

Éditez le fichier /etc/asterisk/extensions_custom.conf et y inclure le code suivant à la suite de modifications effectuées à l’étape précédente [outbound-allroutes-custom] :

[outrt-repeat-busy]
exten => _2NXXNXXXXXX,1,Macro(user-callerid,SKIPTTL,)
exten => _2NXXNXXXXXX,n,Set(_NODEST=)
exten => _2NXXNXXXXXX,n,Macro(record-enable,${AMPUSER},OUT,)
;exten => _2NXXNXXXXXX,n,Macro(dialout-trunk-busy,11,${EXTEN:1},,)
exten => _2NXXNXXXXXX,n,Macro(dialout-trunk-busy,10,${EXTEN:1},,)
;exten => _2NXXNXXXXXX,n,Macro(dialout-trunk-busy,8,${EXTEN:1},,)
exten => _2NXXNXXXXXX,n,Macro(outisbusy,)
; end of [outrt-repeat-busy]

Quelques explications sur le code [outrt-repeat-busy]. Cette route sera accessible en utilisant le chiffre 2 comme préfix. Si vous faites de même, assurez-vous que le chiffre 2 ne soit pas utilisé par une autre route de sortie. On doit aussi renommer l’appel à la macro « dialout-trunk » à « dialout-trunk-busy ». Il faut aussi considérer les Trunks à utiliser comme sortie. Notez que seuls les Trunks SIP, IAX et RNIS permettent d’identifier par message qu’une destination est occupée. Dans mon cas et pour la raison que je viens d’énumérer, je ne désire pas utiliser les Trunks référencés à 11 et 8, qui correspondent à ma ligne du Réseau Téléphonique Commuté  et à mon Trunk SIP vers mon cellulaire.  J’ai mis en commentaire les références à ces lignes en ajoutant un « ; » en début de ligne. Je n’ai gardé que le Trunk référencé à 10 qui correspond à mon fournisseur de téléphonie Internet SIP.

Afin de trouver l’index du Trunk de sortie (dans mon cas 10), exécutez la ligne de commande suivante.

egrep « OUT_..? = »  /etc/asterisk/extensions_additional.conf

Troisièmement comme dernière étape, ajoutez le code de la macro faisant appel au Trunk en copiant la macro macro-dialout-trunk qui est situé dans le fichier /etc/asterisk/extensions_additional.conf. Éditez maintenant le fichier /etc/asterisk/extensions_custom.conf et y inclure le code suivant à la suite des modifications effectuées à l’étape précédente [outrt-repeat-busy] :

[macro-dialout-trunk-busy]
exten => s,1,Set(DIAL_TRUNK=${ARG1})
exten => s,n,GosubIf($[$[« ${ARG3} » != «  »] & $[« ${DB(AMPUSER/${AMPUSER}/pinless)} » != « NOPASSWD »]]?sub-pincheck,s,1)
exten => s,n,GotoIf($[« x${OUTDISABLE_${DIAL_TRUNK}} » = « xon »]?disabletrunk,1)
exten => s,n,Set(DIAL_NUMBER=${ARG2})
exten => s,n,Set(DIAL_TRUNK_OPTIONS=${DIAL_OPTIONS})
exten => s,n,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK})
exten => s,n,GotoIf($[« ${OUTMAXCHANS_${DIAL_TRUNK}}foo » = « foo »]?nomax)
exten => s,n,GotoIf($[ ${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}} ]?chanfull)
exten => s,n(nomax),GotoIf($[« ${INTRACOMPANYROUTE} » = « YES »]?skipoutcid)
exten => s,n,Set(DIAL_TRUNK_OPTIONS=${TRUNK_OPTIONS})
exten => s,n,Macro(outbound-callerid,${DIAL_TRUNK})
exten => s,n(skipoutcid),ExecIf($[« ${PREFIX_TRUNK_${DIAL_TRUNK}} » != «  »],AGI,fixlocalprefix)
exten => s,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
exten => s,n,Set(custom=${CUT(OUT_${DIAL_TRUNK},:,1)})
exten => s,n,ExecIf($[$[« ${MOHCLASS} » != « default »] & $[« ${MOHCLASS} » != «  »]],Set,DIAL_TRUNK_OPTIONS=M(setmusic^${MOHCLASS})${DIAL_TRUNK_OPTIONS})
exten => s,n(gocall),Macro(dialout-trunk-predial-hook,)
exten => s,n,GotoIf($[« ${PREDIAL_HOOK_RET} » = « BYPASS »]?bypass,1)
exten => s,n,GotoIf($[« ${custom} » = « AMP »]?customtrunk)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;exten => s,n,Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM},300,${DIAL_TRUNK_OPTIONS})
exten => s,n,RetryDial(,10,-1,${OUT_${DIAL_TRUNK}}/${OUTNUM},300,${DIAL_TRUNK_OPTIONS})
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s,n(customtrunk),Set(pre_num=${CUT(OUT_${DIAL_TRUNK},$,1)})
exten => s,n,Set(the_num=${CUT(OUT_${DIAL_TRUNK},$,2)})
exten => s,n,Set(post_num=${CUT(OUT_${DIAL_TRUNK},$,3)})
exten => s,n,GotoIf($[« ${the_num} » = « OUTNUM »]?outnum:skipoutnum)
exten => s,n(outnum),Set(the_num=${OUTNUM})
exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},300,${DIAL_TRUNK_OPTIONS})
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s,n(chanfull),Noop(max channels used up)
exten => s-BUSY,1,Noop(Dial failed due to trunk reporting BUSY – giving up)
exten => s-BUSY,n,Playtones(busy)
exten => s-BUSY,n,Busy(20)
exten => s-NOANSWER,1,Noop(Dial failed due to trunk reporting NOANSWER – giving up)
exten => s-NOANSWER,n,Playtones(congestion)
exten => s-NOANSWER,n,Congestion(20)
exten => s-CANCEL,1,Noop(Dial failed due to trunk reporting CANCEL – giving up)
exten => s-CANCEL,n,Playtones(congestion)
exten => s-CANCEL,n,Congestion(20)
exten => s-CHANUNAVAIL,1,GotoIf($[« x${OUTFAIL_${ARG1}} » = « x »]?noreport)
exten => s-CHANUNAVAIL,n,AGI(${OUTFAIL_${ARG1}})
exten => s-CHANUNAVAIL,n(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} (hangupcause: ${HANGUPCAUSE}) – failing through to other trunks)
exten => _s-.,1,GotoIf($[« x${OUTFAIL_${ARG1}} » = « x »]?noreport)
exten => _s-.,n,AGI(${OUTFAIL_${ARG1}})
exten => _s-.,n(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} – failing through to other trunks)
exten => disabletrunk,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} DISABLED – falling through to next trunk)
exten => bypass,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} BYPASSING because dialout-trunk-predial-hook)
exten => h,1,Macro(hangupcall,)
; end of [macro-dialout-trunk-busy]

Vous remarquerez que la macro a été renommée [macro-dialout-trunk-busy]. De plus, le code entre les deux lignes commentées a été adapté par rapport à la version originale du code [macro-dialout-trunk]. En fait, la ligne faisant appel à la commande Dial a été commentée et remplacée par un appel à la commande RetryDial.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;exten => s,n,Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM},300,${DIAL_TRUNK_OPTIONS})
exten => s,n,RetryDial(,10,-1,${OUT_${DIAL_TRUNK}}/${OUTNUM},300,${DIAL_TRUNK_OPTIONS})
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

La commande RetryDial a les particularités suivantes :

  • Offre les mêmes fonctions que la commande Dial ;
  • Permet de transmettre un message personnalisé avant la composition ;
  • Délai d’attente entre les essais paramétrable ;
  • Nombre d’essais paramétrable.

Dans le cas qui nous intéresse, j’ai spécifié les paramètres suivants :

exten => s,n,RetryDial(,10,-1,${OUT_${DIAL_TRUNK}}/${OUTNUM},300,${DIAL_TRUNK_OPTIONS})

  • Aucun message personnalisé avant la composition ;
  • Délai d’attente entre les essais de dix secondes ;
  • Nombre d’essais indéfini, d’ou la valeur -1.

Essai

Si vous avez deux Trunks de sorties, c’est parfait pour effectuer un test. Sinon, vous n’avez qu’à trouver un numéro pour lequel vous savez que la ligne est occupée et n’offre pas l’appel en attente.

Composez un numéro pour lequel l’on répondra, la manœuvre étant de tenir votre premier Trunk de sortie occupé. Composez maintenant le numéro correspondant à votre premier Trunk. En supposant que vous n’avez pas de fonction d’appel en attente et que votre Trunk ne supporte qu’un appel (canal) à la fois, vous devriez obtenir une tonalité occupée. Nous voici maintenant avec les conditions de base pour effectuer le test. Raccrochez votre deuxième appel et recomposez maintenant le numéro correspondant à votre premier Trunk, mais cette fois en ajoutant le préfixe identifié précédemment dans la route [outrt-repeat-busy]. Dans mon cas, le préfixe est 2. Cette fois-ci, on n’obtiendra pas une tonalité occupée, mais plutôt de la musique d’attente. Cette musique s’interrompra pour une courte durée toutes les dix secondes, signifiant que la commande RetryDial fait un autre essai de recomposition. Ce petit manège se répétera jusqu’à ce que la ligne de destination se libère ou que vous décidiez de mettre fin à l’appel.

Cette nouvelle fonction a passé haut la main la certification ISO-CONJOINTE, ce qui n’est pas peu dire :-).

Bon rendez-vous !

Références :

http://www.voip-info.org/wiki/view/Asterisk+cmd+RetryDial
http://www.voip-info.org/wiki/view/Asterisk+cmd+Dial
http://www.voip-info.org/wiki/view/Asterisk+tips+campon
http://www.freepbx.org/configuration_files
http://en.wikipedia.org/wiki/Called-party_camp-on
pixelstats trackingpixel]]>
http://www.tux89.com/telephonie/recomposition-sur-destination-occupee/feed/ 1
Configurer sendmail comme relais SMTP vers la messagerie Gmail http://www.tux89.com/telephonie/configurer-sendmail-comme-relais-smtp-vers-la-messagerie-gmail/ http://www.tux89.com/telephonie/configurer-sendmail-comme-relais-smtp-vers-la-messagerie-gmail/#comments Tue, 18 Mar 2014 21:01:15 +0000 http://www.tux89.com/?p=1083 Si la démarche de configuration de l’envoi de courriel proposée (relais SMTP sendmail) dans l’article « Ajustement Post installation » ne fonctionne pas pour vous,  alors suivez les étapes de cet article afin d’utiliser le relais de Gmail plutôt que celui de votre fournisseur d’accès Internet.

Valider la version de sendmail

Le protocole de communication utilisé par Gmail pour l’accès au service SMTP est sécurisé. Il faut donc s’assurer que la version de sendmail utilisé supporte le protocole TLS pour le chiffrement et SASL pour l’authentification. Pour vérifier,

faites la ligne de commande suivante :

/usr/sbin/sendmail -d0.1 -bv root

Si tout est bon, vous devriez voir les 2 options suivantes :

Compiled with : STARTTLS &  SASLv2

Valider la version de SASL

Afin de s’assurer que la version de SASL supporte les bons niveaux d’authentification, soit « LOGIN » et « PLAIN », et qu’il n’y aura pas de problème pour l’authentification avec Gmail, il faut valider la version  de SASL en exécutant la ligne de commande suivante :

yum list | grep sasl

La version de SASL doit être à 2.1.21 ou supérieure.

Si vous n’avez pas la bonne version, vous n’avez qu’à mettre à jour en effectuant la ligne de commande suivante :

yum install cyrus-sasl-plain

Avant de poursuivre, assurez-vous que le service SASL est fonctionnel et s’exécute comme daemon. Exécutez la ligne de commande suivante :

chkconfig –list saslauthd

Vous devriez observer que le service s’exécute au niveau 2-3-4-5, état « on », comme ci-dessous :

saslauthd       0:off   1:off   2:on 3:on 4:on 5:on 6:off

Si ce n’est pas le cas, simplement exécuter les deux lignes de commandes suivantes :

chkconfig saslauthd on
/sbin/service saslauthd start

Certificat de sécurité SSL

Cette étape consiste à créer les répertoires pour le stockage des certificats s’ils n’existent pas, effectuez les lignes de commandes suivantes :

mkdir /usr/share/ssl
mkdir /usr/share/ssl/certs
cd /usr/share/ssl/certs

Maintenant, si le fichier ca-bundle.crt n’existe pas, il faudra copier le certificat maître de votre système en effectuant la ligne de commande suivante :

cp /etc/pki/tls/certs/ca-bundle.crt /usr/share/ssl/certs/

Si vous ne trouvez pas le certificat ca-bundle.crt dans le répertoire /etc/pki/tls/certs/,  effectuez une recherche sur votre système afin de trouver son emplacement. Voici la commande en cas de besoin :

find / -name ca-bundle.crt -print

Nous allons maintenant générer les certificats locaux. Voici les lignes de commandes à utiliser pour générer les certificats SSL. Il est à noter qu’avec la valeur de paramètre « 3650 », vos certificats seront valides pour une période d’environ 10 ans.

Vous n’avez pas à générer le certificat CAPERM.PEM, mais question de conformité future, il ne fait pas de mal le générer tout de même. Exécutez la ligne de commande suivante et entrez les paramètres selon vos propres besoins et coordonnées.

openssl req -new -x509 -keyout cakey.pem -out cacert.pem -days 3650

Poursuivez maintenant pour la création du certificat sendmail en exécutant la ligne de commande suivante et entrez les paramètres selon vos propres besoins et coordonnées.

openssl req -nodes -new -x509 -keyout sendmail.pem -out sendmail.pem -days 3650

Configuration de sendmail

Nous sommes maintenant à l’étape finale de la démarche. Nous devons paramétrer sendmail afin qu’il puisse utiliser le relais SMTP de Gmail pour l’envoie de courriels.

Éditez le fichier /etc/mail/authinfo. Si le fichier n’existe pas, vous devrez le créer. Entrez les informations suivantes :

AuthInfo:smtp.gmail.com "U:root" "I:votreadresse@gmail.com" "P:mot_de_passe" "M:PLAIN"
AuthInfo:smtp.gmail.com:587 "U:root" "I:votreadresse@gmail.com" "P:mot_de_passe" "M:PLAIN"

Notez que vous devez changer les paramètres « votreadresse » et « mot_de_passe » par vos identifiants Gmail.

Effectuez ensuite les lignes de commandes suivantes :

makemap hash /etc/mail/authinfo < /etc/mail/authinfo
chmod 600 /etc/mail/authinfo

Éditez ensuite le fichier /etc/mail/sendmail.mc afin d’y ajouter les lignes suivantes, juste avant la ligne « MAILER(smtp)dnl » :

FEATURE(`authinfo',`hash /etc/mail/authinfo.db')
define(`SMART_HOST',`smtp.gmail.com')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')
define(`ESMTP_MAILER_ARGS', `TCP $h 587')
define(`confCACERT_PATH',`/usr/share/ssl/certs')
define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
define(`confAUTH_OPTIONS', `A')dnl

Effectuez ensuite les lignes de commandes suivantes afin de générer une version finale de configuration de sendmail. Notez que la commande m4 ne devrait donner aucune erreur.

cd /etc/mail
m4 sendmail.mc > sendmail.cf

Redémarrez le service sendmail en effectuant la ligne de commande suivante :

service sendmail restart

Pour valider que le tout soit conforme, exécutez la ligne de commande suivante :

echo '/map authinfo AuthInfo:smtp.gmail.com' | /usr/sbin/sendmail -bt

La commande précédente devrait donner le résultat suivant :

ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> map_lookup: authinfo (AuthInfo:smtp.gmail.com) returns « U:root » « I:votreadresse@gmail.com » « P:mot_de_passe » « M:PLAIN » (0)

Faites en suite un test en exécutant la ligne de commande suivante en prenant soin de changer « votreadresse@gmail.com » par votre propre adresse de courriel

echo « Ceci est un test » | mail -s Test votreadresse@gmail.com

Références :

http://www.screaming-penguin.com/node/4214

http://www.phinesolutions.com/sendmail-gmail-smtp-relay-howto.html

Étape suivante :

Aide pour la gestion via une ligne de commande
pixelstats trackingpixel]]>
http://www.tux89.com/telephonie/configurer-sendmail-comme-relais-smtp-vers-la-messagerie-gmail/feed/ 35
Trunk IAX entre deux systèmes Asterisk http://www.tux89.com/telephonie/trunk-iax-entre-deux-systemes-asterisk/ http://www.tux89.com/telephonie/trunk-iax-entre-deux-systemes-asterisk/#comments Sat, 14 Jul 2012 00:38:03 +0000 http://www.tux89.com/?p=804 Si vous avez besoin de relier deux systèmes Asterisk ensemble, vous aurez besoin d’établir une passerelle entre les systèmes afin qu’ils puissent échanger adéquatement. Le nom donné à cette passerelle en terminologie téléphonique s’appelle un « Trunk ». Les fonctions principales du Trunk sont de fournir les services de signalisation et de transport de la voix. Plusieurs protocoles différents existent pour le « trunking » entre les systèmes téléphoniques. Certains sont des protocoles propriétaires et d’autres sont ouverts. Entre autres, au niveau d’Asterisk, les protocoles suivants sont supportés :

  • ZAP : Protocole pour les interfaces analogiques Digium (FXO & FXS).
  • IAX2 : (Inter-Asterisk eXchange) Protocole Internet supporté que sur Asterisk.
  • SIP : (Session Initiation Protocol) Protocole Internet standard ouvert.
  • ENUM : Protocole de routage Internet utilisant un numéro de téléphone comme clé de recherche afin de trouver la manière de joindre un contact.
  • DUNDi : Protocole de routage Internet offrant des services de répertoire similaire à ce qui est offert par ENUM.
  • Personalisé : Permets d’interfacer des protocoles spécifiques.

Dans cet article, j’utiliserai le protocole IAX afin de relier les deux systèmes Asterisk. La raison principale étant que IAX est plus simple à déployer lorsque l’on utilise des réseaux utilisant le « NATing ». De plus, le protocole, contrairement au protocole SIP, n’utilise qu’un seul port de communication en UDP, soit le port 4569 pour la signalisation et le transport de la voix. Il est à noter que IAX2, le 2 représentant la deuxième version du protocole IAX, est un protocole ayant été développé par Digium.

Trunk

Alors, que faut-il en terme de composant pour relier deux systèmes ensemble. Premièrement, on doit définir un Trunk sur chacun des systèmes afin qu’ils puissent s’authentifier et échanger. Deuxièmement, pour la sortie des appels d’un système vers un autre, on doit définir au minimum une route de sortie afin que les appels puissent passer d’un système à l’autre via le plan d’acheminement d ‘appel et de numérotation. Optionnellement, si l’on désire unifier les plans de numérotation de chacun des systèmes, on devra créer du code ou définir des « Miscellaneous Destinations » afin que l’on puisse transférer un appel vers l’autre système.

Allons-y pour la création du Trunk. Via FreePBX, dans le composant « Trunk », faites la création d’un Trunk de type IAX, puis suivez les étapes ci-dessous pour l’entrée des paramètres :

Dans la section « Paramètres de Sortie », nommez le Trunk en lui donnant un nom unique qui permettra d’identifier vers quel système le Trunk est dirigé. Mettre le CID Sortant au numéro CID identifiant votre numéro de téléphone. Limitez le nombre de canaux de sortie si désiré.

Nom du Trunk: IAX56
CID Sortant : 5145551212
Nombre maximal de canaux : 2

Dans la section « Détails du PEER », entrez les informations identifiant l’autre système. C’est ici que l’on spécifie ce que l’autre système s’attend de recevoir en terme de paramètres. Dans le cas présent, l’autre système a l’adresse IP 192.168.11.56.

host=192.168.11.56
qualify=yes
secret=password
trunk=yes
type=peer
username=iax2

Vous pouvez ajouter des lignes de directives à celles listées par défaut ci-dessus, quoique celles-ci fonctionnent bien. Attention, car l’ordre est important. Par exemple, si vous utilisez les directives « allow/deny », assurez-vous que « deny » vient en premier. N’oubliez pas de mettre un mot de passe sécuritaire via l’attribut de la directive secret.

Dans la section « Paramètres d’Entrée », entrez les informations qui vous permettront d’authentifier l’autre système afin qu’il puisse communiquer avec ce système-ci. C’est ici que l’on spécifie ce que l’autre système devra fournir en terme de paramètres.

Contexte Utilisateur: IAX2

C’est le plus souvent, le nom ou numéro du compte que le système s’attend de recevoir. Ce contexte sera utilisé pour définir les détails de l’utilisateur ci-dessous.

Détails de l’utilisateur:

context=from-internal
secret=password
type=user

Vous pouvez ajouter des lignes de directives à celles listées par défaut ci-dessus, quoique celles-ci fonctionnent bien. Attention, car l’ordre est important. Par exemple, si vous utilisez les directives « allow/deny », assurez-vous que « deny » vient en premier. N’oubliez pas de mettre un mot de passe sécuritaire via l’attribut de la directive secret.

Faire de même sur votre autre système Asterisk, mais en prenant soin de changer l’adresse IP, par exemple host=192.168.5.22. Pour le nom du Trunk, spécifiez par exemple IAX22

Modification de sécurité IAX

Si vous utilisez une version d’Asterisk plus récente que 1.4.22, alors vous devez ajouter ces deux lignes dans le fichier

/etc/asterisk/iax_general_custon.conf

calltokenoptional = 0.0.0.0/0.0.0.0
maxcallnumbers = 16382

Ceci permettra d’accepter les appels sur le Trunk. Dans le cas contraire, vous obtiendrez un message d’erreur « Toutes les lignes sont occupées » lors des appels via ce Trunk.

Routes Sortantes

Pour acheminer les appels d’un système à l’autre, il faut s’assurer que le plan d’acheminement d’appel corresponde aux numéros de chaque système. On doit alors ajouter une route sortante comme celle-ci -dessous via l’interface FreePBX.

Par exemple, si notre premier serveur n’a aucun moyen d’acheminer les appels vers l’extérieur, on pourrait diriger tous les appels à sept et dix chiffres vers le deuxième système afin que ce dernier les achemine vers l’extérieur. La configuration ressemblerait alors à ceci.

Nom de la Route: Local
Masque de Numérotation: NXXNXXXXXX & NXXXXXX
Séquence Trunk: IAX2/IAX56

Autre exemple, on veut diriger les appels correspondant aux postes 3000 à 3009 vers le deuxième système afin que celui-ci les achemine aux extensions de son propre plan de numérotation. La configuration alors ressemblerait à ceci.

Nom de la Route: AutreSysteme
Masque de Numérotation: 300X
Séquence Trunk: IAX2/IAX56

On aurait pu aussi ajouter un préfixe comme 8 ou 9 pour passer les appels à l’autre système pour tout poste d’extension à quatre chiffres. Notez que le chiffre avant la barre verticale dans l’expression ne sera pas acheminé au deuxième système, seulement ce qui suit la barre verticale sera transmis. La configuration ressemblerait maintenant à ceci.

Nom de la Route: AutreSystemeAvecPrefixe
Masque de Numérotation: 8|XXXX
Séquence Trunk: IAX2/IAX56

N’oubliez pas d’appliquer une configuration similaire sur votre deuxième système.

Extension du plan de numérotation

Avec ce que nous venons de voir, il est possible de joindre l’autre système téléphonique à la condition que l’on compose à partir d’un poste étant directement relié à l’un des deux systèmes. Je m’explique, si par exemple vous composez de votre téléphone portable, alors la Réponse Vocale Interactive sera votre porte d’entrée au système. Si vous n’utilisez pas la fonction DISA qui vous procure un accès interne au système, comment faites-vous pour joindre le deuxième système ? Bien ça peut paraître simple, mais le plan de numérotation de votre premier système ne connaît pas les numéros d’extensions du deuxième système. Alors voici deux façons parmi tant d’autres de faire.

Méthode 1

Pour joindre à partir du premier système téléphonique le poste 1234 se trouvant sur le deuxième système, définir une « Miscellaneous Destinations » avec les paramètres suivants :

Description : VersExtension1234
Dial : 1234

En supposant que l’on ait pris soin d’ajouter comme nous l’avons vu ci-haut une route sortante pour l’acheminement de cet appel vers l’autre système, l’appel se rendra comme prévu au poste 1234. Si vous voulez que cet appel puisse être accessible de la RVI, alors vous n’avez qu’à spécifier la « Miscellaneous Destinations » voulue pour le choix de menu correspondant.

Méthode 2

Tout comme dans la méthode précédente, pour joindre à partir du premier système téléphonique le poste 1234 se trouvant sur le deuxième système, éditez le fichier /etc/asterisk/extensions_custom.conf et ajoutez le code ci-dessous :

; VersExtension1234
[custom-versextension1234]
exten => s,1,Answer
exten => s,2,Dial(IAX2/IAX56/1234,20,trwW)
exten => s,3,Hangup()

Ensuite, via FreePBX, ajoutez via le composant que l’on trouve sous l’onglet « Outil », une « Destinations Personnalisées ». Les paramètres de la destination personnalisée sont les suivants :

Custom Destination : custom-versextension1234,s,1
Description : Transfer vers extension 1234

Poursuivez en définissant une « Miscellaneous Applications» avec les paramètres suivants :

Description : Vers Extension 1234
Feature code : 1234
Feature status : Enabled
Destination Personnalisées : Transfer vers extension 1234

Cette fois-ci, il n’est pas nécessaire d’ajouter une route sortante pour l’acheminement de cet appel vers l’autre système puisque la route en spécifiée dans le code de l’application, comme ceci :

Dial(IAX2/IAX56/1234,20,trwW)

Alors, l’appel se rendra comme prévu au poste 1234. Si vous voulez que cet appel puisse être accessible de la RVI, vous n’avez qu’à spécifier la « Miscellaneous Application» voulue pour le choix de menu correspondant.

pixelstats trackingpixel]]>
http://www.tux89.com/telephonie/trunk-iax-entre-deux-systemes-asterisk/feed/ 35
Installation de Codec G.729 Digium http://www.tux89.com/telephonie/installation-de-codec-g-729-digium/ Fri, 13 Jan 2012 22:26:29 +0000 http://www.tux89.com/?p=1785 Comme mentionnée dans la rubrique Installation de Codec G.729, l’utilisation du codec G.729 exige l’acquittement d’une licence. Dans cette rubrique, nous verrons le processus permettant l’installation de codec G.729 de Digium.

Au préalable, vous devrez avoir acheté une licence d’utilisation du codec G.729 de Digium. Une fois votre licence achetée, vous recevrez un courriel avec l’information sur votre licence. Ensuite, poursuivez tel que décrit ci-dessous.

Installation du codec G.729 de Digium

Exécutez les lignes de commandes suivantes afin d’installer la licence de votre codec G.729 :

cd /root
mkdir digium
cd digium
wget http://downloads.digium.com/pub/register/x86-32/register
chmod 500 register
./register

Le résultat sera similaire au suivant :

Digium Product Registration – Version 3.0.5
Copyright (C) 2004-2007, Digium, Inc.
Use the ‘-l’ option to see license information for software
included in this program.
Please select a category
1 – Digium Products
2 – Cepstral Products
0 – Quit

Faites « 1 » comme choix.

Your Choice: 1
You selected 1, Digium Products
Please select a product
1 – Asterisk Business Edition
2 – Asterisk Business Edition C Expansion
3 – Asterisk For Smart Cube
4 – Asterisk For Smart Cube Expansion
5 – G.729 Codec
6 – High Performance Echo Can
7 – Skype For Asterisk
8 – Fax for Asterisk
9 – Free Fax for Asterisk
10 – Vestec Speech Engine
0 – Quit

Faites « 5 » comme choix, entrez le « Key-ID » de votre licence (voir courriel reçu de Digium), puis confirmez que vous voulez enregistrer cette licence en appuyant sur la touche « y ».

Your Choice: 5
You selected 5, G.729 Codec
Please enter your Key-ID: G729-YYYYYYYY G729-XXXXXXXX
Product available to be registered.
Do you want to register this key now(y/n) y
DIGIUM END-USER PURCHASE AND LICENSE AGREEMENT
IMPORTANT – PLEASE READ CAREFULLY

Digium EUPLA 08132010

Confirmez que vous acceptez les conditions en appuyant sur la touche « y ».

Do you accept this licensing agreement (y/n)? y
You will be prompted for the following fields:
First Name: Last Name: Company: Address 1: Address 2: City: State:
Postal Code: Country: Phone: E-Mail:

Entrez maintenant les informations comme demandé :

First Name: Prenom
Last Name: Nom
Company: Peu_Importe
Address 1: 1 rue
Address 2:
City: Maville
State: Province
Postal Code: A1A1A1
Country: Canada
Phone: 5145551212
E-Mail: courriel@serveur.com
Wrote license to /var/lib/asterisk/licenses/G729-YYYYYYYY.lic

Exécutez la ligne de commande suivante :

cat /var/lib/asterisk/licenses/G729-YYYYYYYY.lic

Vous verrez alors la licence qui vous a été attribuée.

Key-ID: G729-YYYYYYYY
Product: G.729 Codec
Channels: 20
ExpDate: 2035-04-01
Host-ID: 7c:87:99:75:e2:67:a8:4b:48:60:d3:92:58:a0:7e:17:93:89:7d:1c
Signature: iZPrsDAL7rITJ2HiOug3HKv2qPhxjIfn6ufFG84Lj8tXNOERB33gOdtYVfhAZkyBr+ZvD8KsW5X3rrC5h8ivnUha6FqyJ6g70qYMZErUIr96vtyaXA8wKiy/53ryLydgEGZ+9PGzgRnXFFgcaervuhoZMIWOwrBKUxlMvLh6MaU

Exécutez maintenant les lignes de commandes suivantes afin de télécharger et d’exécuter l’outil dévaluation du codec G.729 pour votre plateforme :

wget http://downloads.digium.com/pub/telephony/codec_g729/benchg729/x86-32/benchg729-1.0.8-x86_32 -O benchg729
chmod 500 benchg729
./benchg729

Comme démontré ci-dessous, l’outil vous fera une recommandation sur le codec à installer par rapport à votre plateforme.

benchg729 version 1.0.8
Use the ‘-l’ option to see license information for software
included in this program.
Running tests over 60 seconds of test data.
Test run 1 for flavor ‘generic’ used 711 milliseconds of CPU time.

Test run 5 for flavor ‘generic’ used 710 milliseconds of CPU time.
Test run 1 for flavor ‘i686’ used 638 milliseconds of CPU time.

Test run 5 for flavor ‘i686’ used 637 milliseconds of CPU time.
Test run 1 for flavor ‘pentium3m’ used 590 milliseconds of CPU time.

Test run 5 for flavor ‘pentium3m’ used 591 milliseconds of CPU time.



Flavor ‘opteron-sse3’ failed, skipping.teron-sse3’…
Flavor ‘barcelona’ failed, skipping.’barcelona’…

Test run 1 for flavor ‘c3-2’ used 590 milliseconds of CPU time.

Test run 5 for flavor ‘c3-2’ used 591 milliseconds of CPU time.
Results:
Average for flavor ‘generic’ is 710 milliseconds of CPU time.
Average for flavor ‘i686’ is 638 milliseconds of CPU time.
Average for flavor ‘pentium3m’ is 590 milliseconds of CPU time.
Average for flavor ‘pentium-m’ is 701 milliseconds of CPU time.
Average for flavor ‘pentium4m’ is 719 milliseconds of CPU time.
Average for flavor ‘k6-3’ is 708 milliseconds of CPU time.
Average for flavor ‘athlon’ is 641 milliseconds of CPU time.
Average for flavor ‘athlon-xp’ is 602 milliseconds of CPU time.
Average for flavor ‘opteron’ is 690 milliseconds of CPU time.
Average for flavor ‘c3’ is 715 milliseconds of CPU time.
Average for flavor ‘c3-2’ is 590 milliseconds of CPU time.
Recommended flavor for this system is ‘pentium3m’ with an average of 590 milliseconds of CPU time.

La recommandation dans ce cas-ci est d’utiliser un codec pour un processeur « Pentium 3 m ». Le fichier contenant l’archive du codec requis sera donc le suivant :

codec_g729a-1.4_3.1.5-pentium3m_32.tar.gz

Exécutez maintenant les lignes de commandes suivantes afin de télécharger l’archive contenant le codec G.729 et ensuite en faire l’installation :

wget http://downloads.digium.com/pub/telephony/codec_g729/asterisk-1.4/x86-32/codec_g729a-1.4_3.1.5-pentium3m_32.tar.gz
tar xvf codec_g729a-1.4_3.1.5-pentium3m_32.tar.gz
cd codec_g729a-1.4_3.1.5-pentium3m_32
cp codec_g729a.so /usr/lib/asterisk/modules/

Chargeons maintenant le module du codec G.729 dans Asterisk en exécutant cette commande :

asterisk -rx « module load codec_g729a.so »

Si cela n’est pas déjà fait, pour le protocole IAX, ajoutez le codec G.729 dans la configuration en éditant le fichier « /etc/asterisk/iax_general_additional.conf »

allow=g729

Si cela n’est pas déjà fait, pour le protocole SIP, ajoutez le codec G.729 dans la configuration en éditant le fichier « /etc/asterisk/sip_general_additional.conf »

allow=g729

Modifiez la définition de votre Trunk avec les paramètres suivants :

disallow=all
allow=g729g&ulaw&alaw

Redémarrez maintenant Asterisk.

/usr/sbin/asterisk -rx restart now

Maintenant, vérifions que la licence du codec est bien installée au niveau d’Asterisk

asterisk -rvvvvv
g729 show licenses

Vous verrez alors :

0/0 encoders/decoders of 20 licensed channels are currently in use
Licenses Found:
File: G729-YYYYYYYY.lic — Key: G729-XXXXXXXX — Host-ID: 7c:87:99:75:e2:67:a8:4b:48:60:d3:92:58:a0:7e:17:93:89:7d:1c — Channels: 20 (Expires: 2035-04-01) (OK)

Finalement, exécutez la commande suivante afin d’observer ce qu’Asterisk permet en terme de conversion d’un format de codec à l’autre :

core show translation

Vous verrez alors quelque chose similaire à ceci, portez une attention plus particulière au codec G.729 :

 

g723 gsm ulaw alaw g726aal2 adpcm slin lpc10 g729 speex ilbc g726 g722
g723 3 2 2 2 2 1 4 7 2
gsm 10 2 2 2 2 1 4 7 2
ulaw 10 3 1 2 2 1 4 7 2
alaw 10 3 1 2 2 1 4 7 2
g726aal2 10 3 2 2 2 1 4 7 1
adpcm 10 3 2 2 2 1 4 7 2
slin 9 2 1 1 1 1 3 6 1
lpc10 11 4 3 3 3 3 2 8 3
g729 10 3 2 2 2 2 1 4 2
speex
ilbc
g726 10 3 2 2 1 2 1 4 7
g722

Références

Documentation – G.729 – Digium
pixelstats trackingpixel]]>
Installation de Codec G.729 http://www.tux89.com/telephonie/installation-de-codec-g-729/ http://www.tux89.com/telephonie/installation-de-codec-g-729/#comments Fri, 04 Nov 2011 14:34:40 +0000 http://www.tux89.com/?p=1774 Les codecs sont utilisés pour convertir un signal vocal analogique à une forme codée numériquement, qui évidemment peut-être transportée sur un réseau IP. Les différents codecs offrent entre autres des variations en terme de qualité sonore, de bande passante utilisé, ainsi qu’au niveau des exigences requises sur l’unité de traitement. Puisque l’utilisation de bande passante pour la téléphonie Internet est dépendante des codecs utilisés, l’utilisation de codec à plus haut taux de compression signifiera une économie de la bande passante.

Pour avoir un aperçu de la bande passante requise pour chaque type de codec, essayez l’outil suivant :

http://www.asteriskguru.com/tools/bandwidth_calculator.php

Calculateur Codec

Lors du calcul de la bande passante d’un codec, on doit tenir compte du nombre de canaux utilisés, par exemple 2 canaux à 64 Kpbs chacun (G.711), du flux RTP, des datagrames UDP, des paquets IP et des trames Ethernet qui sont ajoutées successivement les uns aux autres.

Ainsi l’utilisation du codec G.711 ayant un ratio théorique de 64 Kbps nous amène à un total de 87 Kbps en incluant les en-têtes additionnels RTP/UDP/IP/Ethernet. Par contre, si on utilise un codec G.729, nous passons d’un théorique 8 Kbps à un effectif de 31 Kbps. Si votre bande passante Internet est limitée, nul doute que vous voyez l’intérêt d’utiliser un codec à plus faible exigence sur le débit même si parfois l’on doit faire quelques compromis au niveau de la qualité sonore.

L’utilisation du codec G.729 peut exiger l’acquittement d’une licence, sauf si ce dernier est utilisé en mode Passerelle « Pass-thru ». Afin de rendre les choses plus claires, voici un exemple de ce que signifie le terme « Pass-thru ». L’utilisation de deux dispositifs téléphonique communiquant l’un vers l’autre et ayant un soutien intégré du codec G.729 n’aurait nul besoin qu’Asterisk transcode d’un format de codec à un autre. À l’opposé, un dispositif ne supportant que le codec G.711 et un autre ne supportant que G.729 auraient besoin qu’Asterisk transcode d’un format à l’autre et ainsi ne serait pas en mode « Pass-thru », et donc exigerait l’acquittement d’une licence pour l’utilisation du codec G.729.

Installation

Si vous n’avez pas la licence pour le codec G.729 et qu’avant d’acheter le codec G.729, vous souhaitiez essayer une version d’évaluation gratuite, alors suivez la démarche décrite ci-dessous.

Chose certaine, si votre serveur Asterisk est en Amérique du Nord, vous devriez acquitter les redevances aux détenteurs de brevets pour l’utilisation de leurs algorithmes sur les codecs G.729 et G.723.

Avant de télécharger et d’installer le module codec approprié pour la plate forme que vous utilisez, vous aurez besoin de vérifier le type de processeur sur lequel Asterisk s’exécute, afin d’obtenir le codec compatible à votre environnement physique.

Exécutez la ligne de commande suivante :

cat /proc/cpuinfo

À partir des informations obtenues, vous devez chercher spécifiquement le type d’unité de traitement (processeur) ainsi que ses options. Ce qui suit est un exemple du processeur que j’utilise.

Process: 0
vendor_id: GenuineIntel
cpu family: 6
model: 8
model name: Pentium III (Coppermine)
stepping: 3
cpu MHz: 648.110
cache size: 256 KB
fdiv_bug: no
hlt_bug: no
f00f_bug: no
coma_bug: no
fpu: yes
fpu_exception: yes
cpuid level: 2
wp: yes
flags: fpu vme de pse tsc msr pae mce cx8 mtrr pge mca
cmov pat pse36 mmx fxsr sse
bogomips: 1297.41

Nous pouvons voir en ce qui me concerne qu’il est question d’un processeur « Pentium III » et que ce dernier supporte l’option « sse ».

Ceci est donc l’information nécessaire dont nous avons besoin. Si vous ne voyez pas l’option « sse », alors le fichier dont vous aurez besoin doit comporter la mention de « non-sse ».

Nous pouvons donc télécharger les fichiers codec requis à partir du lien suivant : http://kvin.lv/pub/Linux/Asterisk/

Selon la version d’Asterisk utilisée, 1.2, 1.4, 1.6 ou 1.8, il faudra choisir le fichier « codec_g72x-ast??-???-glibc-pentium3.so » approprié.

Donc, à partir de ces informations, afin d’obtenir le codec G.729, nous choisirons le fichier « codec_g729-ast14-gcc4-glibc-pentium3.so ». Il en va de même si nous voulons obtenir le codec G.723, nous choisirons le fichier « G723-ast14-gcc4-glibc-pentium3.so ».

Vous remarquerez que la mention « gcc4 » dans le nom de fichier représente la méthode dont le module a été compilé. Dans la majorité des cas, ce sera le choix le plus commun, mais si vous désirez une version différente, c’est possible.

Nous sommes maintenant prêts à commencer l’installation des codecs. Exécutez les lignes de commandes suivantes selon les codecs et la version d’Asterisk requis :

cd /root
mkdir codec
cd codec
wget http://kvin.lv/pub/Linux/Asterisk/codec_g723-ast14-gcc4-glibc-pentium3.so
wget http://kvin.lv/pub/Linux/Asterisk/codec_g729-ast14-gcc4-glibc-pentium3.so
chmod 755 *
cp codec_g723-ast14-gcc4-glibc-pentium-m.so /usr/lib/asterisk/modules/codec_g723.so
cp codec_g729-ast14-gcc4-glibc-pentium-m.so /usr/lib/asterisk/modules/codec_g729.so

Pour le protocole IAX, ajoutez le codec G.729 dans la configuration en éditant le fichier « /etc/asterisk/iax_general_additional.conf »

allow=g729

Pour le protocole SIP, ajoutez le codec G.729 dans la configuration en éditant le fichier « /etc/asterisk/sip_general_additional.conf »

allow=g729

Pour le codec G.723 ajustez la configuration en éditant le fichier « /etc/asterisk/codecs.conf »

[g723]
; 6.3Kbps stream, default
sendrate=63
; 5.3Kbps
;sendrate=53

C’est maintenant presque terminé, modifiez la définition de votre Trunk avec les paramètres suivants :

disallow=all
allow=g729g723&ulaw&alaw

Redémarrez Asterisk et le tout est complété.

/usr/sbin/asterisk -rx restart now

Afin de voir si effectivement les codecs sont actifs au niveau d’Asterisk, effectuez les commandes suivantes :

asterisk -rvvvvvv
core show translation

ou encore

asterisk -rvvvvvv
core show translation recalc 10

Références

G.729 and G.723.1 codecs x86 (and x86_64) Linux and FreeBSD binaries for Asterisk open source PBX
Asterisk Codecs
Les protocoles Internet
Modèle OSI
pixelstats trackingpixel]]>
http://www.tux89.com/telephonie/installation-de-codec-g-729/feed/ 2