MISE EN PLACE DE LA TELEPHONIE SUR IP AVEC ASTERISK(PJSIP)

Publié le par berenger benam

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

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.

 

SOFTPHONE

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.

Contrainte physique

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.

Contrainte temporelle

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.

La synchronisation

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.

Les codecs

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.

Les différents codecs :

 Il existe des codecs audio et codecs vidéo :

Codecs audio :

Les codecs audio traditionnels : G711, G722, G729, GSM. Le codec de la nouvelle génération: opus

Codecs vidéo :

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 avec tcp

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.

Etudes des protocoles

 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 ?

 

 

 Coûts d’installation

 

É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.

 

Coûts de communication

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.

 

 

Simplicité

 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.

Évolutivité

 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.

II - 2 Architecture généraliste d’Astérisk

 

 

 

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.
 

  1. Création de compte PJSIP

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

 

  1. Fonctionnement :

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

CAS1 :

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

 

 

 

  1. 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

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.

 

 

  1. 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…

https://curl.trillworks.com

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 !!!

Gestion de centre d’appels avec Asterisk
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

CME AVEC ASTERISK(PJSIP)

  1. 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)#

 

On ne peut nier que le monde se dirige vers IP et que le protocole SIP est devenu la solution de facto, pour le choix des entreprises pour leurs connexions IP. Le terme SIP signifie Session Initiation Protocol, il est utilisé pour mettre en place et démonter des appels ou des sessions dans un réseau IP. Il fonctionne avec toutes sortes de terminaux ou d'applications, y compris les appels vocaux vers les téléphones logiciels, des vidéos et des sessions de conférence audio et d'autres applications de communications unifiées. Asterisk est un autocommutateur téléphonique privé libre et propriétaire pour systèmes GNU/Linux. Il permet, entre autres, la messagerie vocale, les files d'attente, les agents d'appels, les musiques d'attente et les mises en garde d'appels, la distribution des appels.
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
N
bon courage
Répondre