Automatisez votre VoIP avec le démon Linphone
Il existe de nombreux clients SIP dans le libre mais Linphone, outre son aspect multi-plateforme, dispose d'une caractéristique peu commune et très mal documentée, sa déclinaison en tant que service exploitable tant par des scripts sur un serveur, que sur un poste de travail pour une parfaite intégration à un bureau minimaliste.
Lancement du démon
Pour l'installation, il vous suffit de sélectionne le paquet linphone-nox (nox voulant souvent dire "version sans interface graphique" sur debian). Et si vous ne voulez pas vous prendre trop la tête à configurer le client, prenez aussi GUI linphone.
Ceci fait vous devez disposer de trois commandes linphone3 (l'interface graphique), linphonec (le démon) et linphonecsh (le client du démon).
Pour commencer, lancez la version graphique pour régler le client. Vous allez pouvoir ainsi facilement créer votre compte SIP, sélectionner les cartes son à utiliser comme micro, écouteurs et pour la sonnerie, etc. Ensuite testez pour vérifier que vous recevez bien les appels et que vous pouvez en passer. Pour info, la configuration sera stockée dans un simple fichier texte ~/.linphonerc.
Lorsque vous êtes certain que tout fonctionne, quittez le client graphique, ouvrez une console, et lancez le démon en avant plan pour tester :
$ linphonec -c ~/.linphonercReadyWarning: video is disabled in linphonec, use -V or -C or -D to enable.linphonec>lancement du démon linphonec
Nous voilà face à une console un peu comme celle d'asterisk qui nous permet d'envoyer toutes les commandes nécessaires à l'usage du sip. Pour passer un appel :
linphone>call 0102030405Contacting <sip:0102030405@asterisk>Remote ringinglinphone>commandes simples
Et pour terminer la communication :
linphone>terminateCall endedlinphone>commandes simples
Pour obtenir la liste des commandes et leur description, tapez help, il y en a beaucoup. Les plus importantes sont :
- call un_numero pour appeler;
- terminate pour clore un appel;
- answer pour répondre à un appel;
- quit pour arrêter le client SIP;
- mute/unmute pour couper le micro (et le rallumer).
Et des moins utiles au jour le jour mais néanmoins intéressantes :
- record pour enregistrer une conversation (spécial paranoïaques ;-):
- play pour lire un fichier wav à votre correspondant (attente musicale, etc):
- speak pour parler au correspondant avec un synthétiseur vocal (il faut qu'espeak soit installé).
Comme vous le voyez les possibles ne manquent pas.
Client du démon
Tout cela est bien mignon mais on aimerait bien que notre démon se démonise et travaille en arrière plan. Pour commencer tapez quit pour sortir de linphonecr car c'est maintenant l'heure d'utiliser linphonecsh
gaston$linphonecsh init -c ~/.linphonerclancement du démon linphonec
Comme vous le voyez nous ne lançons pas le démon de manière directe mais confions cette tâche au client linphonecsh avec la commande init auquel nous fournissons notre configuration (paramètre -c).
Là c'est pour le test, mais à terme il faudra lancer cette commande à chaque démarrage de sessions. Personnellement j'ai opté pour l'ajout de lancement de ce démon dans mon ~/.xinitrc.
Pour attaquer le démon, c'est strictement comme tout à l'heure mais en passant cette fois par la commande linphonecsh et sa commande generic
gaston$linphonecsh generic "call 1234564"gaston$linphonecsh generic "terminate"lancement de commandes via le client
Statut du démon
Depuis quelque temps déjà, j'expérimente le principe du "toutes mes données dans un fichier texte". Cela inclus mon agenda, mes tâches, le suivi de mon temps, mes notes, mais aussi mon carnet d'adresse. Il serait donc sympa lorsque quelqu'un m'appelle que je puisse voir apparaître son nom plutôt que son numéro de téléphone. C'est faisable par la commande très mal documentée status hook qui renvoie selon les situations les valeurs suivantes :
- offhook - non connecté.
- Dialing - le démon compose un numéro.
- Rien du tout (c'est à dire aucun résultat) - ça sonne.
- Call out, hook=0102030405 duration=28, muted=no rtp-xmit-muted=no - Un appel émis est en cours. On le destinataire et la durée ce qui est sympa pour l'injecter dans du time tracking.
- Incoming call from "33123456454" <sip:33123456454@asterisk> - Quelqu'un nous appel, on a son numéro pour chercher son nom.
- hook=answered duration=3 - On a décroché un appel, la durée est indiquée mais malheureusement par le numéro de l'appelant.
Il devient dés lors très simple de faire un petit script qui va aller pooler le "status hook" et afficher par exemple dans la barre de statut le nom de l'appelant ou la durée d'un appel.
Conclusion
Comme vous le voyez, il est possible tout faire ou presque avec Linphone, et de manière bien plus rapide qu'avec Ekiga/Dbus (quant ça marche...). A titre d'exemple, dans mon installation j'ai intégré ce client de la manière suivante :
- Les noms des appelants sont affiché par le script de la barre de status (WMFS).
- Une script python qui me liste des numéros correspondant à un paramètre, me permet d'en choisir un et passe l'appel.
- Le décrochage et le raccrochage de la ligne mappé sur une touche du clavier (via WMFS).
- Un alias vers linphonecsh generic pour rapidement envoyer des commandes comme les codes DTMF ou l'enregistrement des conversations (bien plus pratique que de prendre des notes !!)