MISE EN PLACE DE LA TELEPHONIE SUR IP AVEC ASTERISK(PJSIP)
La voix sur IP (VoIP, Voice Over IP) est une technologie de communication vocale en pleine émergence. Elle fait partie d'un tournant dans le monde de la communication. En effet, la convergence du triple play (voix, données et vidéo) fait partie des enjeux principaux des acteurs de la télécommunication. Aujourd'hui au lieu de disposer à la fois d'un réseau informatique et d'un réseau téléphonique commuté (RTC), l'entreprise peut donc, grâce à la VoIP, tout fusionner sur un même réseau. Comme toute innovation technologique, la VoIP non seulement simplifie l'exploitation des réseaux mais aussi économise de l'argent à ses clients. Les entreprises dépensent énormément en communications téléphoniques, or le prix des communications de la ToIP (Téléphonie sur IP) est dérisoire en comparaison. En particulier, plus les interlocuteurs sont éloignés, plus la différence de prix est intéressante. De plus, la téléphonie sur IP utilise jusqu'à dix fois moins de bande passante que la téléphonie traditionnelle. Il semblerait que les entreprises après avoir émis un certain nombre de doutes sur la qualité de services, soient désormais convaincues de la plus grande maturité technologique des solutions VoIP proposées sur le marché. Le scénario vers lequel va s'orienter la téléphonie sur IP dépend beaucoup de l'évolution du réseau lui-même. En effet, si internet garde sa configuration actuelle où elle est essentiellement dimensionnée en fonction d'une qualité de service moyenne pour la transmission des données, cependant cette nouvelle technologie constitue une solution idéale pour le cas d'interconnexion de PBX d'entreprises. En effet, les entreprises multi-sites cherchent économiser des dépenses énormes dues aux communications inter-sites. Il serait donc envisageable de profiter de cette nouvelle technologie émergente afin d'assurer cette interconnexion.
La téléphonie sur IP est un service de téléphonie fourni sur un réseau de télécommunications ouvert au public ou privé utilisant principalement le protocole de réseau IP. Cette technologie permet d’utiliser une infrastructure existante de réseau IP pour raccorder des terminaux IP que l’on nomme IP-PHONE, ainsi que des logiciels sur PC raccordés sur le même réseau IP que l’on nomme SOFTPHONE.
IP phone est un téléphone bien particulier avec des ports Ethernet permettant de se connecter sur le port réseau afin d'utiliser internet comme support de communication. Cette technologie permet d'amoindrir les couts de communications et jouera les mêmes rôles que le téléphone classique mais avec plusieurs d'autres avantages.
C’est une application (ou logiciel ce qui signifie que tout est dématérialisé) qui permet d'effectuer et recevoir des appels à l'aide de l'application sur le PC ou portable Toutefois, elle présente de nombreux avantages mais aussi un certains nombres de contrainte au niveau de la communication auquel il faut faire face.
Les contraintes physiques désignent l’environnement dans lequel l’utilisateur est en production (émission d’appel). Comme contraintes physiques, nous avons: – l’écho: l’écho désigne le signale qui revient dans l’oreille de l’émetteur au moment de la production. Cela peut être dû à un environnement enclavé (bureau très petit, l’air, etc.). Mais pour satisfaire une bonne qualité de communication, la norme exige que pour que l’écho ne soit pas gênant, il faudrait que le temps de traversée (lors de la production) ne dépasse pas 28ms soit 56ms aller-retour.
Lorsque deux interlocuteurs sont en production (communication), la norme exige que pour qu’il y ‘ait une bonne qualité de communication, le temps qui sépare le moment de la production et de la réception ne doit pas dépasser 150ms. Ici l’idée est de comprendre que pour respecter cette contrainte temporelle il ne faudrait pas que le canal établit entre les deux correspondants ne soit pas utilisé par d’autres fins.
Les environnements IP sont des réseaux à commutation de paquets. C’est-à-dire que tous les paquets sont transmis aux mêmes moments sont ordre de transmission, vu que tous les paquets sont traités de la même façon au niveau des nœuds du réseau, donc il n’y a pas de privilèges. Il est donc nécessaire de faire une resynchronisation. Cette resynchronisation ne peut se faire que si on stocke
Les paquets pendant un certain temps. Le temps pendant lequel les paquets sont stockés et appelé temps de synchronisation. La norme exige que ce temps ne doive pas dépassé 100ms et doit être supérieur au temps maximal de traversée. La synchronisation directe: qui consiste à utiliser le même temps. La synchronisation différentielle: qui consiste à avoir les mêmes horloges tournant à la même vitesse.
Un codec est un appareil ou un logiciel capable d’encoder ou de décoder un flux numérique ou un signal pour la transmission sur le réseau de données. Les codecs sont divisés en deux catégories: sans perte et avec perte. Les codecs sans perte retiennent toute l’information contenue dans le flux d’origine, préservant ainsi la qualité vidéo/audio dans un signal, alors que les codecs avec perte réduisent la qualité de la compression mais utilisent aussi moins de données de bande passante.
Il existe des codecs audio et codecs vidéo :
Les codecs audio traditionnels : G711, G722, G729, GSM. Le codec de la nouvelle génération: opus
Codecs vidéo traditionnels : H261, H263, H264
H264 est un codec propriétaire qui nécessite une licence d’utilisation.
Il y a un projet openH264 qui a développé une version H264 open source Vp8 et vp9 développe par Google.
Vp8 et vp9 sont recommandes par le webrtc.
Les protocoles de transport (TOIP)
Le protocole de transport TCP (Transmission Control Protocol) permet d'assurer des services de communication fiables entre des applications hébergées dans les équipements terminaux. Ceci n'est pas le cas du protocole IP (Internet Protocol) qui n'offre aucune garantie quant à la réception des paquets. TCP offre aux applications et aux protocoles qui l’utilisent un canal transparent, sans erreurs et bidirectionnel (en mode « full duplex ») qui transporte une séquence d’octets. C’est un protocole de point à point (il n’est pas adapté au « multicast ») et de bout en bout : seules les deux extrémités participant à la communication, ou connexion, déroulent le protocole
SIP est un protocole fonctionnant sous TCP/IP. ... Le protocole SIP peut avoir des sessions multiples de média pendant un appel. Le protocole SIP étant indépendant de la transmission des données, tout type de données et de protocoles peut être utilisé pour cet échange. TCP (Transport Control Protocol) assure un service de transmission de données fiable avec une détection et une correction d'erreurs de bout en bout. UDP (User Datagram Protocol) offre un service de transmission de datagrammes sans connexion. ... C'est la combinaison d'une adresse IP et d'un numéro de port.
Protocole SIP Session Initiation Protocol, abrégé SIP, est un protocole de communication standard ouvert de gestion de sessions souvent utilisé dans les télécommunications multimédia (son, image, etc.). Il est depuis 2007 le plus courant pour la téléphonie par internet (la VoIP). SIP n'est pas seulement destiné à la VoIP mais aussi à de nombreuses autres applications telles que la visiophonie, la messagerie instantanée, la réalité virtuelle ou même les jeux vidéo en ligne. Le protocole SIP utilise le port 5060, et sa version sécurisée SIP-TLS (alias SIPS) le port 5061.
La téléphonie sur IP séduit les entreprises avant tout grâce aux réductions de dépenses qu’elle permet, appels inter-sites gratuits, appels lointains à tarifs très bas, pas de frais de câblage supplémentaires. Mais la téléphonie IP propose encore d’autres avantages… La téléphonie IP permet la transmission des communications vocales via des réseaux au protocole IP (en clair, par Internet dans la plupart des cas) et permet la convergence de tous les postes informatiques d’une entreprise en un seul réseau unifié. Bien. Mais quelles sont les Avantages concrets pour l’entreprise ?
Économie sur les frais de câblage si vous possédez déjà un réseau Internet d’entreprise. La téléphonie IP utilise la même connectique. En d’autres termes, pas d’achat de câbles et de frais de pose à assumer.
La téléphonie IP demande peu de bande passante. Les entreprises peuvent donc constituer un réseau privé pour relier plusieurs sites distants entre eux. Les communications téléphoniques entre ces derniers sont alors totalement gratuites. La téléphonie IP est donc extrêmement avantageuse et parfaitement adaptée pour les entreprises possédant des implantations géographiques multiples. Pour les appels en dehors de l’entreprise, les coûts sont également bien plus réduits qu’avec la téléphonique traditionnelle. Cela est d’autant plus remarquable pour les appels longue distance, y compris à l’international. Et la distance n’est plus un critère d’augmentation du prix de la communication. A titre d’exemple, un centre d’appels aura les mêmes coûts de communication que ses clients soient tout proches ou disséminés dans le monde entier. Autre facteur de réduction des prix : la concurrence. Les sociétés spécialisées sont nombreuses sur le marché de la téléphonie IP, ce qui créé une pression à la baisse sur les prix. La téléphonie IP fonctionne en associant un utilisateur à un poste et non plus à une ligne. Qu’est-ce que cela change ? Un utilisateur peut désormais garder le même numéro de téléphone s’il est en déplacement ou s’il change de bureau.
De gestion La téléphonie traditionnelle obligeait les équipes techniques et informatiques à composer avec des lignes séparées : les données informatiques d’un côté, données « voix » de l’autre. Grâce à la technologie Voix sur IP, cette distinction disparaît puisqu’il s’agit d’unique et même réseau. Les opérations de maintenance ou d’évolution sont donc simplifiées, ce qui constitue une source de gains de productivité pour l’entreprise.
Dans une architecture VoIP, il est très facile d’ajouter des postes supplémentaires ou d’agrandir le réseau, ce qui n’était pas le cas avec la téléphonie non-IP
Asterisk est une solution de téléphonie sur IP, Open Source. Il s’agit donc d’une solution gratuite, avec une communauté très active. Il a été développé par la société Digium. Asterisk est disponible sous Linux et Windows, même si la version Linux utilisée est de loin la moins rependue. Il fait office d’IPBX, mais il est aussi capable de s’interfacer avec un réseau de téléphonie analogique, à l’aide de cartes additionnelles. Asterisk peut donc faire office d’IPBX et de PABX. Un serveur Asterisk permet donc de faire de la VoIP ainsi que de la téléphonie analogique. En plus d’être gratuit, Asterisk est donc aussi très complet et supporte de très nombreux codecs audio, dont le G.711 (u-Law et a-Law) et le G.729.
Voici une liste non exhaustive des fonctionnalités d’Asterisk
- Conférence
- Musique d’attente
- File d’attente
- Groupement d’appel
- Messagerie vocale
- Transfert d’appel
- Transcodage entre différents codecs
- Notification mail en cas de message (avec message audio en PJ)
- Synthèse vocale
- Chiffrement des appels
- Ne pas déranger
- Parking d’appel
- Etc…
- Messagerie vocale voicemail.conf
- Parking d’appel features.conf
- Transfert d’appels features.conf
- Conférence meetme.conf ;confbridge.conf
- Centre d’appels queues.conf ; agents.conf
- Musique d’attente musiconhold.conf
- Informations sur les différents répertoires asterisk.conf
- Création des compte pjsip.conf
- Prise en compte le module pjsip dans modules.conf
- Plan de numérotation dans extensions.conf
Asterisk est une solution de téléphonie sur IP open source. Développé par la société Digium, Il s'agit donc d'une solution gratuite avec une communauté très active. Asterisk est disponible sous Windows et Linux, même si la version Linux utilisée est de loin la moins rependue. Il fait office d'IPBX, mais il est aussi capable de s'interfacer avec un réseau de téléphonie analogique, à l'aide de cartes additionnelles. Un serveur Asterisk peut donc faire de la VoIP ainsi que de la téléphonie analogique.
L’Objectif de ce TP est de savoir installer convenablement Asterisk afin de bénéficier de quasiment toutes les fonctionnalités que nous offre ce logiciel.
Note : Ceci est une façon d'installer Asterisk parmi tant d'autres !
Infrastructure : Ubuntu 18.04
# apt install libxml2-dev libxml2-utils libcurl4-openssl-dev libeditline-dev libsqlite3-dev curl autoconf gcc g++ build-essential linux-headers-$(uname -r) libssl-dev openssl libc-dev ncurses-dev
NB : Les paquets en installer pour avoir les codecs audio et vidéo opus et vp8 et vp9
On installe Opus le codec audio de la dernière génération.
Pour installer les codecs vidéos VP8 et VP9
ET aussi les deux paquets pour la partie sécurité
# libsrtp2-dev et libssl-dev
Vous ne trouverez pas la dernière version d'Asterisk dans les dépôts système officiels. Nous devrons télécharger manuellement l'archive tar et créer l'application à partir des sources.
Utilisez la commande wget pour télécharger le fichier d'archive.
#wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
Extraire le fichier avec tar dans le dossier /usr/local
#tar xvf asterisk-18-current.tar.gz -C /usr/local
On se déplace dans le dossier /usr/local/asterisk-18.17.0
Ensuite dans contrib/scripts
Exécutez la commande suivante pour télécharger la bibliothèque du décodeur mp3 dans l'arborescence source.
#./get_mp3_source.sh
Sortie d'exécution de commande attendue :
Assurez-vous que toutes les dépendances sont résolues :
#./install_prereq install
Après l'installation des dépendances, vous devriez être prêt à construire Asterisk 18 à partir de la source que nous avons téléchargée.
Exécutez le script de configuration pour satisfaire les dépendances de construction.
Il faut reculer dans le dossier asterisk pour exécutez le script de configuration.
La sortie du scripte de configuration
Configurez les options du menu en exécutant la commande suivante :
#make menuselect
On coche le codec opus
Activez les modules de son Core que vous souhaitez utiliser.
Une fois terminé, exécutez la commande suivante pour compiler Asterisk 18 sur Ubuntu 18.04.
#make
Voici la commande que vous exécuterez pour installer Asterisk 18 sur Ubuntu :
#make install
# systemctl enable asterisk
Vérifiez que vous pouvez vous connecter à l'interface de ligne de commande Asterisk.
# asterisk -rvvvvvvvvv
Si vous avez un pare-feu ufw actif, ouvrez les ports http et les ports 5060,5061 :
# ufw allow proto tcp from any to any port 5060,506
Asterisk 18 est maintenant installé et fonctionne sur le serveur Linux Ubuntu 18.04.
SIP (Session Initiation Protocol) est un protocole de signalisation souvent utilisé pour établir et terminer des sessions de communication multimédia, telles que des appels voix et vidéo sur IP. La vidéo conférence, la diffusion multimédia en continu, la messagerie instantanée, l'indication de présence et les jeux en ligne figurent parmi les autres exemples d'application potentielle. SIP est un protocole de type « requête-réponse », très similaire à deux autres protocoles Internet, HTTP et SMTP, qui correspondent respectivement aux protocoles sous-jacents du Web et du courrier électronique.
PJSIP est une pile de protocoles SIP Open Source écrite en C, conçue pour être très compacte, performante et très flexible. Le développement de PJSIP est principalement axé sur une pile SIP à faible encombrement, modulaire et très portable à des fins de développement intégré (bien qu'il soit également parfaitement adapté à Win32/Linux/MacOS).
Un appel téléphonique est l'opération de mise en connexion entre une personne qui utilise un téléphone et son ou ses destinataires. À la suite de la numérotation du numéro de téléphone de ce dernier sur le clavier de l'appareil émetteur, une sonnerie téléphonique retentit à destination jusqu'à ce que l'individu contacté accepte l'appel. La conversation téléphonique peut alors commencer, le plus souvent par la question « allô ? » Un appel téléphonique transite par un réseau téléphonique fixe ou un réseau cellulaire via des antennes-relais disposées quasiment partout dans le monde. Un interlocuteur peut contacter un autre interlocuteur situé à plusieurs milliers de kilomètres. Les appels téléphoniques représentent un marché majeur pour les opérateurs de télécommunications, l'un des principaux avec l'éventuel abonnement à leurs services: l'abonnement téléphonique et le marché de l'accès à Internet. Les appels sont le plus souvent facturés au client selon leur durée, la localisation du destinataire de l'appel et la qualité du numéro appelé, qui peut faire l'objet d'une tarification spéciale ou sous forme de forfaits.
Fichiers concernés : pjsip.conf et extensions.conf
D’abord, avant d’utiliser pjsip.conf pour la création des comptes on doit s’assurer que le fichier sip.conf est arrêté. Si c’est pas arrêté, il faut aller dans le fichier modules.conf pour activer la prise en compte du pjsip.
# noload = chan_sip.so
On ajoute cette ligne.
Dans pjsip.conf , la création de comptes se fait comme suit :
Si veut voir tous les comptes : pjsip list aors
Ensuite on fait reload
TEST D’Appel entre 1000 et 1001
1001 s’est connecté
On peut taper la commande : pjsip list contacts pour voir les comptes qui sont connectés
Sur le serveur on voit le compte 1000 s’est connecté aussi
APPEL 1000 va appeler 1001
Dans pjsip.conf on ajoute dans la section endpoint de tous les comptes les codecs vidés
La messagerie vocale est en quelque sorte un répondeur/enregistreur. Elle permet à un utilisateur interne du système Asterisk de disposer d’une boîte vocale, de la paramétrer à sa guise et de l’activer en cas d’absence. L’appelant pourra alors laisser un message.
Fichiers concernés
- voicemail.conf
- extensions.conf
On édite le fichier voicemail.conf dans le contexte [default] on ajoute les compte y compris le mot de passe qui est 1234
[default] est notre contexte de toujours, depuis la création des comptes, (nous l’utiliserons tout au long de ce TP) 1XXX=> mot_de_passe,nom_d’utilisateur # ces deux options sont facultatives, (dans notre cas elles n’existent même pas)
Le fichier extensions.conf dans lequel on met ces deux lignes :
Explication :
236 est le numéro à composer pour écouter ses messages vocaux
VoiceMailMain : est la fonction qui permet d’activer la messagerie vocale. Voici la preuve que
1000 va appeler 1002 au bout de 15s s’il ne décroche on va rediriger le compte 1000 à laisser le message dans la boite vocale de 1002.
Coté Asterisk on peut voir le message echanger entre l’utilisateur 1002
L'interception d'appels vous permet de prendre en charge des appels destinés à un autre poste que le vôtre, directement sur votre téléphone. Il vous suffit d'appuyer sur la touche de votre poste*8 correspondant à la ligne que vous souhaitez intercepter : l'appel est basculé sur votre poste.
Description de la fonctionnalité
On ajoute le paramètre call_group avec une valeur sur un endpoint d’un user1 On ajoute le paramètre pickup_group à la même valeur sur l’endpoint d’un user2 Quand on appelle user1 au téléphone et qu’il ne prend pas et que le
téléphone continue à sonner, l’user2 compose l’extension défini par pickupexten dans feaures.conf et récupère l’appel de l’user1.
Cette fonctionnalité est intéressante lorsque vous partagez un bureau avec un collègue ; vous pouvez ainsi intercepter ces appels à partir de votre téléphone. Mots-clés : call_group, pickup_group et pickupexten
Fichiers concernés
- features.conf
- pjsip.conf
Dans features.conf
Définition du numéro à composer recouper les appels de quelqu’un dont le téléphone sonne
Fichier pjsip.conf
On ajoute call_group=1 au compte 1001
Et pickup_group au compte 1002
La fonctionnalité Un utilisateur par exemple 1003 et l’utilisateur 1002 compose *8 et intercepte l’appel destiné à 1001 et répond à sa place à 1003
Algo à suivre : 1000 appel 1001 et le téléphone sonne il ne décroche pas et 1002 compose *8 pour récupérer l’appel qui est destiné à 1001.
Les conférences téléphoniques peuvent être utiles pour réaliser des appels à plus de deux personnes. Les conférences téléphoniques fonctionnent par salle. Quand un utilisateur veut rejoindre une conférence, il appelle le numéro de la salle, afin d’y entrer. Tous les utilisateurs ayant fait de même se retrouveront ensemble dans ladite salle. Les utilisateurs peuvent alors dialoguer, quitter et rejoindre la salle à leur convenance, etc… Anciennement, le module qui gérait les conférences dans Asterisk s’appelait MeetMe. Aujourd’hui, il est déprécié et ConfBridge a pris le relais.
La configuration de ConfBridge repose sur deux fichiers :
extensions.conf
confbridge.conf
Notions à retenir et à configurer dans /etc/asterisk/confbridge.conf
• profile de pont de conférence (type=bridge) On peut définir le nombre maximal de personnes entrant dans la salle de conférence
• profile utilisateur (type=user) On peut y définir par exemple les paramètres pin : mot de passe, admin=yes ou no selon que nous voulons que l’utilisateur accède ou non au menu administrateur ; activation de la musique d’attente, choix de la classe de musique d’attente.
• menu (type=menu) On y définit les touches DTMF que les utilisateurs vont utiliser pour se mettre en sourdine ou mettre un autre utilisateur en sourdine ; l’admin peut expulser un utilisateur de la conférence ; on peut augmenter ou diminuer le volume de l’utilisateur qui a la parole
1- Définition d’un profil de conférence
fig. 1 : Définition du profile de salle de conférence default_bridge
fig2 : Paramètre video_mode et ses valeurs possibles dans le profil de salle de conférence
2- définition de profile d’utilisateurs
fig3 : Profile utilisateur demandant le code 1234 avant d’entrer en salle de conférence
fig. 4 : Paramètres supplémentaires pour activer et choisir la classe de musique du profile utilisateur
3- Définitions des menus utilisateurs simples et administrateurs
fig. 5 : menu user simple
fig. 6 : menu admin
4- Attributions des numéros d’accès aux salles selon qu’on doit accéder au menu simple ou au menu administrateur
fig7 : 9001 pour accès au menu user et 9001 pour accès au menu admin
• Quand vous composez 009000 et que vous êtes le seul dans la conférence, la classe de musique prévue est jouée à l’utilisateur et il doit s’authentifier par 1234
• Quand un utilisateur compose 9001, il entre dans la salle de conférence avec menu administrateur ; donc il peut faire beaucoup plus d’actions que celui qui entre dans la salle en composant 9000
• On peut aussi activer les codecs vidéo sur les endpoints des utilisateurs pour qu’ils aient la vidéo
• On peut aussi utiliser des touches mises à disposition dans les menus pour faire des actions
Super !
On va accéder au profil admin en composant 9001
Si c’est un compte simple on tape 009000
On définit le numéro 6000 pour tous les utilisateurs simple et 6001 pour l’admin
Idem pour le compte Admin
- Définition IVR
Un IVR (Interactive Voice Response) permet de guider les utilisateurs vers le service qu’ils souhaitent joindre, on peut s’en servir aussi pour simplement annoncer les horaires d’ouvertures etc…
La mise en place d’un IVR va se faire en deux étapes, la première il faut que nous apprenions à Asterisk à nous parler, le second est la création de l’IVR.
Comment faire parler Asterisk ?
Pour faire parler Asterisk, nous allons installer un moteur de synthèse vocale (Text To Speech) et nous allons mettre en place celui de Google appelé GoogleTTS.
Tout d’abord GoogleTTS à besoins de quelques dépendances pour fonctionner :
# apt-get install perl libwww-perl sox mpg123
On se déplace dans le dossier /var/lib/asterisk/agi-bin
#cd /var/lib/asterisk/agi-bin
On télécharge l’application googletts via ce lien
# wget https://raw.github.com/zaf/asterisk-googletts/master/googletts.agi
On applique le droit d’exécution a notre application googletts
La configuration des IVR se fait dans le fichier extensions.conf
Ouvrez votre fichier extensions.conf et copiez les lignes suivantes à la fin du fichier
8081 c’est le numéro à composer
WebRTC :
D’abord, webrtc est un standard de communication en temps réel à travers le web (à travers des navigateurs web.
Ctxphone est un client SIP, open source basé sur Javascript pour les applications web qui utilisent WebRTC et WebSockets pour se connecter à votre serveur SIP. L'interface utilisateur est conçue pour être lancée sous forme de fenêtre contextuelle à partir de votre application. Ctxphone permet démarrer ou rejoigne des réunions avec la haute définition, la vidéo en face à face, l’audio de haute qualité. Conçu pour un environnement professionnel, les fonctionnalités sont limitées à ce qui est nécessaire tel que la prise en charge d’appels multiples, muette, retenir l’appel et reprendre. Les navigateurs basés sur les normes fonctionneront tout simplement, aucun plugin nécessaire. Il prend en charge certains navigateurs comme google chrome, mozilla firefox, etc...
- Audio uniquement, attente/reprise, muet, prise en charge d'appels multiples.
- Aucun plugin requis, fonctionne avec les navigateurs compatibles WebSocket / WebRTC. (Firefox et Chrome.)
- Le journal des appels est enregistré dans localStorage.
- L'interface intuitive facilite la tâche des utilisateurs.
- Facile à configurer et à intégrer dans votre projet.
- Licence MIT.
Téléchargement de ctxphone On prend le navigateur et on tape ctxphone master. On peut cliquer sur ce lien pour télécharger ctxphone : https://github.com/collecttix/ctxSip
On clique sur ctxSip
Apres téléchargement, on désarchive ctxphone.
On copie le dossier ctxSip-master dans /var/lib/asterisk/static-http
#cp -r ctxSip-master /var/lib/asterisk/static-http
On va renommer le nom du dossier ctxSip-master en myctxphone.
Création de dossier de keys dans /etc/asterisk
On se déplace dans le dossier script de asterisk
#cd /usr/local/src/asterisk-20.3.0/contrib/scripts/
On utilise le script "ast_tls_cert" dans le répertoire source Asterisk "contrib/scripts" pour créer une autorité de certification auto-signée et un certificat Asterisk.
#./ast_tls_cert -C rtn.sn -O "RTN" -d /etc/asterisk/keys
Paramétrage d’asterisk pour qu’il utilise les certificats et l’hébergement de ctxphone dans asterisk
Dans le fichier : /etc/astersik/http.conf
#/etc/astersik/http.conf
Dans /etc/asterisk/pjsip.conf
Pour que ctxphone soit un client websocket, on va éditer le fichier index.html qui se trouve dans le dossier master. Apres on renseigne le lien de notre téléphone qu’on a hébergé dans asterisk (http.conf).
On édite le fichier index.html
On renseigne : L’adresse IP du serveur (asterisk) Le port : 8089 Le chemin là où se trouve notre téléphone (static/myctxphone/phone/index.html).
Test cote navigateur : https://192.168.1.2:8089
On clique sur paramètres avancés
Sur cette fenêtre on renseigne les informations concernant le compte webRTC créé dans pjsip.conf.
Le compte 1008 (WebRTC) appel un compte asterisk 1000
1000 appel 1008
Voici la version améliorer de ctxphone que j’ai personnalisé.
ARI : une interface pour les applications de communication L'interface Asterisk RESTful (ARI) a été créée pour répondre à ces préoccupations. Alors qu'AMI est bon pour le contrôle des appels et AGI est bon pour permettre à un processus distant d'exécuter des applications de plan de numérotation, aucune de ces API n'a été conçue pour permettre à un développeur de créer sa propre application de communication personnalisée. ARI est une API asynchrone qui permet aux développeurs de créer des applications de communication en exposant les objets primitifs bruts dans Asterisk - canaux, ponts, points de terminaison, médias, etc. - via une interface REST intuitive. L'état des objets contrôlés par l'utilisateur est transmis via des événements JSON sur un WebSocket.
Fondamentaux de l'ARI
ARI se compose de trois pièces différentes qui sont - à toutes fins utiles - interdépendantes et utilisées ensemble. Ils sont:
- Une interface RESTful qu'un client utilise pour contrôler les ressources dans Asterisk.
- Un WebSocket qui transmet au client des événements au format JSON concernant les ressources d'Asterisk.
- L’application de plan de numérotation Stasis qui transmet le contrôle d'un canal d'Asterisk au client.
Paramétrage d’ARI dans le fichier
#/etc/asterisk/ari.conf
Il faut créer le contexte d’asterisk.
[asterisk]
type=user
read_only=no
password=passer
On recharge asterisk en faisant core restart now.
#reload
On tape sur le navigateur : ari.asterisk.org pour avoir l’interface swagger d’asterisk.
Dans la barre api_key on renseigne le compte asterisk :passer exactement la même config dans ari.conf
On clique sur Explore
Là on a l’interface swagger d’asterisk, on peut maintenant faire les tests.
On clique sur channels pour pouvoir mettre en communication deux utilisateur.
Voici notre interface :
Pour pouvoir mettre en communication deux utilisateurs : Endpoint : on met PJSIP/1002(l’utilisateur qui initie l’appel) Extensions : on met 1008(l’utilisateur qui reçoit l’appel) Priority : 1 (la première priorité) Apres on clique sur Try it out ! (Pour passer l’appel)
Le téléphone de 1002 sonne s’il décroche automatiquement l’appel est rediriger vers le compte 1008 (WebRTC)
Mise en communication automatique de 2 utilisateurs asterisk via ARI
Prérequis
On a déjà un serveur asterisk fonctionnel à l’adresse 192.168.1.11
Dans extensions.conf
Dans mon cas j’ai déjà paramétré la config de ari
On vérifie si le port 8088 du serveur web asterisk est ouvert
On installe le logiciel curl si ce n’est pas encore fait
#apt install curl
# curl -v -u asterisk:passer -X POST http://192.168.1.11:8088/ari/channels?endpoint=PJSIP/1000&extension=1002&context=rtn&priority=1&callerId=1000
L’algo : Le téléphone 1000 sonne et lorsqu’on décroche le téléphone 1002 sonne à son tour et quand 1002 décroche, les 2 utilisateurs entrent en communication.
Il décroche
Sur l’interface d’ Asterisk on peut voir les appels
Conclusion : Avec les résultats obtenus, on peut automatiser la mise en communication entre 2 utilisateurs en utilisant des langages de programmation ayant des modules curl . C’est le cas de python et php.
- On installe le module requests
# pip3 install requests
On crée un dossier ast-python
# mkdir ast-python
Si on lance le programme mis1.py
S’il décroche le téléphone de 1002 sonne
NB : lien d’un site de conversion de curl dans un langage tel que python php nodejs, java etc…
Exemple :
Mise en communication en passant par un formulaire HTML
Il faut installer ces paquets :
# apt-get install python3 python3-pip
Activation du module cgi
# a2enmod cgid
On se déplace dans le dossier /usr/lib/cgi-bin
# cd /usr/lib/cgi-bin
On sauvegarde et appliquer les droits au fichier mis.py
On crée le dossier ari dans /var/www/html
S’il décroche le téléphone de 1002 sonne
Résultat : 1000 est mis en contact avec 1002
Amélioration de l’interface en intégrant boostrap
Idem css
Mise en communication via Tkinter
Algo : on crée 2 labels appelant et appele
On crée 2 zones de texte Entry nommées appelant et appele et aussi on crée un bouton en plaçant les 5 widgets.
On crée une fonction call Quand on clique sur le bouton, on appelle call avec les paramètres appelant et appele.
On crée le fichier misetkinter.py
TEST
Il lance l’appelle et si 1000 décroche automatiquement le téléphone de 1002 va sonner
Les sont en communications
Super !!!
1- Concepts Asterisk permet de mettre en place des centres d'appel efficaces grâce à une gestion d’agents et de files d'attente. Généralement un centre d'appel se compose :
• D'agents : qui prennent ou émettent des appels
• De files d'attente : qui distribuent les appels aux différents agents
• de superviseur : qui a la possibilité de se connecter pour avoir tout type d’informations relatives aux activités d’un agent donné.
Rôle d’un agent : Un agent est un compte qui va pouvoir se connecter, déconnecter et se mettre en pause. Une file d'attente (queue) est une "salle" virtuelle dans laquelle sont connectés des agents qui attendent des appels. Quand un appel arrive, il est distribué suivant une "stratégie" à un ou plusieurs agents. La politique est définie à travers le paramètre strategy ; Par exemple : strategy=ringall ; Quand un appel arrive dans cette queue, tous les téléphones des agents connectés sonnent en même temps, le premier qui décroche prend l’appel. strategy=fewestcalls ; un appel qui arrive sera redirigé vers l’agent connecté qui reçoit moins d’appel
On édite le fichier /etc/asterisk/queues.conf
#vim /etc/asterisk/queues.conf
fig 3 : files d’attente telecoms et devops avec ajout manuel d’agents
Dans notre cas, les numéros 1000,1001 et 1002 du contexte rtn ont été ajoutés à la file d’attente devops
Définition des numéros des files d’attente
On définit dans extensions.conf les numéros d’accès aux files d’attente devops :
Fig. 4 : 7001 est le numéro d’appel de la queue devops
Quand des utilisateurs autres que les agents appellent 7001, les appels sont redirigés vers la bonne file d’attente. Quand tous les agents sont occupés, la classe de musique de la file d’attente est jouée à l’appelant.
Algo : un compte compose 7001(numéro de centre d’appel) et le numéro d’un agent va sonner
- Connexion et déconnexion des agents via AddQueueMember() et RemoveQueueMember()
Un utilisateur composant le numéro 8000 sera ajouté comme agent de la file d’attente devops, lorsqu’il compose le numéro 8001, il sera déconnecté de la file
Test :
Quand un agent compose 8001 il sera déconnecter de la salle d’attente.
On se déplace dans le dossier /var/lib/asterisk/ et créer un dossier dans mon cas il s’appelle myaudio et mettez votre fichier audio dans ce dossier
#cd /var/lib/asterisk/
Puis Installer mpg123 par la commande :
#apt install mpg123
Dans le fichier /etc/asterisk/musiconhold.conf
Voici la configuration pour utiliser la musique myaudio
Dans le plan de numérotation /etc/asterisk/extensions.conf
On aoute juste l’option m
Si on appelle un utilisateur sa sonnerie a changé et on écoute la musique qui se trouve dans myaudio
- Architecture de notre projet
R1#
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#inter
R1(config)#interface f
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip add dhcp
R1(config-if)#no sh
R1(config-if)#
*Mar 1 00:01:18.163: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
*Mar 1 00:01:19.163: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
R1(config-if)#
*Mar 1 00:01:26.623: %DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet0/0 assigned DHCP address 192.168.2.137, mask 255.255.0.0, hostname R1
R1(config-if)#
R1(config-if)#voice service voip
R1(conf-voi-serv)#allow-connections sip to sip
R1(conf-voi-serv)#sip
R1(conf-serv-sip)#registrar server
R1(conf-serv-sip)#
R1(conf-serv-sip)#voice register global
R1(config-register-global)#mode cme
R1(config-register-global)#max-dn 30
R1(config-register-global)#max-pool 30
R1(config-register-global)#authenticate realm 192.168.2.137
R1(config-register-global)#
R1(config-register-global)#voice register dn 1
R1(config-register-dn)#number 8000
R1(config-register-dn)#name nasry
R1(config-register-dn)#
R1(config-register-dn)#voice register dn 2
R1(config-register-dn)#number 8001
R1(config-register-dn)#name berenger
R1(config-register-dn)#
R1(config-register-dn)#voice register pool 1
R1(config-register-pool)#id mac 0000.0000.8000
R1(config-register-pool)#number 1 dn 1
R1(config-register-pool)#username 8000 password passer
R1(config-register-pool)#
R1(config-register-pool)#codec g711ulaw
R1(config-register-pool)#
R1(config-register-pool)#voice register pool 2
R1(config-register-pool)#id mac 0000.0000.8001
R1(config-register-pool)#number 1 dn 2
R1(config-register-pool)#username 8001 password passer
R1(config-register-pool)#
R1(config-register-pool)#codec g711ulaw
R1(config-register-pool)#
R1(config-register-pool)#dial-peer voice 10 voip
R1(config-dial-peer)#destination-pattern 8...
R1(config-dial-peer)#session protocol sipv2
R1(config-dial-peer)#session target sip-server
R1(config-dial-peer)#codec g711ulaw
R1(config-dial-peer)#
R1(config-dial-peer)#dial-peer voice 30 voip
R1(config-dial-peer)#destination-pattern 1...
R1(config-dial-peer)#session protocol sipv2
R1(config-dial-peer)#session target sip-server
R1(config-dial-peer)#codec g711ulaw
R1(config-dial-peer)#
R1(config-dial-peer)#sip-ua
R1(config-sip-ua)#authentication username callmanager password passer
R1(config-sip-ua)#sip-server ipv4:192.168.2.143
R1(config-sip-ua)#
*Mar 1 00:12:29.891: VOICE REGISTER POOL-1 has registered. Name:SEP000000008000 IP:192.168.2.84 DeviceType:Phone
R1(config-sip-ua)#
*Mar 1 00:17:10.947: VOICE REGISTER POOL-1 has unregistered. Name:SEP000000008000 IP:192.168.2.84 DeviceType:Phone
*Mar 1 00:17:11.039: VOICE REGISTER POOL-1 has registered. Name:SEP000000008000 IP:192.168.2.84 DeviceType:Phone
R1(config-sip-ua)#
Dans /etc/asterisk/pjsip.conf
TEST : On utilise le compte 8000 pour le CME et coté Asterisk on utilise le compte par exemple 1001
R1(config-sip-ua)#
*Mar 1 00:17:10.947: VOICE REGISTER POOL-1 has unregistered. Name:SEP000000008000 IP:192.168.2.84 DeviceType:Phone
*Mar 1 00:17:11.039: VOICE REGISTER POOL-1 has registered. Name:SEP000000008000 IP:192.168.2.84 DeviceType:Phone
R1(config-sip-ua)#