Dans la téléphonie traditionnelle nous nous sommes habitués, surtout en entreprise, à pouvoir superviser des lignes de ses collègues sur son poste. Ceci permet de savoir lorsqu’un collaborateur est en ligne afin de ne pas le déranger ou ne pas lui passer un appel. Cette gestion nécessite une communication entre le poste associé à une ligne particulière et le poste souhaitant connaître l’état de la ligne en question.
Sur un auto-commutateur traditionnel, les lignes sont analogiques ou numériques spécifiques, il est donc assez simple de connaître de façon centrale l’état d’un poste particulier. En revanche, dans la téléphonie sur IP, le modèle distribué ne facilite pas cette centralisation de l’information. Il est nécessaire de scruter l’ensemble des messages de signalisation afin de connaître l’état d’une ligne en particulier. D’autre part, il faut gérer des abonnements en provenance des postes qui souhaitent superviser des lignes afin de pouvoir leur rediriger des messages d’information. Tout ceci devant s’effectuer en temps réel et sans perte d’information.
Sur Asterisk
Sur Asterisk, il est nécessaire de construire le collecteur d’état des lignes à superviser et d’accepter les abonnements. On distingue bien ici les lignes à superviser (de type SIP/xxx) et les postes qui s’abonneront aux informations.
Dans extensions.conf, on crée spécifiquement pour la supervision des contextes (au moins un) avec la liste des lignes qui sont supervisées. La construction de plusieurs contextes différents permettra de sécuriser les informations visibles depuis les postes souscripteurs.
[blf-compta]exten => 11,hint,SIP/11
exten => 13,hint,SIP/13
[blf-boss]
exten => 11,hint,SIP/11
exten => 13,hint,SIP/13
exten => 14,hint,SIP/14
exten => 19,hint,SIP/19
Ici, deux contextes avec chacun des lignes supervisées. Il est nécessaire d’associer le numéro de la ligne (qui sera utilisée pour l’appel) avec l’identifiant SIP utilisé lors de l’enregistrement au niveau du poste. Attention ces deux informations peuvent dans certains cas ne pas être identiques.
Une fois ces contextes crées, la commande core show hints permettra de vérifier l’état de chaque ligne supervisée.
asterisk*CLI> core show hints
asterisk*CLI>
-= Registered Asterisk Dial Plan Hints =-
19@blf-boss : SIP/19 State:Unavailable Watchers 0
14@blf-boss : SIP/14 State:Idle Watchers 0
13@blf-boss : SIP/13 State:Idle Watchers 0
11@blf-boss : SIP/11 State:Idle Watchers 0
13@blf-compta : SIP/13 State:Idle Watchers 0
11@blf-compta : SIP/11 State:Idle Watchers 0
----------------
6 hints registered
Ici, la ligne 19 est utilisée sur un softphone qui n’est pas encore enregistré (car supervisant des lignes). Pour chaque identifiant, nous retrouvons la ligne SIP d’enregistrement, le status et le nombre de souscripteurs sur cette information.
Une des complexité de la voix sur IP réside dans la dématérialisation de tous les éléments physiques associés à une ligne (et autrefois souvent à un téléphone). Dans notre cas, sur un téléphone IP nous pouvons avoir plusieurs lignes et chacune peut être utilisée plusieurs fois. Au niveau d’Asterisk, il est indispensable de configurer, pour chaque ligne SIP le nombre maximal d’appel pouvant être gérés afin de connaître la limite au-delà de laquelle la ligne est considérée comme non disponible. Attention, ce paramètre n’est pas neutre sur le fonctionnement de la ligne, en effet, une fois la limite atteinte, aucun nouvel appel ne sera présenté. Dans les faits, le même message est envoyé aux souscripteurs lorsque toutes le nombre d’appel maximal est atteint sur une ligne que lorsqu’un appel est engagé (On the phone). Il est possible de distinguer ces deux événements en modifiant le code de chan_sip.c, mais l’usage est discutable à ce stade.
La configuration sip.conf devra contenir:
[general]
notifyringing=yes
notifyhold=no
La gestion du hold, n’est pas stable sur la version 1.4.4, certains évènements sont perdus, je vous conseille donc de le désactiver pour l’instant, ringing pourrait être supprimé afin de diminuer le nombre de message circulant sur le réseau, mais pour l’aspect visuel ce paramètre est assez démonstratif, on pourrait de plus imaginer une application permettant l’interception à l’aide de cette information.
Pour chaque ligne SIP, on ajoute:
call-limit=2
Ici, la ligne peut être jointe 2 fois, mais dès le premier appel, le statut sera modifié en ‘On the phone’.
Sur les lignes autorisées à effectuer de la supervision, il sera nécessaire de spécifier le contexte dans lequel les lignes supervisables sont présentes (blf-X dans notre exemple).
subscribecontext=blf-boss
Sur le poste
Chaque téléphone SIP du marché se configure différemment, il faudra donc se référer à la documentation spécifique des votres pour savoir d’une part s’ils supportent la notion de supervision de ligne, souvent appellée BLF et d’autre part comment ajouter des supervisions.
Sur le softphone X-Lite (à configurer en mode “Presence Agent”), on peut simplement ajouter la supervision de ligne lors d’un appel avec la ligne en question par l’appui sur l’icône d’ajout de contact. Sinon, il suffira d’éditer la liste en renseignant l’identifiant de la ligne au sein du registrar SIP (URI), dans notre laboratoire, il s’agit du numéro suivit de @192.168.16.14 (adresse IP du serveur Asterisk).
Fonctionnement
Chaque changement d’état d’une ligne détecté par Asterisk générera automatiquement l’envoi d’un message (de type SIP NOTIFY) pour chaque abonné à cette information.
De son côté, chaque téléphone supervisant des lignes enverra, après confirmation de son enregistrement (message de type SIP REGISTER), un message SUBSCRIBE pour chaque ligne supervisée avec le champ To: correspondant à l’URI de la ligne en question. Aussi, les modifications de groupe de supervision pourraient n’être prise en compte que lors du prochain enregistrement du poste ou de son redémarrage.
Lorsque les deux postes supervisés sont inutilisés, on peut observer sur X-Lite:

Sur le poste 13 on appelle le poste 11 (non supervisé ici), on obtient alors:

Si on appelle depuis le 13 le poste 14, on aura alors :

Conclusion
La supervision de ligne avec Asterisk est donc possible, on veillera en revanche à choisir des téléphones disposant de cette fonctionalité afin d’en profiter pleinement.