Comment mettre en place sa téléphonie grâce à Asterisk

Comment mettre en place sa téléphonie grâce à Asterisk
Le 25 juin, 2011 - 01:36 | Ulhume

De la ligne téléphonique d'une freebox (et sûrement des autres "box") à Skype en passant par les très nombreuses offres disponibles sur le Net, la VoIP (Voice over IP) est partout. Pris dans le contexte d'une architecture domestique ou d'entreprise, la VoIP (Voice over IP ou Voix sur IP) est un nouveau faisceau de service, comme la messagerie, qu'il est possible d'intégrer à un degré professionnel grâce à un outil libre souvent considéré, à tord, comme complexe, Asterisk.

Pour quoi faire ?

Comme toujours il est important avant de se lancer, de comprendre ce que peut apporter une intégration VoIP domestique ou professionnelle. Et pour cela, il est nécessaire d'avoir en tête ce que permet Asterisk.

Asterisk est un projet qui démarré il y a plus de 10 ans (1999) par Mark Spencer. Son objectif était alors de fournir à Linux un commutateur téléphonique complet et totalement libre. Aujourd’hui Asterisk est un PABX (Private Automatic Branch eXchange) d'une rare puissance et souplesse, capable de gérer la téléphonie analogique, mais surtout, et c'est ce qui nous intéresse, la voix sur IP.

La VoIP sur Asterisk passe entre autre par la prise en charge d'un protocole standard, ouvert et très largement utilisé, le SIP (Session Initiation Protocol). SIP qui est un protocole très proche d'HTTP qui n'est pas limité à la seule voix mais qui prend aussi en charge la vidéo et la messagerie instantanée.

D'un point de vue fonctionnalité, Asterisk permet tout ce que l'on peut attendre d'un PABX moderne, et plus particulièrement dans notre contexte :

  • La prise en charge de tous vos comptes SIP (et pas seulement, Skype et Gtalk aussi).
  • La gestion des postes téléphonique sur IP locaux. Il peut s'agir de téléphones physiques (tout en un ou via un adaptateur ATA - Analog Telephone Adapter), mais aussi logiciels (ou SoftPhone) comme Ekiga ou csipsimple.
  • La téléphonie de poste à poste en local, comme le permettent les téléphones DECT (mais sans vous bourrez la tête d'onde).
  • Un nombre illimité de boites vocales, et en français s'il vous plait !
  • La mise en attente et le transfert d'un appel, d'un poste local à l'autre.

Asterisk est un beau joujou, nous allons le voir, très simple à mettre en œuvre, mais comme toute chose cela demande du temps. Il faut donc bien se poser l'intérêt de cette technologie dans votre configuration. Si vous désirez que votre ligne Freebox (ou autre fournisseur SIP) fasse sonner tous les téléphone sur IP (ce qui est impossible avec freephonie sans PABX), si vous désirez irriguer en téléphonie une petite entreprise à moindre frais (les grosses préférerons sûrement passer par un prestataire plutôt que bricoler cela eux-même ;-), ou si, comme moi, vous êtes une famille d'indépendants qui reçoivent finalement des appels perso, comme pro, Asterisk est sans aucun doute une option à envisager sérieusement.

Installation d'asterisk

Avant de partir dans l'installation de paquets, sachez qu'il existe de nombreuses distribution Asterisk toutes faites (allez sur la page wikipedia d'asterisk pour en savoir plus), ainsi que des configurateur sensé être user-friendly (par exemple freePBX). Mais si vous êtes ici, c'est que vous aimez savoir ce qui se passe, en direct. Nous allons donc voir comment monter tout cela à la mano, sur une debian de base.

La première chose à faire est évidement d'installer Asterisk. Cela se fait sans douleur sur la grande majorité des distribution modernes, par exemple debian :

aptitude install asterisk asterisk-config asterisk-prompt-fr-proformatique
Installation d'asterisk

Ici nous avons installé l'outil, sa configuration, ainsi que, en prévision de la suite, une séries de messages en français de haute qualité pour la boite vocale.

Ceci fait, Asterisk est prêt à être lancé avec sa configuration par défaut dans le dossier /etc/asterisk. Nous allons cependant nous en garder pour faire d'abord un peu de paramétrage.

Communication de poste à poste

Paramétrage SIP général

Pour commencer nous n'allons pas faire aussi compliqué. Notre configuration va consister à déclarer deux softphones Ekiga et ainsi permettre de passer des appels internes de l'un à l'autre.

Pour cela nous allons créer la configuration de la partie SIP en écrasant /etc/asterisk/sip.conf avec la configuration suivante :

[general]
defaultexpirey=1800
dtmfmode=auto
qualify=yes
configuration de base pour le SIP

Dans cette section [general] sont placés les paramétrages communs à tous les éléments connectés au moteur SIP d'asterisk.

Ajout des deux postes

A la suite de sections, nous allons en ajouter deux nouvelles, correspondant aux deux téléphones :

[salon]
type=friend
username=salon
qualify=no
secret=salon_password
host=dynamic
context=maison
language=fr

[bureau]
type=friend
username=bureau
qualify=no
secret=bureau_password
host=dynamic
context=maison
language=fr
configuration du softphone

Bien évidement, vous pouvez remplacer salon|bureau par les noms de votre choix, de même pour xxx_password. Ces identifiants et mots de passe seront à reporter, ainsi que l'adresse IP de la machine sur laquelle tourne asterisk, dans la configuration du softphone. Le host est dynamique car on ne connaît pas à l'avance l'IP des téléphones (ce qui est faux dans mon cas, mais bon ;-). La variable language sera utilisé par la boîte vocale. Enfin notez le context=maison commun aux deux téléphones qui vont nous permettre de programmer les extensions.

Paramétrage des extensions

Les extensions d'Asterisk sont un peu le plan d'adressage des numéros composés en fonction du contexte. De manière grossière, il s'agit d'associer un motif de numéro de téléphone à une commande Asterisk. En réalité, il est possible d'aller très loin et de définir de véritables scripts (avec des fonctions, des goto, etc...).

Pour l'heure nous allons nous contenter de faire correspondre le numéro 11 à salon et 12 pour bureau. Cela se fait en écrasant le contenu de /etc/asterisk/extensions.conf par les informations suivantes :

[maison]
exten => 11,1,Dial(SIP/salon)
exten => 12,1,Dial(SIP/bureau)
Paramétrage du mode talkie-walkie

Nous avons ici déclaré deux extensions dans le contexte maison (celui là même que nous avons défini pour nos téléphones). Chaque extension commence par une série de chiffre à composer sur l'un des cadrant pour déclencher l'extension. Le second paramètre est une priorité car une extension peut être un véritable script composé de plusieurs lignes. Enfin le dernier paramètre est une macro Asterisk, ici Dial, qui va composer le numéro SIP d'un des deux téléphones.

Paramétrage du routeur

Ceci ne vaut évidement que si votre serveur est derrière un routeur NAT. Dans ce cas, pour qu'Asterisk puisse correctement fonctionner il est nécessaire de le configurer pour permettre la redirection du port 5060, en UDP, vers le port 5060 de la machine Asterisk sur votre réseau local.

Premier lancement d'Asterisk

Nous pouvons maintenant faire nos premiers tests. Pour cela, nous allons arrêter Asterisk qui a sûrement été lancé automatiquement lors de l'installations (/etc/init.d/asterisk stop), puis le relancer à la main en mode "console debug" par la commande asterisk -cvvv.

#/etc/init.d/asterisk stop
Stopping Asterisk PBX: asterisk.
#asterisk -cvvv
....
[Aug 17 13:39:32] NOTICE[13575]: chan_sip.c:18223 handle_response_peerpoke: Peer 'salon' is now Reachable. (108ms / 2000ms
[Aug 17 13:49:10] NOTICE[13575]: chan_sip.c:18223 handle_response_peerpoke: Peer 'bureau' is now Reachable. (108ms / 2000ms
Lancement d'asterisk

Ok asterisk est lancé en mode console. Il ne reste qu'à paramétrer les Ekiga's.

Paramétrage des softphones

Un softphone (ou téléphone SIP) est un terme générique désignant aussi bien une application SIP sur votre ordinateur (ex. ekiga) ou un terminal mobile (ex. android), qu'un téléphone physique sur IP ou encore un ATA (Analog Telephone Adapters) transformant un téléphone standard en téléphone sur IP. Pour ma part j'utilise deux ATA Linksys (PAP2T), un terminal Android avec le logiciel libre CSIPSimple et deux Ekiga sous Windows et sous Linux.

Pour paramétrer Ekiga, rien de plus simple. Lancez la bête, allez dans Édition → Comptes puis Comptes → Ajouter un compte SIP. Pour le Nom, mettez ce qui vous fait plaisir.

Registrar qui doit contenir l'adresse IP ou le nom de la machine sur laquelle est lancée Asterisk. Pour utilisateur et Identifiant d'authentification, utilisez la même valeur username qui nous avons saisi dans la configuration SIP d'asterisk pour ce poste. Et enfin le mot de passe provenant lui aussi de sip.conf Asterisk. Validez et normalement Ekiga devrait indiquer que le compte est en état Inscrit. Faire de même avec le second post.

Si Ekiga pose problème, une option utile est de le lancer en mode debuggage par la commande ekiga -d4. Cela devrait produire suffisamment de traces en console pour permettre de trouver la solution.

Lorsque le compte passe en état Inscrit, cela devrait provoquer du côté d'Asterisk un message du genre Peer 'salon' is now Reachable. (117ms / 2000ms). Lorsque les deux téléphones sont actifs, vous pouvez vérifier leur rattachement à asterisk en tapant la commande sip show peers

*CLI>#sip show peers
Name/username Host Dyn Nat ACL Port Status
salon/salon 192.168.154.11 D 5060 OK (48 ms)
bureau/bureau 192.168.154.22 D 5060 OK (108 ms)
2 sip peers [Monitored: 2 online, 0 offline Unmonitored: 0 online, 0 offline]
*CLI>#
</code>
Lancement d'asterisk

Maintenant le test, aller dans l'application SIP du téléphone salon et taper le numéro 12, ce qui doit faire sonner le second téléphone et permettre une communication entre les deux appareils. Dans la console Asterisk, nous voyons la trace de l'appel apparaître : Qui as dit qu'asterisk était compliqué ? Enfin si, c'est super compliqué, mais pour l'instant, il reste magnifiquement simple à mettre en œuvre.

Ajout d'un boîte vocale

L'ajout d'une boîte vocale n'est pas beaucoup plus compliqué que ce que nous venons de voir. Et lorsque je dis boîte vocale, j'entends le truc complet, avec accueil en français avec voix de qualité pro, interrogation à distance, etc.

Pour mettre cela en œuvre, prenons un exemple un peu idiot, à passer sur la messagerie vocale du propriétaire du second téléphone (bureau) s'il n'est pas joignable (soit il raccroche pendant la sonnerie, soit il ne répond pas, soit son softphone n'est pas connecté).

La première chose à faire est d'écraser un autre fichier de configuration, /etc/asterisk/voicemail.conf

[general]
format=wav49|gsm|wav
serveremail=salon-voicemail@mon-domaine.com
attach=yes
maxsilence=10
silencethreshold=128
maxlogins=3
sendvoicemail=yes

emaildateformat=%A, %d %B %Y a %H:%M:%S
emailsubject=[ASTERIX] Nouveau message dans la boite ${VM_MAILBOX}
emailbody=Bonjour ${VM_NAME},\\n\\n\\tLe numero ${VM_CALLERID} a tente de vous joindre sans succes le ${VM_DATE}.\\nCette personne vous a laisse un message de ${VM_DUR} secondes. Vous pouvez le consulter en appelant votre boite vocale.\\n\\n\\tBonne journee !\\n\\n\\t\\t\\t\\t--Asterix\\n
pagerfromstring=[Asterix]
pagersubject=Nouveau message vocal
pagerbody=Nouveau message de ${VM_DUR} secondes dans la boite ${VM_MAILBOX} laisse le ${VM_DATE} par ${VM_CALLERID}.
Configuration des boîtes vocales

Là aussi la configuration est assez lisible. Le format est celui des fichiers vocaux, la référence à l'adresse courriel sera utilisé par asterisk comme expéditeur des courriers vous indiquant qu'un nouveau message est arrivé (attach=yes permet, comme chez free, de recevoir le dit message attaché au courrier de notification). Ensuite vient un bloc permettant de personnaliser (ici franciser) les messages envoyés dans le courriel.

Continuons à modifier le fichier voicemail.conf pour créer notre boite vocale à proprement parler en ajoutant à la fin du fichier :

[default]
maison => 1234,Gaston,gaston@son-mail.com
Configuration des boîtes vocales

Ici nous définissons une boîte vocale appelé maison appartenant à gaston (le propriétaire de bureau), ayant pour code d'accès 1234 et pour adresse de notification gaston@son-mail.com.

Pour ce qui est de la langue de la boîte vocale, nous avons déjà fait le travail de francisation. C'est en effet pour cela que nous avons installer le paquet asterisk-prompt-fr-proformatique (les voix en français), et mis dans la définition de chaque téléphone une variable language=fr. Ce dernier point implique que la langue est spécifique à chaque téléphone. Nous pouvons donc faire une messagerie vocale en chinois sur salon, et français sur bureau. Très utile non ? ;-)

Nous alons maintenant ajouter quelques nouvelles extensions dans extensions.conf, à la suite de celles déjà saisies, dans la section maison :

[default]
exten => 11,1,Dial(SIP/salon)
exten => 12,1,Dial(SIP/bureau, 10)
exten => 12,2,Voicemail(maison)
exten => 600,1,VoiceMailMain(maison)
Configuration des boîtes vocales

La dernière extension permet d'accéder à la boîte vocale. Ainsi en tapant l'extension 600 sur un téléphone du groupe "maison", vous exécutez la commande VoiceMailMain(maison) qui est comprise par Asterisk comme "interrogation de la boîte vocale 'maison'". Vous pouvez, après avoir tapé le code que nous avons défini plus haut (1234), l'interroger, mais ou la configurer. Il s'agit exactement de la même que celle que vous avez coutume d'utiliser avec votre mobile.

L'autre extension que nous avons ajouté est plus intéressante. En réalité nous avons subrepticement modifié l'extension 12 de sorte à rajouter un paramètre 10 à la fonction Dial. 10 voulant dire 10 secondes, ce qui veut dire qu'Asterisk, lorsqu'un téléphone cherchera à composer le 12, fera sonner bureau pendant 10 secondes maximum. Ensuite c'est l'extension juste en dessous qui prend la main. Comme vous le constatez, ces deux extensions sont les mêmes (le 12), mais diffère le second chiffre qui représente la priorité (ici 2). Du coup c'est cette seconde ligne d'extension qui prend la main lorsque le correspondant sur bureau n'a pas décroché au bout de 10 secondes. Et l'action qui est induite est bien évidement un passage de mail à la boîte vocale "maison".

Pour tester, vous devez maintenant arrêter (Ctrl-C) puis relancer Asterisk et vérifier que vous pouvez bien atteindre le 600 de salon et bureau, puis si vous obtenez bien la boite vocale en laissant bureau sonner plus de 10 secondes.

Connexion vers extérieur

Connexion à un fournisseur SIP

Pour l'instant nous avons surtout réussi à fabriquer deux talkie-walkie de luxe. Il est temps de connecter tout cela au vrai monde. Free, à travers son service Freephonie, propose la téléphone SIP en standard à tous ses abonnés. Il est donc possible de connecter ce service à notre PBX. De même vous avez sur internet de très nombreux fournisseurs SIP plus ou moins sympa ou compétitifs. Comme j'ai mon activité professionnelle dans mon garage, et que le numéro de notre freebox est dédiée depuis longtemps à notre famille, j'ai eu besoin d'un autre numéro pour mon boulot. Plutôt que de faire tirer une ligne, j'ai simplement créé un compte chez un fournisseur SIP et le tour était joué. Après pour le choix du fournisseur, c'est question de goût, mais pour l'instant je suis très content d'IPPI qui propose gratuitement un numéro local (en 01, 02, etc..) et permet de recharge par Paypal son compte pour les appels sortants.

Bref, quel que soit votre fournisseur SIP, vous allez pouvoir le connecter à votre PBX. Du coup vous allez pouvoir avoir notre propre boîte vocale (en prenant soin de déconnecter celle du fournisseur), faire sonner tous les téléphones lorsque l'on est appelé de l'extérieur, et aussi passer jusqu'à des appels simultanés (2 pour freephonie, 3 sur IPPI, variable d'un fournisseur à l'autre).

La première chose à faire est d'ajouter un nouveau partenaire de jeu à sip.conf comme pour le téléphone. Mais à la différence du téléphone, il faut en plus ajouter un enregistrement du fournisseur dans la section general pour prendre en charge les appels entrant. Cela nous donne pour freephonie :

[general]
...
register => 09XXXXXX:freephonie_password@freephonie.net

[freephonie]
type=peer
insecure=port,invite
host=freephonie.net
username=09XXXXXXXX
secret=freephonie_password
context=from-freephonie
language=fr
configuration de freephonie

Ici il vous faut remplacer 09XXXXXX et freephonie_password respectivement pas l'identifiant et le mot de passe freephonie. Dans la section [general], ajoutez la commande register permettant à Asterisk de s'enregistrer sur FreePhonie. Ensuite nous créeons une section [freephonie] pour déclarer le nouveau partenaire. Le paramètre insecure est spécifique à se service. Ce paramétrage est le même pour IPPI mais il faudra peut-être le modifier pour un autre fournisseur. Enfin, point important, on définit un contexte from-freephonie qui nous servira pour de nouvelles extension spécifiques aux appels entrant de ce partenaire SIP.

Si vous n'avez pas défini de mot de passe, vous n'avez sûrement pas activé le SIP non plus. Il vous faut donc aller dans la console de votre freebox, section Téléphone puis Gestion de mon compte SIP. Vous y trouverez un rappel de votre identifiant/numéro de téléphone, la possibilité de définir un mot de passe une case à cocher pour activer le service SIP et enfin, un bouton radio à placer sur Rediriger les appels entrants vers le compte SIP de sorte à ce que les appels soient redirigés sur asterisk et non plus sur le téléphone branché à la freebox. Ceci fait, terminez en cliquant sur Enregistrer.

Nous allons maintenant rajouter deux nouvelles extensions.

[default]
exten => 11,1,Dial(SIP/salon)
exten => 12,1,Dial(SIP/bureau, 10)
exten => 12,2,Voicemail(maison)
exten => 600,1,VoiceMailMain(maison)
exten => _0.,1,Dial(SIP/freephonie/${EXTEN})

[from-freephonie]
exten => s,1,Dial(SIP/salon&SIP/bureau,10)
exten => s,2,Voicemail(maison)
Configuration des boîtes vocales

La première commune à tous les téléphones du groupe maison, va nous permettre de passer des appels en utilisant les tarifs de free. Comme vous le voyez, il s'agit d'une expression régulière indiquant "tous les numéros commençant par un 0". La variable ${EXTEN} permet de composer ce numéro en passant par le partenaire freephonie (défini dans sip.conf).

En réalité La variable EXTEN est ici la variable correspondant au numéro effectivement tapé. ${...} est quant à elle une fonction permettant d'en récupérer le contenu et qui peut prendre deux paramètres optionnels. Le début de la chaîne à retourner (ex. ${1234:3} renverra 34). Et la taille de la chaîne à retourner (${1234:3:1} renverra 3). Ainsi un SIP/ippi/33${EXTEN:1} renverra pour le numéro 0102030405 la chaîne /SIP/ippi/33102030405.

La deuxième extension, cette fois spécifique au contexte from-freephonie nous permet de gérer les appels entrant. Ici nous indiquons à Asterisk de faire sonner nos deux téléphones simultanément pendant 10 secondes. L'appel sera transféré au premier qui décrochera. Dans le cas contraire (priorité 2 sur la même extension), nous basculons sur la boite vocale.

Nous pouvons maintenant relancer asterisk et déjà vérifier que FreePhonie est bien connecté en utilisant la commande sip show peers, puis en tentant de s'appeler avec un portable par exemple.

Intégrer Skype

Certains se demande pourquoi je me casse la nénette avec Skype, un protocole propriétaire qui pour la téléphonie n'apporte pas grand chose (surtout pour le client GNU/Linux) par rapport à SIP. La raison est assez simple, tout le monde, et donc mes clients aussi, l'utilise. On peut se battre comme on veut, c'est comme essayer de leur venter les mérites de GNU/Linux, ça passe le temps mais le taux d'échec est élevé. Bref, Skype est ce qu'il est et il est là. La question est donc de voir comment l'intégrer à notre ensemble SIP.

Cette intégration à Asterisk est possible de trois manière. La première est de passer par le service Skype Connect, 4€95/mois pour un canal et un nuts... le prix du monopole des esprits j'imagine, sans moi, merci bien...

Autre possibilité, acheter une licence pour un module Skype qui s'intègre à Asterisk pour 66$ édité par la société Adium dont le fondateur n'est autre que l'auteur du projet Asterisk. Solution intéressante pour les entreprises, moins pour le particulier.

Et enfin, siptosis, une passerelle Skype vers SIP sous licence libre (GPL v3), SipToSis, multi-plateformes (java), pouvant être utilisée seule, ou intégrée à Asterisk.

Vous l'aurez compris, nous allons opter pour la troisième solution.

Tout commence par le téléchargement de l'archive au format zip que vous décompresserez dans un dossier siptosis où bon vous semble, suivi de l'installation d'un jre java. Ensuite arrive un petit peu de paramétrage pour faire causer cette passerelle avec Asterisk. Cela commence par la modification du fichier siptosis.cfg qu'il faut commencer par recopier du dossier samples vers la racine de l'application. Allez d'abord en ligne 270, et commentez tout le bloc "Sample AUTO Config with NO registration".

Ensuite descendez en ligne 329 pour trouver le bloc "Sample Asterisk registration example", décommentez et modifiez comme ceci :

host_port=5070
contact_url=sip:votre_identifiant_skype@127.0.0.1:5070
from_url="votre_identifiant_skype" <sip:siptosis@127.0.0.1:5060>
username=siptosis
passwd=un_mot_de_passe_pour_siptosis
realm=asterisk
expires=3600
do_register=yes
minregrenewtime=120
regfailretrytime=15  
Modification de siptosis.cfg pour Asterisk

Rien d'étonnant dans cette configuration, nous y définissons juste les deux URL de la passerelle ainsi qu'un identifiant et mot de passe qui sera utilisé par Asterisk pour s'y enregistrer (que vous devez évidement modifier pour votre installation).

Ensuite, créez à la racine un fichier SkypeToSipAuth.props (attention à la case) et collez-y les informations suivantes :

*,sip:1234@127.0.0.1:5060
SkypeToSipAuth.props

Alors ceci va permettre à la passerelle de contacter Asterisk pour les appels venant de Skype. Le principe est que tout appel entrant est redirigé sur l'extension (à définir) 1234 d'asterisk (vous pouvez mettre ici ce qui vous chante).

Étape suivante, une fois de plus modifier sip.conf pour ajouter notre nouveau partenaire.

[siptosis]
type=friend
username=siptosis
secret=un_mot_de_passe_pour_siptosis
context=from-skype
host=dynamic
dtmfmode=auto
canreinvite=no
qualify=yes
incominglimit=1
outgoinglimit=1
call-limit=1
busylevel=1
insecure=invite,port
language=fr
Ajout du partenaire SipToSis au SIP d'asterisk

Vous retrouvez ici peu ou prou la même chose que pour un partenaire SIP classique. Passons donc aux extensions

[default]
exten => 11,1,Dial(SIP/salon)
exten => 12,1,Dial(SIP/bureau, 10)
exten => 12,2,Voicemail(maison)
exten => 600,1,VoiceMailMain(maison)
exten => _0.,1,Dial(SIP/freephonie/${EXTEN})
exten => _*.,1,Dial(SIP/siptosis/${EXTEN:1})

[from-freephonie]
exten => s,1,Dial(SIP/salon&SIP/bureau,10)
exten => s,2,Voicemail(maison)


[from-skype]
exten => 1234,1,Dial(SIP/salon&SIP/bureau,10)
exten => 1234,2,Voicemail(maison)
Configuration des boîtes vocales

Pour le block from-skype, on commence à connaître. La seule astuce est ici l'utilisation de l'extension 1234 que l'on a programmé dans SkypeToSipAuth.props. Ceci nous permet donc de router les appels entrants (appels d'autres utilisateurs Skype, ou de lignes téléphone standard si vous avec un numéro SkypeIn) vers l'ensemble des softphones. La ligne suivante est la cerise sur le gâteau, à savoir une messagerie vocale Skype pour pas un rond :-) Car oui, Skype facture tout, la boite vocale, le numéro entrant, la passerelle SIP, et bien sur les appels sortant. Lorsque l'on voit ce que coute un opérateur SIP standard, j'ai du mal à comprendre que certaines sociétés soient passées au "tout skype", peut-être des prix, ou des SkypeNuts...

La dernière extension du block default est quant à elle un peu plus étrange. Il ne faut juste pas imaginer que le caractère * est autre chose que ce qu'il est, à savoir l'étoile du clavier téléphonie. En fait, le principe adopté par cette extension est que tous les "numéros" commençant par * sont automatiquement routé sur Skype. Notez la présence du :1 à la fin de la variable EXTENT, qui demande à Asterisk de supprimer 1 caractère avant de passer le numéro au partenaire SIP.

Ainsi, si vous tapez *echo123 sur l'un des téléphones, vous accéderez au service test de Skype. En tapant *identifiant_skype vous entrez en communication avec un utilisateur Skype. Et si vous avec de crédits SkypeOut, *numéro de téléphone permet d'aller sur le monde extérieur.

Maintenant que tout est en place, il ne reste plus qu'à redémarrer Astesisk pour que toutes nos modifications soient prises en compte, puis lancer SipToSis. A ce stade il y a plusieurs possibilités.

  • Si votre PBX est installé sur une machine disposant de Skype et d'un serveur X11 (ce qui est mon cas), vous devez d'abord lancer Skype comme à l'accoutumé, puis lancer le script SipToSis_linux. La passerelle va démarrer, puis se connecter à Skype via l'API. Skype va alors vous demande une autorisation pour cela, que vous allez accepter en prenant soin de cocher le fait de rendre ce choix permanent. Content, SipToSis va poursuivre son initialisation et se connecter à Asterisk, tout simplement.
  • Si l'ensemble de votre PBX est placé sur un serveur (sans service X11), et vous pouvez utiliser le script stsTrunk_linux qui va dans l'ordre lancer Xvfb (un faux serveur X en mémoire, qu'il vous faudra installer), Skype (qui va donc utiliser Xvfb croyant qu'il est dans un environnement X11 standard), et enfin SipToSts. Le problème est que le dernier utilise le second en passant API Skype, et que cette passerelle implique que vous acceptiez ce lien par... un boîte de dialogue. Pour contourner cela, connectez-vous une première fois sur votre serveur via SSH avec X11 forwarding activé, lancez Skype, puis SipToSis_linux, validez la boîte de dialogue (en oubliant pas de cocher), quittez Skype et arrêtez SipToSis. Le paramétrage de Skype doit maintenant être sauvegardé vous permettant de fonctionner avec stsTrunk_linux. Lorsque tout fonctionne, vous pouvez placer le lancement du trunk dans un script d'init pour que tout soit fait à chaque redémarrage.

Maintenant il ne reste plus qu'à tester, d'abord en composant *echo123 sur votre softphone. Si tout se passe bien (écoute, enregistrement, etc.) vous pouvez ouvrir une conversation avec echo123 en utilisant le client Skype et taper callme. Quelques secondes plus tard votre softphone devrait sonner pour vous permettre de prendre la communication.

Transfert d'appel

Reste un point très important dans notre histoire, la capacité à envoyer un appel reçu sur un poste A, sur un poste B. Ici aussi, une fois que l'on connaît le "truc" c'est extrêmement simple à mettre en œuvre (j'ai juste passé 2h à trouver le truc simple ;-)).

Le transfert d'appel se fait par la touche #. Cette touche envoie un signal DTMF qui va être interprété par Asterisk pour permettre la redirection sur un autre poste. La première chose est donc de s'assurer de la manière dont Asterisk intercepte ces codes. Pour cela il faut rajouter à notre sip.conf, section [general] la prise en compte de la norme RFC2833 (me demandez pas ce que c'est, c'est une norme qu'elle est sûrement très bien :-)

dtmfmode=rfc2833

Ensuite, il faut indiquer à chaque commande Dial de notre fichier extensions.conf que l'on accepte les transferts entrants t et sortants T. Par exemple pour un appel venant de freephonie, cela nous donne :

[from-freephonie]
exten => s,1,Dial(SIP/salon&SIP/bureau,10,tT)
exten => s,2,Voicemail(maison)

Et puis... et puis c'est tout. On relance Asterisk et on peut tester en s'appelant avec un portable. Une fois la communication établie, on presse # ce qui est reconnu par Asterisk d'une petite voix qui nous dit transfert. Ensuite il suffit de composer l'extension du poste cible (11, 12, etc.).

Conclusion

J'espère avoir au moins démontré qu'Asterisk est un monstre gentil dont il ne faut vraiment pas avoir peur. Personnellement la simplicité de mis en œuvre et la qualité du résultat obtenu m'a bluffé au regard de tout ce que cet outil sait faire. Chapeau bas donc pour ce très beau soft et bonne téléphonie à vous.

Vus : 6860
Publié par Artisan Numérique : 100