Asterisk (avec SIP) en 5 minutes

Asterisk c'est quoi/qui ?

Asterix, c'est un irrésistible gaulois dopé (comme les cyclistes) avec de la potion magique, mais ce billet ne parle pas de lui, ni de son ami Obélix ou du chien Idéfix.

Asterisk, c'est un IPBX (plus précisément un IP-PABX) libre et qui n'a aucun rapport avec les Caulois.

À vrai dire, Asterisk fonctionne quand même avec de la potion magique, parce qu'il fait tout ce que tu peux imaginer, pour un PABX.

Un IPBX, c'est quoi alors ?

Déjà, un IPBX, c'est un PABX qui est juste connecté sur le grand Internet (enfin normalement).

Et un PABX alors ?

J'y viens ! Un PABX, c'est un outil pour que nos Gaulois et Romains puissent mieux gérer leurs communications téléphoniques entre Rome et Lutèce.

Autrement dit : il faut être au moins deux (de toute façon, la téléphonie, seul, même pour Gollum, c'est pas génial).

Mais un PABX permet, par exemple, d'avoir plusieurs numéros de téléphone pour un seul téléphone, de faire une conférence, de décrocher pour toi pour faire répondeur, et plein plein d'autres choses. De toute façon, si tu en veux plus, tu ouvres Encarta Wikipédia et tu cherches PABX dedans.

Tout ça pour dire : Asterisk, c'est un IPBX.

Pourquoi je vais expliquer comment configurer Asterisk en 5 minutes ?

Simplement, parce que j'ai eu à mettre en place ça dans l'entreprise où je suis actuellement (Makina Corpus) et ce n'est absolument pas le cœur de métier de l'entreprise (mais vraiment pas).

En vérité, ça fonctionnait plus ou moins bien avec plusieurs téléphones connectés sur la base DECT du Modem/Routeur du FAI, mais forcément quand une personne utilisait la ligne, l'entreprise ne pouvait plus recevoir d'appels (quand tu es chez toi, ça permet de ne plus recevoir les appels de ton ex/grand-mère/père, mais en entreprise c'est un peu con de plus recevoir les appels de tes clients) ou quand la machin box de chez crétin.fr a des problèmes, tu ne peux que subir.

La téléphonie, ça marchera jamais !

Voilà, ceci était une introduction (oui, ça promet pour la suite, mais j'ai dit Asterisk en 5 minutes, j'ai jamais dit qu'il faudrait 5 minutes pour lire).
Pour suivre ce billet, ça sera beaucoup plus facile si tu as ça :

  • Au moins un compte SIP (pour info, Free et SFR ça marche gratuitement si tu es chez eux, les autres, je sais pas — il faut payer) ;
  • Un serveur avec Debian (enfin ça fonctionnera avec d'autre distribution, t'auras à adapter) ;
  • Des connaissances pour administrer une machine autrement qu'avec une interface graphique ;
  • Au moins un téléphone IP (ou un logiciel sur ton PC... enfin n'importe quoi capable de parler le SIP) ;
  • Un ami (mais si tu n'en as pas, tu peux t'arranger avec le service vocal des filles de ta région ou adopte un mec).

Ce que l'on va voir, pas forcément dans l'ordre : créer un compte SIP local, se connecter au compte SIP de ton fournisseur SIP, établir un plan de numérotation.

Installation

Avec debian, c'est relativement complexe, accroche-toi bien :
apt-get install asterisk asterisk-core-sounds-fr
Voilà, c'est installé.
Alors, tu liras peut-être qu'il vaut mieux prendre la dernière version à compiler depuis les sources, mais franchement, la version fournie par debian marche très bien.

Configuration

Les fichiers de configuration sont dans le dossier /etc/asterisk, il y en a plein mais on ne va en voir que 3.

sip.conf

C'est le nom du fichier, il doit y avoir plein de commentaires, et un exemple de configuration, le mieux c'est de le garder pour référence et de partir sur un fichier vide.

La syntaxe du fichier correspond à un fichier .ini, c'est-à-dire qu'il y a des sections déclarées avec un mot entre crochet et des options dans chaque section. 

Donc, on commence le fichier par la section general, qui correspond aux options standard, j'explique en-dessous les options essentielles qu'il faudra modifier.

[general]
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
; Compte chez cretin.fr
register => 0123456789:TheMotDePasse@cretin.fr
context=appel-entrant
language=fr
qualify=yes
nat=yes

La ligne register, ça permet de recevoir les appels, tu as le numéro de téléphone de cretin.fr, le mot de passe et l'adresse de ton fournisseur.

[forfait-cretin]
type=peer
context=cretin
secret=TheMotDePasse
username=0123456789
fromuser=0123456789
host=cretin.fr
domain=cretin.fr
nat=yes
insecure=invite

Ici, on définit une section pour pouvoir émettre des appels depuis le compte cretin.fr, au milieu des options pour le nom d'utilisateur, le mot de passe, etc. que je te laisse deviner (et adapter), il y a une option context qui est importante, mais on verra ça plus tard.

Ensuite, on définit un compte SIP qu'on utilisera en local avec notre téléphone VoIP.

[1000]
type=friend
context=phones
username=1000
secret=MotDePasse
callerid=Poste 0
host=dynamic
insecure=port
nat=yes

L'ordre des sections dans le fichier n'a pas d'importance, l'ordre des options dans chaque section n'a pas d'importance non plus.
Dans le cas présent, les mots de passe sont écrits en clair, c'est pour ça que le fichier ne doit être lisible que par l'utilisateur asterisk.
Il y a moyen de le mettre en md5 pour qu'ils ne circulent pas en clair, mais pour l'instant, ça sera plus simple et ça évitera des problèmes.

Voilà, si tu as bien fait tes copier-coller, tu as maintenant un compte SIP pour toi et le compte SIP de crétin.fr actif.
C'est bien mais comment recevoir (ou émettre) des appels ?
C'est là qu'arrive le :

Plan de numérotation

Il s'agit de deux fichiers de configuration :

  • extensions.ael
  • extensions.conf

Je commence par le fichier extensions.conf parce qu'il s'agit de l'ancien format, qui va disparaître un jour prochain. 

Donc tu mets ça dedans, je ne t'expliquerai pas pourquoi, pas la peine de me sortir tes yeux de chat potté, ça ne prendra pas avec moi.

[general]
static=yes
writeprotect=no
autofallthrough=yes
clearglobalvars=no
priorityjumping=no
[globals]
CONSOLE=Console/dsp

L'autre fichier, c'est extensions.ael et c'est lui va définir les règles pour recevoir et envoyer des appels.

Ce fichier n'est pas avec la syntaxe des autres fichiers, mais la syntaxe Asterisk Extensions Language.

On va commencer par définir un contexte pour recevoir les appels, le contexte correspond à ce qui est défini dans le fichier sip.conf

context appel-entrant {
	s => {
		Dial(SIP/1000,15);
		Hangup();
	};
};

Qu'est ce que ça signifie ? 

Simplement qu'un appel entrant, qui rentre dans ce contexte, va faire sonner le compte SIP numéro 1000 pendant 15 secondes, et s’il n'y a rien, on raccroche. 

Deuxième contexte du fichier sip.conf, cretin. Là, on va simplement lui dire d'inclure le contexte appel-entrant de cette manière.

context cretin {
includes {
	appel-entrant;
	};
};

À partir de là, tu peux déjà recevoir des appels, mais ça serait mieux de pouvoir en passer aussi.

Alors on va faire un contexte appel-sortant, tu peux l'appeler autrement.

Tu remarqueras aussi que ce contexte n'est pas défini dans le fichier sip.conf

context appel-sortant {
	327837 => {
		Answer();
		Set(COUNT=11);
		start:
			GotoIf($[${COUNT} > 0]?:goodbye);
			SayNumber(${COUNT});
			Set(COUNT=$[${COUNT} - 1]);
			Goto(start);
		goodbye:
			Hangup();
		};
	_X. => {
		Dial(SIP/${EXTEN}@forfait-cretin);
		Hangup();
		};
};

La première partie du fichier, c'est pour les gens désespérés qui n'ont pas d'amis, tu prends ton téléphone/client sip et tu appelles le numéro en question (327837).

Par contre, quand tu as des amis, ou que tu veux appeler les filles de ta région/adopte un mec, tu passes par la deuxième partie.

La première chose, c'est _X. qui définit pour quels numéros on exécute les actions qui suivent. Et dans le cas présent _X. ça signifie tous les numéro de téléphone.
On peut faire plus précis, par exemple, si tu ne veux pas pouvoir téléphoner vers les portables, il faudra mettre ça à la place : _[0-57-9]X. (pour plus de détail, voir la doc).
La commande Dial va ensuite passer un appel via le compte SIP en passant le numéro de téléphone que tu as composé avec le forfait défini dans le fichier sip.conf.

Fin

Voilà, une fois que tu as fait les modifications, tu n'as plus qu'à redémarrer le serveur Asterisk et configurer ton client SIP pour se connecter sur ton compte local.
Tu peux enfin passer et recevoir des appels.
Et là tu te dis « mais pourquoi il y a autant de fichier ?! ». Il y a deux raisons :

  1. Le Gaulois, c'est poilu, donc forcément ça laisse des poils partout.
  2. Asterisk est un outil puissant et, là, on n'utilise quasiment rien de ce qu'est capable de faire Asterisk.

Dans ce qu'il peut être pratique de rajouter, c'est une messagerie, ou la possibilité d'avoir des conférences, changer le répondeur quand il n'y a plus personne, avoir une musique d'attente (et tu n'es pas obligé d'avoir le printemps). 

Pour aller plus loin

Je recommande de lire le livre Asterisk The Future of Telephony qui est certes en anglais, mais très bien.

Haut de page