Guide Asterisk 1.4 sur OpenWRT par PierreDavidOriol also available in english

<!> <!> Mise-à-jour pour Asterisk 1.8 : Asterisk18SurOpenWRT

1. Introduction

Exaspéré par les prix ridicules des lignes de téléphone résidentielles, j'ai décidé de me lancer dans l'aventure de la téléphonie IP (VoIP) afin de substantiellement réduire mes frais téléphoniques mensuels et d'avoir un meilleur contrôle sur le service. Pour ce faire, plusieurs solutions et configurations existent, et la quantité de sites Internet portant sur le sujet qui contiennent chacun un petit morceau d'explication rend la compréhension et l'installation de ce genre de solution plutôt complexe. Pour ma part, je compte utiliser mon propre serveur Asterisk et payer un frais mensuel pour me connecter à un serveur Asterisk d'un fournisseur de services de téléphonie (qui aura à sa charge de se connecter à un réseau de téléphonie conventionnel pour que je puisse appeler les gens qui ont encore des téléphones ordinaires).

J'ai donc écrit ce petit guide pour les personnes qui ont un peu de connaissances en informatique (je vais prendre pour acquis que vous avez déjà des connaissances en informatique, que vous avez lu un peu sur Asterisk, que vous savez comment jouer avec vos interfaces réseau pour les activer/désactiver sur votre OS préféré, que vous êtes un peu à l'aise à tapper des commandes dans une console GNU/Linux et surtout, que vous savez utiliser google). Voici donc le plan général du réseau VoIP dont nous allons discuter.

http://www.ouaibe.qc.ca/img/diagramme.png

2. Matériel

Pour utiliser une connexion VoIP vous êtes libres d'installer Asterisk sur n'importe quelle plateforme connectée à internet, que ce soit une installation GNU/Linux sur un ordinateur conventionnel ou sur un routeur sur lequel vous avez installé GNU/Linux ou même encore sous Windows (Je n'ai pas lu sur des installations sous OS X, mais j'imagine que c'est éventuellement réalisable). Pour ma part, je compte installer Asterisk sur un routeur sur lequel j'aurais préalablement installé OpenWRT qui est une distribution de de GNU/Linux prévue pour les routeurs (il est aussi possible d'installer Asterisk sur d'autres distributions de GNU/Linux pour routeur, notemment DD-WRT, X-WRT etc.). Le choix de cette plateforme est plus stratégique qu'autre chose, premièrement, je n'ai pas d'ordinateur qui roule 24/7 et deuxièment, en cas de panne électrique, si vous possédez un UPS (onduleur), il sera beaucoup plus facile d'alimenter un routeur que d'alimenter un ordinateur pendant une période de temps prolongée. OpenWRT ne supporte évidemment pas tous les routeurs de la même manière, il va s'en dire que les fabriquants ne sont pas vraiment joyeux à l'idée qu'on n'utilise pas leur logiciel par défaut donc les routeurs les plus récents ont tendance à avoir des spécifications moins bonnes en terme d'espace disque. Qu'à cela ne tienne, je choisirai un routeur qui a beaucoup de RAM, et relativement suffisamment d'espace disque, ainsi qu'un ou deux ports USB si jamais je venais à manquer d'espace sur le routeur. Vous pouvez consulter la liste du matériel supporté (ou non) par OpenWRT à cet endroit: http://wiki.openwrt.org/TableOfHardware

Mon choix se portera donc sur le modèle ASUS WL-500G Premium (routeur A) dû à son historique relativement bien documentée, à sa quantité de mémoire et d'espace disque plus substantielle et à ses deux ports USB 2.0 qui me permettront d'obtenir plus de stockage (messages téléphoniques etc...). Afin de connecter mes téléphones de maison standard à un réseau VoIP je vais aussi me procurer un adaptateur pour téléphone analogue (ATA) que je brancherai dans mon routeur principal et qui me permettra d'envoyer des commandes (des numéros de téléphones etc.) au routeur A. Pour cet adaptateur, je choisirai le modèle SPA2102 de Linksys (rebranded d'une autre marque Sipura) qui me permet d'obtenir 2 connexions RJ11 pour téléphones standard. Je pourrai toujours aussi, par la suite, utiliser des téléphones IP directement connectés à mon réseau sans fil, ou même des Softphones (téléphone logiciel) installés sur une des machines connectée au même réseau. Je vais aussi évidemment obtenir une carte mémoire relativement petite (physiquement), afin qu'elle ne soit pas trop gênante en arrière du routeur A. Attention, OpenWRT ne supporte pas les cartes SD à travers un lecteur de cartes avec un port USB. Il est donc important de se procurer une clé conventionnelle pour qu'il soit possible de la "mounter".

2.1. Note sur le Asus wl-500gP v1

11:11 < ouaibe> parcequ'on est 3 à avoir eu des chargeurs qui sautent, et bcp plus sur le web.
11:13 < bgm> quel chargeur?
11:13 < ouaibe> un 2.5A 5V
11:15 < ouaibe> cherches pour ça sur ebay: JTA0302B, JTA0302E, JTA0302E-E
11:15 < ouaibe> c'est le modèle du chargeur D-Link qui fait la job
11:15 < ouaibe> ya pas vraiment d'autre alternative parceque ya un fort ampérage pour la petite taille 
11:15 < bgm> ça coûte combien?
11:15 < ouaibe> 9$ shipped
11:16 < ouaibe> de Hong Kong

c.f.

3. Mise à jour du SPA2102

Une fois le matériel reçu, j'ai commencé par mettre à jour l'ATA. Pour ce faire, j'ai utilisé un ordinateur Windows XP car un exécutable était fourni sur le site de Cisco. Pour mettre à jour l'ATA, il a été plus facile pour moi de me connecter de manière standard à celui-ci, tel qu'indiqué dans le manuel: mon ordinateur branché au port Ethernet de l'ATA, et le modem DSL branché au port Internet de l'ATA, celui-ci m'a assigné un IP par DHCP et j'ai pu utiliser l'exécutable upg-spa2102-5-1-12.exe pour envoyer la nouvelle version du firmware spa2102-5-1-12.bin.

Cette étape est aussi réalisable sous GNU/Linux mais est un petit peu plus compliquée, il faut que le SPA2102 ait accès au web, et que vous envoyez le fichier .bin sur un serveur web quelconque auquel le SPA2102 a accès. Ensuite, avec l'adresse du fichier .bin en main: http://<SERVEUR_HTTP>/spa2102-5-1-12.bin, dirigez-vous dans la partie Voice->Provisioning de l'interface web du SPA2102 pour modifier les deux champs suivants: Upgrade Enable: yes et Upgrade Rule:http://<SERVEUR_HTTP>/spa2102-5-1-12.bin

http://www.ouaibe.qc.ca/img/1.jpg

Puis enregistrez la configuration, et le SPA2102 ira mettre à jour automatiquement votre firmware à un moment donné dans l'heure qui suit.

4. Configuration du SPA2102

Une fois la mise à jour effectuée ne déconnectez pas l'ATA tout de suite, profitez de votre accès à celui-ci pour le configurer un petit peu. Connectez-vous donc à votre ATA en utilisant l'IP de celui-ci (c'est votre serveur DHCP courant) ainsi que la page d'accueil pour obtenir un chemin complet du genre http://192.168.XXX.XXX/admin/advanced

<!> Attention, l'interface web du SPA-2102 est tellement mal faite que si vous n'indiquez pas de chemin complet (incluant /admin/advanced) après l'IP, même une fois avoir mis un mot de passe il vous refusera systématiquement l'accès.

L'interface n'est pas vraiment plaisante, mais il y a quelques options qu'il vaut mieux modifier.

- Assurez vous d'être en mode admin en haut à droite de l'interface, et d'avoir choisi le mode advanced

http://www.ouaibe.qc.ca/img/2.jpg

- Dans le menu Routeur->Wan Setup assurez-vous d'avoir les options suivantes:

Ceci vous permettra de vous connecter à l'ATA à partir d'un ordinateur sur le même réseau.

- Dans le menu Voice->System (woah, c'est tellement user-friendly) mettez un mot de passe pour contrôler l'accès à l'interface web

Le reste des options de l'ATA je n'y ai pas touché, c'est un peu épeurant.

5. Quelle version d'OpenWRT ?

J'ai pour ma part choisi d'utiliser la version Whiterussian 0.9 car réputée plus stable, mais j'aurais pu choisir d'utiliser la version Kamikaze 7.09, plus récente mais avec potentiellement plus de bugs.

<!> ATTENTION, depuis la rédaction de cet article, les choses ont changé: Kamikaze 8.09.1 est maintenant la version de référence d'OpenWRT, le référentiel de Hans Zandbelt pour les sources d'Asterisk a été supprimé du web (car selon lui il est obsolète ...) et X-WRT a été pas mal complété pour fonctionner avec Kamikaze (les fichiers de configurations remplacent les variables du NVRAM. Kamikaze 8.09 a également une nouvelle interface web qui rend X-WRT quelque peu obsolète. Astérisk 1.6 est maintenant packagé dans les sources officielles de Kamikaze. Il est donc possible de suivre ce guide avec Kamikaze mais avec beaucoup d'adaptations, et dans le cas de l'utilisation d'astérisk 1.6, il est possible que les configurations et les macros ne soient plus fonctionnelles.

Il vous faut donc récupérer le fichier d'installation (.trx) pour le chip du routeur, pour le routeur A, il me faut le fichier openwrt-brcm-2.4-squashfs.trx disponible sur le site d'OpenWRT: http://downloads.openwrt.org/whiterussian/0.9/default/

Si vous voulez installer Kamikaze à la place, libre à vous de prendre la dernière version “stable”, il vous faut néamoins le fichier d'installation, qui pour moi était disponible à cet endroit: http://downloads.openwrt.org/kamikaze/8.09.1/brcm-2.4/openwrt-brcm-2.4-squashfs.trx

Je sais qu'il est possible d'utiliser le firmware à cet endroit pour le routeur A: http://downloads.openwrt.org/kamikaze/7.09/brcm47xx-2.6/

pour avoir un noyau plus à jour (2.6 au lieu de 2.4) mais aucun driver open source n'est disponible pour la carte réseau Broadcom du WL-500Gp v1. Si vous avez changé votre carte réseau pour une Atheros, le noyeau 2.6 fonctionnera alors pour vous.

Il y a aussi d'autres endroits où récupérer les fichiers .trx et les modules que vous pourrez installer par la suite dans OpenWRT, mais nous aurons l'occasion d'en parler ci-bas.

Le reste des instructions de ce guide concerne donc plus Whiterussian.

6. Installation d'OpenWRT

Une fois l'ATA mis à jour et configuré, débranchez-le et branchez le routeur A à la place, en connectant votre modem au port WAN de celui-ci, et votre ordinateur au port LAN1 de celui-ci, votre accès y sera plus facile.

Vérifiez que vous pouvez vous y connecter (réactivez votre connexion réseau), par défaut l'IP est 192.168.1.1 et le login est admin/admin. Toutes les méthodes pour installer OpenWRT sont listées dans une page très pratique qui porte sur le routeur A, à cet endroit: http://wiki.openwrt.org/OpenWrtDocs/Hardware/Asus/WL500GP

Il n'est malheureusement pas possible à ce jour de mettre à jour le routeur par son interface web de défaut, il faut donc utiliser une autre méthode listée dans cette page.

<!> Je vous conseille de suivre l'étape de “Backup” dans cette même page avant de faire quoi que ce soit pour avoir une image de sauvegarde du routeur par défaut (vous aurez besoin d'une clé USB).

Dans la section Installation, ils vous font part du fait que si vous êtes sous Windows il vous sera préférable d'installer OpenWRT avec l'utilitaire Firmware Restoration d'ASUS, qui est installé lorsque vous installez les Utilitaires sur le CD qui venait avec le routeur A. C'est donc ce que j'ai fait, premièrement j'ai mis le routeur en mode DIAG:

En mode DIAG, le routeur prend automatiquement l'adresse 192.168.1.1 et répond au ping, vous pouvez confirmer ceci avant de continuer.

Pour ceux qui utilisent GNU/Linux, suivez le reste étapes pour la mise à jour par TFTP sur le site ci-haut. Pour ceux qui sont sous Windows, le reste des étapes est le suivant:

<!> Il se peut que cette procédure prenne du temps, surtout, ne débranchez rien pendant ce temps (allez donc lire sur Asterisk 15 minutes).

Si l'outil de restoration ne trouve pas votre routeur A même si vous êtes certain qe celui-ci est en mode DIAG désactivez toutes vos interfaces réseau sauf celle utilisée pour vous connecter à celui-ci. Une fois la mise à jour terminée, vous êtes maintenant prêts à utiliser OpenWRT, vous pouvez vous connecter par telnet à 192.168.1.1 pour valider que tout fonctionne.

7. Configuration d'OpenWRT

Étant donné que vous êtes connectés par telnet, profitez-en pour changer le mot de passe root avec la commande suivante:

$passwd

Il est toujours préférable de se connecter au routeur, non pas par telnet, mais par SSH et de désactiver le telnet activé par défaut. Sous Windows, pour vous connecter par SSH, utilisez putty comme client (google). Connectez-vous par SSH en utilisant root comme login, et le mot de passe appliqué ci-haut, puis allez dans le répertoire des programmes lancés automatiquement démarrage pour désactiver le démarrage automatique de telnet:

$cd /etc/init.d/
$chmod a-x S50telnet

Vous devriez maintenant prendre 3 minutes pour lire le petit guide d'utilisation d'OpenWRT à cet endroit: http://wiki.openwrt.org/OpenWrtDocs/Using

Il vous donnera des informations générales utiles sur les commandes principales que vous aurez à utiliser.

8. Installation du support USB et utilisation comme disque supplémentaire

Comme 7Mo d'espace disque c'est un peu maigre, j'ai décidé d'installer une clé USB dans le routeur, pour pouvoir installer les packages que je veux sans me soucier de l'espace qui me reste, et parceque les clés USB sont rendues à un prix intéressant (15-20$ pour 2G à ce moment-ci). Pour ce faire, j'ai suivi deux procédures documentées sur le Wiki d'OpenWRT:

La première procédure consiste à installer les modules nécessaires pour supporter USB 1.1 et 2.0. http://wiki.openwrt.org/UsbStorageHowto

J'ai donc suivi les étapes 3.1, 3.2, 3.3, 3.4, j'ai dabord essayé sans installer les modules USB 1.1 mais ça ne fonctionnait pas vraiment alors je l'ai refait par la suite. Ensuite j'ai terminé avec l'étape 4.1 mais j'ai installé les modules pour supporter le fat et ceux pour ext2 et ext3 (à l'aide du petit tableau) <!> Il vous faut du support ext2 pour installer des modules ipkg sur la clé par la suite.

J'ai par la suite démonté le disque pour le formattage suivant.

$umount /dev/scsci/host0/bus0/target0/lun0/part1

La deuxième étape vous aidera à formatter votre lecteur en ext2 pour supporter l'installation de modules sur celui-ci: http://wiki.openwrt.org/PackagesOnExternalMediaHowTo

Évidemment il faut remplacer le chemin utilisé dans le guide /dev/mmc/disc0/part1 par le chemin réèl de votre clé USB, que vous avez du utiliser à l'étape précédente: /dev/scsi/host0/bus0/target0/lun0/part1.

Suivez les étapes 2, 3.1, 3.2, 4 et 5, et lisez l'étape 6 pour savoir comment installer avec ipkg sur votre périphérique USB. Si quequechose ne fonctionne pas, n'hésitez pas à recommencer, et à regarder ce que la commande

$dmesg

vous donne comme information sur la détection de votre clé USB.

9. Installation d'une meilleure interface web: webif2

OpenWRT est très plaisant pour le contrôle qu'il laisse à l'usager, mais n'est pas tellement verbeux au niveau de son interface web, je vous conseille donc d'installer l'interface web webif2 qui vient avec la distribution X-WRT. Il ne faut pas installer X-WRT au complet, simplement utiliser ipkg pour installer par URL l'interface webif2 distribuée avec X-WRT:

$ipkg install http://ftp.berlios.de/pub/xwrt/webif_latest_stable.ipk

Plus de détails sont disponibles sur leur site web: http://www.x-wrt.org

Suivant la configuration d'OpenWRT, vous pouvez maintenant brancher le routeur de manière normale dans votre réseau si besoin est.

Dans la section Network->Firewall de l'interface web webif2 il y a moyen de changer les paramètres de firewall du routeur. Vous pouvez aussi ajouter des lignes au fichier /etc/config/firewall (qui est (re)démarré par /etc/init.d/S35firewall) pour autoriser l'accès de l'externe au routeur:

accept:proto=tcp dport=22 # Autorise l'accès SSH
accept:proto=tcp dport=80 # Autorise l'accès Web (non-recommandé si accessible par Internet et pas seulement sur votre réseau)

10. Installation d'Asterisk

Pour installer Asterisk, c'est tout aussi simple, il vous suffit simplement d'avoir les bons packages dans votre repository (référentiel) de packages. Malheureusement, les packages par defaut d'OpenWRT Whiterussian ne sont pas à jour (version 1.0.10 d'Asterisk), il vous faudra alors utiliser un autre référentiel de packages afin d'obtenir la version la plus à jour.

<!> ATTENTION, depuis la rédaction de cet article, les choses ont changé, Kamikaze est maintenant la version de référence d'OpenWRT, le référentiel de Hans Zandbelt pour les sources d'Asterisk pour Whiterussian a été supprimé du web (car selon lui il est obsolète ...) et X-WRT a été pas mal complété pour fonctionner avec Kamikaze (les fichiers de configurations remplacent les variables du NVRAM. Je vous conseille donc de suivre ce guide, mais en utilisant Kamikaze à la place de Whiterussian.

Il y a un référentiel que vous pouvez facilement ajouter à votre fichier /etc/ipkg.conf Ajoutez une ligne :

Pour Whiterussian (maintenant inexistant):

src asterisk14 http://members.home.nl/hans.zandbelt/openwrt/whiterussian/packages/asterisk-1.4

Pour Kamikaze :

src asterisk14 http://members.home.nl/hans.zandbelt/openwrt/7.09/mipsel/packages/

puis appellez la commande

$ipkg update

pour mettre à jour la liste des packages disponibles.

Ensuite, simplement utiliser la commande d'installation suivante: (avec l'option -d sd pour installer sur la carte sd, voir le guide pour installer la carte SD comme disque de remplacement)

$ipkg install -d sd asterisk14

et Asterisk va s'installer tout seul avec ipkg et vous devriez être en mesure de le démarrer par la suite.

<!> Notez que sur Kamikaze, avec la version 5.6-1 du paquet, libncurses ne créé pas de liens autrepart que dans /mnt/sd/usr/lib lorsque vous utilisez l'option -d sd lors de l'installation avec ipkg. Asterisk ne pourra pas démarrer automatiquement après l'installation. Il faut tout d'abord effectuer les commandes suivantes :

$ln -s /mnt/sd/usr/lib/libncurses.so.5.6 /usr/lib/libncurses.so.5.6
$ln -s /usr/lib/libncurses.so.5.6 libncurses.so.5

Pour démarrer Asterisk, plusieurs options s'offrent à vous: Premièrement, vous pouvez utiliser le script de démarrage normal, prévu à cet effet, qui se situe dans le répertoire d'initialisation, soit /etc/init.d/asterisk si vous avez installé Asterisk directement sur le routeur, ou sinon /mnt/sd/etc/init.d/asterisk si vous avez installé Asterisk sur le lecteur monté dans /mnt/sd/.

Utilisez ce script de cette facon:

$/mnt/sd/etc/init.d/asterisk start

ou

$/mnt/sd/etc/init.d/asterisk stop

Vous pouvez aussi partir Asterisk plus simplement en tappant “asterisk” dans la console. Tous ces scripts lancent Asterisk et vous redonnent l'invite de commande, pour vous raccrocher au programme en arrière-plan, tappez

$asterisk -r

Pour obtenir beaucoup plus de verbosité, vous pouvez utiliser un niveau de verbosité élevé en combinant plusieurs options -v, pour obtenir quelquechose du genre:

$asterisk -rvvvvvvvvvvvvvvv

Si vous voulez partir Asterisk sans qu'il ne vous redonne l'invite de commande (recommandé pour des tests seulement) utilisez l'option -c.

Pour avoir Asterisk qui démarre automatiquement lorsque le routeur démarre, vous pouvez passer par l'interface web du routeur (webif2) et dans la section System->Startup dans le champ de texte présent, ajoutez la ligne suivante:

# place your own startup commands here
#
# REMEMBER: You *MUST* place an '&' after launching programs you
#   that are to continue running in the background.
#
#   i.e.
#   BAD:  upnpd
#   GOOD: upnpd &
#
# Failure to do this will result in the startup process halting
# on this file and the diagnostic light remaining on (at least
# for WRT54G(s) models).
#
/mnt/sd/etc/init.d/asterisk start&

Évidemment, adaptez le chemin en fonction de la localisation de votre script de démarrage...

11. Configuration d'Asterisk

La configuration d'Asterisk est la partie qui demande un petit peu de lecture avant, car il est utile de comprendre comment tous les fichiers de configuration s'emboîtent les uns dans les autres. Je vais ici vous expliquer comment configurer vos fichiers pour avoir un service téléphonique de base, mais je vais prendre pour acquis que vous comprenez déjà un peu asterisk et la syntaxe des fichiers, notamment extensions.conf.

Comme lecture, je vous conseille le livre d'oreilly: Asterisk, the future of telephony 2nd Edition, qui est licensié Creative Commons, et donc disponible sur internet facilement. (dans google utilisez le search suivant: “rapidshare.de asterisk”) les chapitres 1, 4 et 5 seront suffisant pour que vous compreniez la syntaxe des dialplans.

(...)

Comme vous avez du le lire, configurer un serveur Asterisk initialement, ne requiert que des modifications à 3 fichiers principaux, iax.conf, extensions.conf et sip.conf localisés dans /etc/asterisk ou /mnt/sd/etc/asterisk.

11.1. Modules

Dans notre cas, avec Asterisk sur OpenWRT embarqué, il ya un petit peu plus de configuration à faire, car les modules, listés dans modules.conf ne sont pas activés par défaut. Nous allons donc commencer par les activer. Dans modules.conf, commencez par vous assurer que les lignes suivantes sont décommentées (enlevez le “;”) et assurez vous de changer "noload" pour "load" lorsqu'applicable :

load => cdr_manager.so ; Asterisk Call Manager CDR Backend
load => chan_iax2.so ; Inter Asterisk eXchange (Ver 2)
load => chan_sip.so ; Session Initiation Protocol (SIP)
load => codec_gsm.so ; GSM/PCM16 (signed linear) Codec Translation
load => codec_ulaw.so ; Mu-law Coder/Decoder
load => format_wav.so ; Microsoft WAV format (8000hz Signed Line
load => app_dial.so ; Dialing Application
load => app_echo.so ; Simple Echo Application
load => app_lookupblacklist.so ; Look up Caller*ID name/number from black
load => app_macro.so ; Extension Macros
load => app_read.so ; Read Variable Application
load => app_setcallerid.so ; Set CallerID Application
load => app_setcidname.so ; Set CallerID Name
load => app_setcidnum.so ; Set CallerID Number
load => app_verbose.so ; Send verbose output
load => pbx_config.so ; Text Extension Configuration
load => func_callerid.so ; Caller ID related dialplan functions

Assurez-vous après qu'Asterisk redémarre correctement par la suite.

Vous pouvez aussi charger le module pour avoir les informations sur les appels entrants conservées:

load => cdr_csv.so ; Comma Separated Values CDR Backend

Il vous faudra configurer le fichier cdr.conf pour configurer la quantité et le format des informations conservées dans le fichier par défaut /mnt/sd/var/log/asterisk/cdr-csv/Master.csv.

11.2. Configuration IAX

Ensuite, nous allons configurer la connexion au fournisseur de services IAX, en configurant le fichier iax.conf pour enregistrer le routeur auprès du fournisseur, avec notre compte.

Dans iax.conf, remplacez le contenu par les lignes suivantes:

[general]
disallow=lpc10
allow=all
allow=ulaw
register => <NUMTELEPHONE>:<MOTDEPASSE_IAX>@<SERVEUR_IAX>
[<NUMTELEPHONE>]
type=user
context=<CONTEXTE_ENTRANT>

Remplacez <NUMTELEPHONE> par votre DID (votre numéro de téléphone), remplacez <MOTDEPASSE_IAX> par le mot de passe que votre fournisseur vous a donné, et remplacez <SERVEURIAX> par l'adresse du serveur IAX de votre fournisseur. Pour ce qui est de <CONTEXTE_ENTRANT>, ceci est le lien au fichier extensions.conf, qui va indiquer quel contexte exécuter lors d'un appel entrant.

11.3. Configuration dialplan

Passons justement au fichier extensions.conf, dans ce fichier là, remplacez le contenu par une section générale ainsi que le contexte que vous avez écrit dans iax.conf.

[general]
static=yes
writeprotect=no
canreinvite=no
[<CONTEXTE_ENTRANT>]
exten => <NUMTELEPHONE>,1,Ringing()
exten => <NUMTELEPHONE>,2,Dial(SIP/SPA2102)
exten => <NUMTELEPHONE>,3,Hangup;

Ceci donne le chemin d'exécution des fonctions à extensions.conf, lorsque le contexte <CONTEXTE_ENTRANT> activé.

11.4. Configuration clients SIP

Dans ce fichier à l'étape avec une priorité “2” nous avons appellé un client SIP se nommant SPA2102. Il faut donc configurer ce client dans le fichier sip.conf, et aussi configurer le SPA2102 pour qu'il voit le serveur Asterisk.

Ouvrez donc le fichier sip.conf pour y ajouter le client SIP, remplacez le contenu par:

[general]
context=default
port=5060
bindaddr=0.0.0.0
maxexpirey=3600
defaultexpirey=3600
notifymimetype=text/plain
rtptimeout=60
rtpholdtimeout=300
disallow=all
allow=ulaw
[SPA2102]
type=friend ; friend veut dire que vous permettez des appels entrants et sortant.
username=SPA2102 ; C'est plus facile si ceci est identique à ce qu'il y a entre les [ ]
secret=<MONTMOTDEPASSE_SIP>
host=dynamic ; vous pouvez aussi mettre un IP fixe de votre SPA ici mais dynamic fonctionne bien
disallow=all
allow=ulaw
dtmfmode=rfc2833
insecure=very
context=<CONTEXTE_SORTANT>

Rappellez-vous de <CONTEXTE_SORTANT> nous l'ajouterons dans extensions.conf tout à l'heure. Pour le moment, il faut configurer notre client physique SIP, c'est à dire le SPA pour qu'il s'authentifie à Asterisk en utilisant le contexte [SPA2102] et le mot de passe SIP.

Ouvrez donc l'interface Web du SPA2102 et naviguez à la section qui concerne la Ligne 1 ou la Ligne 2 (dépendant d'où est branché votre téléphone) Voice->Line 1 ou Voice->Line 2. Et configurez les options suivantes:

http://www.ouaibe.qc.ca/img/3.jpg

Dans la section Proxy et Outbound Proxy (quoique ce dernier ne soit pas forcément utile) entrez l'IP de votre serveur Asterisk, dans la section Display Name entrez l'identifiant de votre client auprès de votre serveur Asterisk (ce qui va être affiché lorsque vous listerez les clients connectés) , le User ID est le username= dans sip.conf, et le mot de passe est le <MONTMOTDEPASSE_SIP>.

*NOTE* EXPERT SEULEMENT, IGNOREZ POUR LE PREMIER ESSAI!
Il est possible de renforcer la sécurité du mot de passe en utilisant un handshake md5,
pour ce faire il faut remplacer la ligne:

secret=monmotdepasse

des usagers dont on souhaite protéger le mot de passe par

md5secret=edf1f0002eb2cc2196b63b75c1f35dca

Pour créer le hash md5 ci dessus, il faut la formule et commandes suivante:

echo -n "user:realm:secret" | md5sum 

ce qui donne dans notre exemple:
(le realm par défaut, si vous ne l'avez pas redéfini, étant "asterisk")

echo -n "SPA2102:asterisk:monmotdepasse" | md5sum<enter>
> edf1f0002eb2cc2196b63b75c1f35dca

Plus bas dans la page vous pouvez aussi choisir un codec différent, j'ai choisi

Puis cliquez sur le bouton “Submit All Changes”.

Pour voir quels clients sont connectés à votre serveur Asterisk, lorsque celui-ci est lancé et que vous y êtes raccrochés, vous pouvez utiliser la commande (CLI> Indique que vous êtes dans la console asterisk, raccroché avec la commande "asterisk -r")

CLI> sip show peers

Vous pourrez ainsi voir lesquels sont configurés dans sip.conf et lesquels sont vraiment “online” (enregistrés).

Mais pour le moment passons aux appels sortants, pour boucler la boucle. Dans sip.conf nous avions déjà configuré un contexte sortant <CONTEXTE_SORTANT>, il ne reste plus qu'à l'ajouter à extensions.conf, avec les règles qui conviennent.

Ajoutez-donc la section suivante à extensions.conf:

[<CONTEXTE_SORTANT>]
exten => _NXXNXXXXXX,1,Set(CALLERID(num)=<<NUMTELEPHONE>>)
exten => _NXXNXXXXXX,2,Dial(IAX2/<NUMTELEPHONE>:<MOTDEPASSE_IAX>@<SERVEUR_IAX>/${EXTEN})
exten => _NXXNXXXXXX,3,Congestion
exten => _1800NXXXXXX,1,Set(CALLERID(num)=<<NUMTELEPHONE>>)
exten => _1800NXXXXXX,2,Dial(IAX2/<NUMTELEPHONE>:<MOTDEPASSE_IAX>@<SERVEUR_IAX>/${EXTEN})
exten => _1800NXXXXXX,3,Congestion
exten => _1888NXXXXXX,1,Set(CALLERID(num)=<<NUMTELEPHONE>>)
exten => _1888NXXXXXX,2,Dial(IAX2/<NUMTELEPHONE>:<MOTDEPASSE_IAX>@<SERVEUR_IAX>/${EXTEN})
exten => _1888NXXXXXX,3,Congestion
exten => _1877NXXXXXX,1,Set(CALLERID(num)=<<NUMTELEPHONE>>)
exten => _1877NXXXXXX,2,Dial(IAX2/<NUMTELEPHONE>:<MOTDEPASSE_IAX>@<SERVEUR_IAX>/${EXTEN})
exten => _1877NXXXXXX,3,Congestion
exten => _1866NXXXXXX,1,Set(CALLERID(num)=<<NUMTELEPHONE>>)
exten => _1866NXXXXXX,2,Dial(IAX2/<NUMTELEPHONE>:<MOTDEPASSE_IAX>@<SERVEUR_IAX>/${EXTEN})
exten => _1866NXXXXXX,3,Congestion
exten => _1NXXNXXXXXX,1,Set(CALLERID(num)=<<NUMTELEPHONE>>)
exten => _1NXXNXXXXXX,2,Dial(IAX2/<NUMTELEPHONE>:<MOTDEPASSE_IAX>@<SERVEUR_IAX>/${EXTEN})
exten => _1NXXNXXXXXX,3,Congestion
exten => _911,1,Set(CALLERID(num)=<<NUMTELEPHONE>>)
exten => _911,2,Dial(IAX2/<NUMTELEPHONE>:<MOTDEPASSE_IAX>@<SERVEUR_IAX>/${EXTEN},30,r)
exten => _911,3,Congestion

En remplaçant <CONTEXTE_SORTANT>, <NUMTELEPHONE>, <MOTDEPASSE_IAX> et <SERVEUR_IAX> par les valeurs que vous avez décidé d'y assigner, notez que <NUMTELEPHONE> est entre double << >> car vous devez y inscrire quelquechose du genre

Set(CALLERID(num)=<123-456-7890>)

incluant les < >.

Voilà c'est tout pour recevoir et passer des appels, vous pouvez tester votre setup avec "asterisk -rvvvvvvvvvv" et regarder les appels entrer, et voir si des problèmes surviennent.

11.5. Boîte vocale

Pour la boîte vocale, vous avez trois fichiers à modifier, voicemail.conf pour la définir, et sip.conf pour associer la boîte à votre client SIP et extensions.conf pour pouvoir lire vos messages par le téléphone par la suite.

Dans voicemail.conf, allez vers la fin du fichier, dans la section [default], il y a déjà des exemples de boîte vocales définies, mais ajoutez-en une quand même, avec la ligne suivante:

<IDENTIFIANT_BV> =>  <MOTDEPASSE_BV>,<NOM_BV>,<COURRIEL>

Ici <IDENTIFIANT_BV> devient l'identifiant numérique de votre boîte (nous y référerons par <IDENTIFIANT_BV>@default par la suite), <MOTDEPASSE_BV> est le mot de passe numérique pour y accéder, <NOM_BV> est son nom, et <COURRIEL> est le courriel auquel il est possible d'envoyer les messages lorsque reçus dans votre boîte vocale (il vous faudra googler un peu pour configurer ceci). Il y a aussi d'autres options dans voicemail.conf comme la durée maximale du message, le nombre maximum de ceux-ci etc... Je vous laisse regarder tout ceci par vous-mêmes.

Maintenant, il s'agit d'associer un client SIP à cette boîte vocale là, dans le fichier sip.conf ajoutez:

mailbox=<IDENTIFIANT_BV>@default

dans la section [SPA2102]

Pour que la boîte vocale embarque lorsque ca ne répond pas, il faut modifier le fichier extensions.conf dans le <CONTEXTE_ENTRANT> .

[<CONTEXTE_ENTRANT>]
exten => <NUMTELEPHONE>,1,Ringing();
exten => <NUMTELEPHONE>,2,Dial(SIP/SPA2102,20);
; lignes ajoutées
exten => <NUMTELEPHONE>,3,Answer(300);
exten => <NUMTELEPHONE>,4,Playback(vm-nobodyavail);
exten => <NUMTELEPHONE>,5,VoiceMail(<IDENTIFIANT_BV>@default);
exten => <NUMTELEPHONE>,6,Hangup;

Ceci dit de faire sonner pour 20 secondes, puis de répondre et d'attendre 300ms, puis de jouer le message qui dit que personne n'est disponible pour répondre à l'appel, puis d'embarquer sur la boîte vocale. Le message téléphonique de boîte vocale est très rapide à démarrer, il se peut que le début soit tronqué lorsqu'il embarque, la ligne Answer(300) dans votre extensions.conf, règle ce problème.

Et pour pouvoir aller consulter votre boîte vocale par téléphone (de l'interne uniquement pour le moment, il est possible de le faire de l'externe mais il vous faudra googler), allez éditer le fichier extensions.conf pour y ajouter une extension de sortie, disons sur *98:

Dans le contexte <CONTEXTE_SORTANT>, ajoutez:

exten => *98,1,VoiceMailMain(<IDENTIFIANT_BV>@default)

Et voilà, vous devriez être en mesure de recevoir des messages et d'aller les consulter de l'interne en appuyant sur *98.

Pour consulter vos messages téléphoniques de l'externe, ajoutez simplement ceci à la fin de votre <CONTEXTE_ENTRANT>

; lignes ajoutées
exten => a,1,Set(LANGUAGE()=fr)
exten => a,2,VoicemailMain(<IDENTIFIANT_BV>@default)  ; Appeller le voicemail pour l'externe lorsque tappe *

Ceci vous permettra de rentrer dans le menu principal du voicemail lorsque vous appuyez sur la touche * du téléphone, lorsque le message d'accueil du voicemail sera entrain de jouer (attention, ne fonctionne pas lorsque le message vm-nobodyavail joue).

Vos messages téléphoniques sont disponibles en format .wav dans le répertoire de votre boîte vocale, à savoir: /mnt/sd/var/spool/asterisk/voicemail/default/<IDENTIFIANT_BV> Il se peut que vous ayez à créer des répertoires, notemment “tmp” dans ce répertoire-ci, vérifiez votre log (-vvvvvvvvvvv) d'asterisk pour voir s'il est capable de prendre des messages.

Par ailleurs, cette configuration aura pour effet de répondre avec un message d'accueil générique, qu'il vaut probablement mieux changer. Pour ce faire, il vous suffit de composer votre extension de boîte vocale à l'interne *98 puis de naviguer dans les options de la boîte vocale et d'enregistrer un message vocal d'accueil de non-disponibilité (ou de ligne occupée).

Par la suite, il vous faut changer votre fichier extensions.conf afin de spécifier quel message vous voulez que la boîte vocale utilise pour répondre, soit votre message d'indisponibilité ("u"), de ligne occupée ("b"), ou aucun message ("s"). Pour ce faire, précédez <IDENTIFIANT_BV> par la lettre appropriée comme ceci:

exten => <NUMTELEPHONE>,5,VoiceMail(u<IDENTIFIANT_BV>@default);

<!> Attention: sur certaines versions du module de boîte vocale, il se peut que vous ayez à réferer au message d'indisponibilité de la sorte:

exten => <NUMTELEPHONE>,5,VoiceMail(<IDENTIFIANT_BV>@default|u);

Si vous ne désirez pas entendre le message automatisé invitant les gens à laisser leur message à la suite de celui que vous avez enregistré, ajoutez l'option "s" à l'appel à la boîte vocale:

exten => <NUMTELEPHONE>,5,VoiceMail(<IDENTIFIANT_BV>@default|us);

<!> Les nouvelles versions d'Asterisk n'autorisent plus l'utilisation de la barre verticale (pipe) "|" pour séparer les arguments d'appels à une fonction, vous pourriez être obligés d'utiliser une virgule à la place.

exten => <NUMTELEPHONE>,5,VoiceMail(<IDENTIFIANT_BV>@default,us);

Aussi, n'hésitez pas à consulter les paramètres disponibles dans le fichier voicemail.conf il y en a de très pratiques, notemment ceux sur la longueur minimale et maximale des messages pouvant être laissés dans votre boîte vocale...

11.6. Appels en attente

Pour ce qui est des appels en attente, le SPA2102 vous fournit déjà la possibilité d'utiliser le bouton “flash” pour passer à l'appel en attente lorsque celui-ci arrive, comme avec un fournisseur de ligne standard, vous entendrez un beep dans le téléphone qui est décroché présentement.

11.7. Vive le français libre

Pour ce qui est des langues, par défaut Asterisk est en anglais, il est possible de le mettre en français en téléchargeant un pack de langues français, j'en ai trouvé un à cette place:

http://www.sineapps.com/down/FrenchPrompts.tar.gz

vous pouvez aussi trouver des packages français enregistrés professionnellement par digium à cet endroit: http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-fr-gsm-current.tar.gz

Pour l'installer, tappez ces commandes dans OpenWRT dans un répertoire temporaire:

$wget http://www.sineapps.com/down/FrenchPrompts.tar.gz
$tar -xvzf FrenchPrompts.tar.gz -C /mnt/sd/usr/lib/asterisk/sounds/

Ceci vous créera un répertoire fr/ dans /mnt/sd/usr/lib/asterisk/sounds/, changez de répertoire de destination au besoin.

Pour tout mettre en français, il vous faudra ajouter

language=fr

dans la section [general] de iax.conf,

country=fr

dans la section [general] de sip.conf, et changer le language lorsque vous faites *98 pour consulter votre boîte vocale à la fin du <CONTEXTE_SORTANT>

;ligne ajoutée
exten => *98,1,Set(LANGUAGE()=fr)
exten => *98,2,VoiceMailMain(<IDENTIFIANT_BV>@default) ; ligne déja présente

12. Quality of Service (QoS)

Une fois que tout ceci est installé, vous voudrez probablement encore pouvoir faire du téléchargement en même temps que vous téléphonez... Pour ce faire, il vous faut installer du QoS afin que votre routeur sache quelle priorité donner à vos packets provenant de votre connexion SIP. Pour installer un excellent script de QoS tel qu'inidiqué sur les forums d'OpenWRT http://forum.openwrt.org/viewtopic.php?id=4112 il vous suffit de tapper la commande suivante:

$ipkg install http://files.eschauzier.org/qos-re_1.05_all.ipk

Une fois ce script installé, il faut le faire démarrer automatiquement avec le démarrage de votre routeur, de la même manière que pour Asterisk vous pouvez passer par l'interface web webif2 et dans la section System->Startup, ajoutez le texte suivant dans le champ de texte disponible:

# place your own startup commands here
#
# REMEMBER: You *MUST* place an '&' after launching programs you
#   that are to continue running in the background.
#
#   i.e.
#   BAD:  upnpd
#   GOOD: upnpd &
#
# Failure to do this will result in the startup process halting
# on this file and the diagnostic light remaining on (at least
# for WRT54G(s) models).
#
/mnt/sd/etc/init.d/asterisk start&
/usr/bin/qos-start&

Vous voudrez le configurer en editant /etc/qos.conf le fichier devrait etre assez facile a comprendre, ce que nous voulons évidemment configurer dans notre cas sont les paramètres suivants:

Pour la bande maximale upload/download, modifiez les lignes suivantes, pour y inscrire 80-85% de la valeur maximale de votre bande passante MESURÉE (utilisez des sites comme http://www.speakeasy.net/speedtest ou http://www.speedtest.net pour avoir une mesure de votre bande passante). Ajoutez-donc ceci dans le fichier qos.conf :

# Download speed in kilobits per second
# Set 5% - 10% lower than *measured* line speed (set to zero to disable)
DOWNLOAD=4000 # Exemple avec 5MBIT DOWN, 4200 mesuré
# Upload speed in kilobits per second
# Set 5% - 10% lower than *measured* line speed (set to zero to disable)
UPLOAD=580 # Exemple avec 800KBIT UP, 600 mesuré

Une fois ceci fait, il ne vous reste plus qu'a déprioriser le trafic P2P, en filtrant par les ports:

# Destination ports for classifying 'bulk' traffic
TCP_BULK="1024: 21 12345 6881:6999"
UDP_BULK="1024:"

Puis il ne nous reste plus qu'à prioriser le trafic VOIP, à la fois par les ports, et par l'IP des machines connectées au serveur Asterisk:

# Destination ports for classifying 'express' traffic
TCP_EXPR="53 5060:5065 4569:4574"
UDP_EXPR="53 5060:5065 4569:4574"

et

IP_EXPR="192.168.1.3 192.168.1.2:5060"

Ici, 192.168.1.3 est une addresse fictive d'un SPA2102, et 192.168.1.2 serait une addresse fictive d'un ordinateur connecté par SIP au serveur Asterisk (softphone par exemple).

N'oubliez pas que ces diverses règles ont aussi des priorités entre elles, dans l'ordre à partir de la moins prioritaire:

## The order of the variables is (lowest precedence first): L7_BULK, L7_PRIO,
## L7_EXPR, IPP2P_BULK, IPP2P_PRIO, IPP2P_EXPR, TCP_BULK, UDP_BULK, TCP_PRIO,
## UDP_PRIO, TCP_EXPR, UDP_EXPR,  TOS_BULK, TOS_PRIO, TOS_EXPR, DSCP_BULK,
## DSCP_PRIO, DSCP_EXPR, IP_BULK, IP_PRIO, IP_EXPR

Pour démarer ou arreter le script , utiliser qos-start et qos-stop

Pour savoir si le QoS roule sur votre routeur, par ssh vous pouvez utiliser la commande:

$/usr/bin/qos-stat

13. Liste noire

Suivant les configurations que nous venons de faire avec Asterisk, nous avons à peu près les mêmes fonctionnalités qu'une ligne à de Bell a 40$/mois. Mais il y a bien plus de possibilités avec Asterisk, et une des plus utile est une liste noire pour les appels harcelants.

Pour obtenir une liste noire, il vous suffit de modifier votre fichier extensions.conf pour y ajouter un peu de programmation. Attention, ce code n'est compatible qu'avec Asterisk 1.4, les autres versions d'Asterisk ont des appels de fonctions légèrement différents.

Tout d'abord, nous allons modifier le <CONTEXTE_ENTRANT> pour y ajouter les fonctions nécessaires à la validation d'un numéro ajouté à la base de données de numéros bloqués:

[CONTEXTE_ENTRANT]
exten => <NUM_TELEPHONE>,1,Macro(stdexten) ; Appeller le macro ci-bas.
[macro-stdexten]
exten => s,1,LookupBlacklist(j) ; If CID blacklisted, goto 102
exten => s,2,Ringing()
exten => s,4,Set(DB(lastcaller/<NUM_TELEPHONE>)=${CALLERID(all)}); Noter le dernier appellant
exten => s,5,Dial(SIP/SPA2102,20)
exten => s-NOANSWER,1,Answer();
exten => s-NOANSWER,2,Wait(1);
exten => s-NOANSWER,3,VoiceMail(u<IDENTIFIANT_BV>@default);
exten => s-NOANSWER,4,Hangup;
; Blacklisted CallerID
exten => s,102,Goto(blacklisted,s,1)
exten => a,1,Set(LANGUAGE()=fr)
exten => a,2,VoicemailMain(<IDENTIFIANT_BV>@default)     ; Boîte vocale lorsque * pressé
[blacklisted]
exten => s,1,Answer
exten => s,2,Wait(1)
exten => s,3,Playback(nbdy-avail-to-take-call)
exten => s,4,Playback(carried-away-by-monkeys)
exten => s,5,Playback(lots-o-monkeys)
exten => s,6,Hangup

Vous avez sans doute remarqué que le <CONTEXTE_ENTRANT> fait maintenant référence à un macro (un sous-contexte dont le nom commence par macro- ) ceci nous permet de simplifier le code et d'éviter d'avoir à répéter plusieurs fois le numéro de téléphone sur chaque ligne, nous utiliserons à la place "s" comme extension dans notre macro (pour start).

Vous remarquerez aussi que la ligne Answer(300) à été modifiée pour un Answer() suivi d'un Wait(1), ceci a le même effet que précédemment.

La logique principale de ce code réside dans l'appel à la fonction LookupBlackList(j) qui cherche le numéro de l'appellant dans la base de données Asterisk, et si elle ne le trouve pas, elle saute à la priorité qui a 101 de plus que celle où elle était (ici on était à la priorité 1 (s,1,LookupBlackList(j)) et on va donc sauter à la priorité 102 (s,102,Goto(blacklisted,s,1)).

Par la suite, la priorité 102 fait un appel au contexte nommé "blacklisted" qui lui, se charge de répondre (de manière comique) que la personne n'est plus disponible. Pour pouvoir utiliser ces sons comiques, il se peut que vous ayez à installer des packages de son en plus, j'ai choisi d'installer celui-là en format GSM. http://ftp.digium.com/pub/telephony/sounds/asterisk-extra-sounds-en-gsm-current.tar.gz

Dans OpenWRT, positionnez vous dans un répertoire temporaire sur la clé USB et tappez:

wget http://ftp.digium.com/pub/telephony/sounds/asterisk-extra-sounds-en-gsm-current.tar.gz
tar -zxvf asterisk-extra-sounds-en-gsm-current.tar.gz -C /var/lib/asterisk/sounds

Puis redémarrez Asterisk.

Vous voudrez probablement pouvoir ajouter des numéros à la liste noire, il y a deux méthodes pour faire cela, tout d'abord, il est possible d'ajouter,consulter et supprimer des numéros en utilisant les commandes de base de données dans Asterisk, telles que:

CLI>database put blacklist 5145551234 1
Updated database successfully
CLI>database show blacklist
/blacklist/5145551234                             : 1
CLI>database del blacklist 5145551234
Database entry removed.

Ceci n'est par contre pas très sympathique, et donc il est préférable de pouvoir tapper une combinaison *XX pour pouvoir ajouter et supprimer des entrées dans la liste noire.

Nous allons donc créér des entrées dans le <CONTEXTE_SORTANT> pour pouvoir répondre aux touches tappées.

Attention, lorsque vous choissisez une combinaison *XX, le SPA2102 prend déjà en contrôle certaines de ces extensions, et ne vous avertit pas si vous en déclenchez une, si vous n'êtes pas certain que l'extension que vous choisissez est libre au niveau du SPA2102, naviguez dans son interface Voice->Regional, et supprimez celles désirées

http://www.ouaibe.qc.ca/img/4.jpg

Nous allons donc ajouter le code suivant dans le <CONTEXTE_SORTANT>

exten => *95,1,Goto(blacklist-add,s,1)
exten => *96,1,Goto(blacklist-remove,s,1)

Étant donné que ces deux extensions font référence à deux contextes non-existants, il nous faut les ajouter, toujours dans le fichier extensions.conf.

[blacklist-add]
exten => s,1,Playback(enter-num-blacklist)
exten => s,2,Set(TIMEOUT(digit)=5)
exten => s,3,Set(TIMEOUT(response)=30)
exten => _X.,1,Set(DB(blacklist/${EXTEN})=1) ; Ajoute le numéro à la liste noire
exten => _X.,2,SayDigits(${EXTEN})
exten => _X.,3,Playback(num-was-successfully)
exten => _X.,4,Playback(added)
exten => _X.,5,Playback(goodbye)
exten => _X.,6,Hangup
[blacklist-remove]
exten => s,1,Playback(entr-num-rmv-blklist)
exten => s,2,Set(TIMEOUT(digit)=5)
exten => s,3,Set(TIMEOUT(response)=30)
exten => _X.,1,Set(oldval=${DB_DELETE(blacklist/${EXTEN})}) ; Supprime le numéro de la liste noire
exten => _X.,2,SayDigits(${EXTEN})
exten => _X.,3,Playback(num-was-successfully)
exten => _X.,4,Playback(removed)
exten => _X.,5,Playback(goodbye)
exten => _X.,6,Hangup

Ce que ces extensions font, en gros, c'est vous demander un numéro, attendre soit 5 secondes après le dernier numéro tappé (ou 30 sans réponse) puis soit ajouter ou supprimer le numéro de la liste noire (dans la base de données) puis vous répeter le numéro ajouté ou supprimé avant de quitter.

Lorsque vous tapperez *95 de votre téléphone local, vous entrerez dans le menu d'ajout, et *96 vous permettra de supprimer un numéro mis sur la liste noire.

Dans le <CONTEXTE_ENTRANT> nous avions aussi noté temporairement le dernier appelant, vous pouvez le consulter par la base de données en tappant

CLI> database show lastcaller

ou vous pouvez modifier les extensions et vous rajouter un contexte pour l'ajouter automatiquement à la liste noire.

14. Suivi d'appel

La deuxième fonction sympathique est le suivi d'appel. Ici nous allons configurer extensions.conf pour avoir un suivi d'appel en absence, mais le terrain sera préparé pour avoir des multiples suivis d'appels différents pour chaque situation (occupé, plus de lignes libres, etc...) Premièrement, nous allons ajouter du code à notre macro-stdexten créée ci-haut.

[CONTEXTE_ENTRANT]
exten => <NUM_TELEPHONE>,1,Macro(stdexten) ; Appeller le macro ci-bas.
[macro-stdexten]
exten => s,1,LookupBlacklist(j) ; If CID blacklisted, goto 102
exten => s,2,Ringing()
exten => s,4,Set(DB(lastcaller/<NUM_TELEPHONE>)=${CALLERID(all)}); Noter le dernier appellant
exten => s,5,Dial(SIP/SPA2102,20)
; ***** lignes modifiées
exten => s,6,Goto(s-${DIALSTATUS},1)            ; Sauter à l'extension basé sur le statut de l'appel (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
exten => s-NOANSWER,1,GotoIf(${DB_EXISTS(CFNA/<IDENTIFIANT>)}?2:3)    ; Si la clé CFNA n'existe pas sauter à la priorité 3
exten => s-NOANSWER,2,Dial(Local/${DB_RESULT}@<CONTEXTE_SORTANT>/n)        ; Sinon faire suivre
exten => s-NOANSWER,3,Answer();
exten => s-NOANSWER,4,Wait(1);
exten => s-NOANSWER,5,VoiceMail(u<IDENTIFIANT_BV>@default);
exten => s-NOANSWER,6,Hangup;
exten => s-NOANSWER,7,Goto(s,4)                 ; Si # appuyé retourner à l'étape 4.
exten => _s-.,1,Goto(s-NOANSWER,1)              ; Tout ce qui n'est pas s-NOANSWER sera traité comme s-NOANSWER
; ***** fin lignes modifiées
; Blacklisted CallerID
exten => s,102,Goto(blacklisted,s,1)
exten => a,1,Set(LANGUAGE()=fr)
exten => a,2,VoicemailMain(<IDENTIFIANT_BV>@default)     ; Boîte vocale lorsque * pressé

Ce code va essayer de récupérer un numéro de téléphone dans la base de données avec le nom CFNA/<IDENTIFIANT> (vous pouvez choisir le même numéro que votre <IDENTIFIANT_BV> si vous voulez), si il le trouve, il va alors faire un appel Local dans le <CONTEXTE_SORTANT>, sinon il va simplement vous envoyer vers votre répondeur.

Pour que ce système fonctionne, il vous faut donc ajouter une clé dans la base de données pour avoir le numéro ou faire suivre les appels en cas d'absence. Vous pourriez le faire avec le client asterisk et les commandes "db put CFNA/<IDENTIFIANT> <NUMERO_SUIVI>", mais nous allons configurer des menus sur des extensions *XX pour plus de facilité d'utilisation.

Tout d'abord, il nous faut rajouter ces extensions *XX dans le <CONTEXTE_SORTANT>, mais attention, je vais en choisir qui sont en conflit avec le SPA2102, il me faut donc les supprimer dans celui-ci, tel qu'indiqué au chapitre 13 (notamment *72 et *73).

; Mettre un numero au call forward
exten => *72,1,Goto(callfwd-add,s,1)
; Effacer le call forward
exten => *73,1,Set(temp=${DB_DELETE(CFNA/<IDENTIFIANT>)}) ; Effacer la clé CFNA/<IDENTIFIANT> dans la BD
exten => *73,2,Playback(call-fwd-no-ans)
exten => *73,3,Playback(has-been-cleared)
exten => *73,4,Hangup
; Obtenir le numéro présentement au call forward
exten => *75,1,Playback(call-fwd-no-ans)
exten => *75,2,GotoIf(${DB_EXISTS(CFNA/<IDENTIFIANT>)}?3:6)  ; Récupérer la clé CFNA/<IDENTIFIANT> dans la BD
exten => *75,3,Playback(is-set-to)
exten => *75,4,SayDigits(${DB_RESULT})
exten => *75,5,Hangup
exten => *75,6,Playback(is-not-set)
exten => *75,7,Hangup

Vous remarquerez que l'extension *72 appelle un contexte qui n'existe pas encore dans mon fichier extensions.conf, je vais donc le créér sur le champ.

[callfwd-add]
exten => s,1,Playback(please-enter-the)
exten => s,2,Playback(call-forwarding)
exten => s,3,Playback(telephone-number)
exten => s,4,Set(TIMEOUT(digit)=5)
exten => s,5,Set(TIMEOUT(response)=30)
exten => _X.,1,Set(DB(CFNA/<IDENTIFIANT>)=${EXTEN})
exten => _X.,2,Playback(call-forwarding)
exten => _X.,3,Playback(has-been-set-to)
exten => _X.,4,SayDigits(${EXTEN})
exten => _X.,5,Playback(goodbye)
exten => _X.,6,Hangup

J'aurais aussi pu le mettre comme les autres directement sous l'extension, mais il était plus long et ça permet de montrer plus de manières de fonctionner.

15. Date et heure

Une fois que tout ceci sera installé, vous remarquerez probablement que l'heure et la date de votre routeur ne sont pas les bonnes. Ceci peut s'ajuster manuellement mais devient très vite problématique si jamais vous venez à manquer d'électricité...

Il existe une solution relativement facile qui consiste à installer un client ntp sur votre machine.

Il y a différentes façons de le faire: vous pouvez simplement installer le package ntpclient à l'aide de la commande suivante:

ipkg install ntpclient

Ou alors, vous pouvez installer le client dans webif^2 dans l'onglet System->Settings en cliquant sur le bouton disponible en dessous de la ligne NTP Server; ceci a le même effet que la ligne de commande ci-haut.

Si l'installation crée le script de démarrage du client ntp /etc/init.d/S55ntpclient modifiez celui-ci pour qu'il ressemble à ceci:

# Fermer le ntpclient existant
/usr/bin/killall ntpclient
# Démarrer le client ntp et synchroniser de nouveau
/usr/sbin/ntpclient -l -h <IP_SERVEUR_NTP> -c 1 -s &

Sinon (si aucun script n'est créé par l'installation du package ntpclient), modifiez le champ de texte dans l'interface webif^2, dans l'onglet System->Startup.

Ajoutez-y:

/usr/bin/killall ntpclient
/usr/sbin/ntpclient -l -h <IP_SERVEUR_NTP> -c 1 -s &

<!> Remplacez la valeur <IP_SERVEUR_NTP> par une addresse IP de serveur NTP que vous récupérez sur http://www.pool.ntp.org/: choisissez votre zone, puis choisissez un des serveurs de la liste fournie, vérifiez que vous arrivez à le pinger.

Vous pouvez redémarrer votre routeur par la suite pour vérifier que l'heure et la date sont bien les bonnes.

Plus de détails sur http://martybugs.net/wireless/openwrt/timesync.cgi.

16. Et après ?

Asterisk vous permet vraiment de faire ce que vous voulez avec votre téléphone, il y a une multitude de sites internet qui expliquent comment implémenter une feature X ou Y (faire suivre les appels etc...). Il vous suffit simplement d'utiliser google un peu, et ces quelques sites de ressources:

Practical Asterisk 1.4: http://www.the-asterisk-book.com/unstable/

Tutorials and howto's for the asterisk PBX and voip in general: http://www.asteriskguru.com/

The VOIP Wiki - a reference guide to all things VOIP: http://www.voip-info.org/wiki/index.php

Asterisk Montreal Users Group: http://forums.amug.ca

OpenWrt Community wiki: http://wiki.openwrt.org/

Asterisk14SurOpenWRT (last edited 2011-02-01 07:31:35 by 75-119-242-42)