Ngrok s'invite dans Wazo

Posted on Fri 26 May 2017 in Wazo by Sylvain Boily

Click here for the english version.

Ngrok est un logiciel permettant de monter simplement un tunnel inversé pour accéder à votre machine depuis internet. C'est sécurisé et simple à utiliser. C'est très pratique pour exposer par exemple une API interne sur internet sans avoir à configurer pleins d'équipements. Cela peut aussi vous permettre de donner la main en SSH simplement à notre équipe pour vous faire un support distant.

ngrok.png

Ngrok

Pour utiliser ngrok avec Wazo c'est aussi très simple. La première chose à faire est de vous inscrire sur le site (c'est gratuit) et de récupérer votre token d'authentification. Il est nécessaire pour monter des tunnels.

Pour information nous utilisons la version 2.0 de ngrok. Un certain nombre de fonctionnalités ne seront par contre que disponible si vous prenez un compte payant. Je vous y encourage pour aider l'auteur de ce très bon logiciel, en espérant qu'il repassera ngrok 2 en logiciel libre.

Une fois votre token récupéré, il vous suffira d'aller dans le marketplace de Wazo est d'installer le plugin ngrok.

wazo-plugin.png

Quand votre plugin sera installé, vous aurez alors un menu ngrok qui va apparaître et il vous suffira alors d'aller dans la configuration pour y mettre votre token d'authentification et choisir si vous le souhaitez la zone géographique où le tunnel sera hébergé. Pour le cas de la France par exemple, vous pourrez choisir "Europe".

wazo-ngrok-config.png

Un fois ngrok configuré, vous pourrez alors créer des tunnels en cliquant sur le menu tunnel. Un certain nombre d'options sont disponible, mais attention sur un compte gratuit, vous ne pouvez pas utiliser toutes les options. Par exemple, le TLS et le sous-domaine ne sont pas des options dans le compte gratuit. Si vous souhaitez par exemple monter un tunnel HTTPS pour vous connecter sur l'interface HTTPS de Wazo, il faut activer le TLS. Vous pourrez par contre utiliser le mode TCP de ngrok vers le port 443 pour y accéder sans problème.

wazo-ngrok-add.png

Une fois votre tunnel monté, vous pourrez le voir dans la liste et récupérer l'adresse unique que ngrok a créé pour vous. Vous pourrez alors vous en servir pour accéder à votre Wazo.

wazo-ngrok-tunnel.png

En cas de problème ngrok offre aussi nativement l'inspection de trafic dans son interface de gestion interne. Pour y accéder rien de plus simple, il suffit de créer un tunnel HTTP sur le port 4040 et de vous y connecter.

ngrok-inspect.png

Je vous laisse découvrir ngrok et profiter de sa simplicité pour vous connecter à votre Wazo.

N'hésitez pas à communiquer avec nous et nous remonter vos remarques sur le forum Wazo.

Bon Wazo !

/sylvain


Webhook coming in Wazo

Posted on Thu 18 May 2017 in Wazo by Sylvain Boily

Depuis plusieurs mois nous travaillons activement pour améliorer Wazo et le rendre le plus ouvert possible. La dernière version 17.07 mets en lumière nos derniers travaux et nos développements actuels autour de Wazo. Vous découvrirez ainsi : une nouvelle interface web basée sur nos APIs REST, une place de marché pour permettre d'étendre Wazo facilement, des nouvelles fonctionnalités comme les menus vocaux, les lignes multiples pour un utilisateur, etc.

Mais nous avons encore quelques surprises pour vous au cours des prochains mois ! Avec en tête l'objectif de créer une plateforme de téléphonie à votre image, vous permettant de construire votre système sur mesure, il nous est apparu nécessaire de développer un outil rendant possible l'interconnexion avec une plateforme proposant plus de 700 autres produits intéressants sur le marché.

J'ai donc commencé un travail d'un connecteur sur une plateforme appelée Zapier. Pour ceux qui ne connaissent pas rendez-vous directement sur leur site web et créez vous un compte pour tester, c'est gratuit.

zapier.png

Zapier

Zapier est une plateforme cloud, avec des centaines de connecteurs vous permettant de faire 3 choses.

  • Un "trigger"
  • Une action
  • Un "search" (qui est une action aussi)

Le "trigger" est une action à un temps donné. Exemple avec le cas de Wazo, récupère moi mes derniers journaux d'appel. Une petite particularité dans Zapier, c'est qu'un trigger est exécuté par défaut toutes les 5 ou 15 minutes selon votre type de compte. Bien sur il existe aussi un autre type de "trigger" appel "instant trigger" qui lui permet de recevoir un évènement. Le mécanisme de Zapier est appelé REST hooks et ils ont fait un site web pour en expliquer leur vision.

Une fois que vous avez choisi votre "trigger", zapier vous offre la possibilité avec le résultat d'en faire une action. Les applications Zapier doivent donc offrir un mécanisme de "IN" et de "OUT". Prenons toujours notre exemple avec Wazo, mon "IN" sera donc un trigger de mes journaux d'appels et mon "OUT" sera par exemple une action pour envoyer mes données vers une feuille de calcul Google Sheets.

Le fonctionnement sera alors le suivant: toutes les X minutes, Zapier fera une requête sur mon Wazo, si j'ai eu de nouvelles entrées alors Zapier les enverra sur ma feuille Google. Simple non ?

Donc comment cela se configure ? Premièrement vous devez avoir une compte sur la plateforme Zapier, vous allez simplement cliquer sur "MAKE A ZAP" puis vous allez choisir votre application "IN", c'est à dire votre "trigger".

zapier-trigger.png

Une fois votre choix fait, vous allez simplement choisir les "triggers" disponible.

zapier-trigger-choice.png

Puis vous allez créer un compte de connexion entre Zapier et votre Wazo. Attention, un prérequis important: votre Wazo doit être accessible par Zapier sur le port 443 pour accéder aux APIs de Wazo.

zapier-account.png

Une fois votre connexion établie vous n'aurez plus qu'à choisir votre application "OUT", c'est à dire l'action souhaitée. À partir du moment où votre "ZAP" est créé, vous n'avez plus rien à faire: Zapier et Wazo travailleront ensemble et automatiseront votre export. Bien sûr ceci est simplement un exemple, je vous laisse parcourir les centaines d'applications et trouver ce qui vous intéresse le plus.

Il est aussi intéressant d'avoir d'autres ouvertures possibles. Cela m'a amené à développer un nouveau service dans Wazo permettant cette ouverture vers de nombreuses applications. Mon prochain exemple sera basé sur un logiciel libre qui monte et se présentant comme une véritable alternative à SLACK qui est une plateforme de communication temps réel (un IRC plus évolué), appelé Mattermost. Il en existe probablement d'autres, mais nous utilisons Mattermost en interne depuis un long moment et donc nous connaissons mieux ce logiciel.

Mattermost

Si vous souhaitez avoir plus d'informations sur Mattermost, je vous invite à consulter leur site web directement. Nous utilisons de notre côté la version communautaire et nous sommes globalement toujours à jour.

mattermost.png

Mattermost offre la possibilité comme dans SLACK de faire des webhooks de type "IN" ou "OUT", ça ressemble à Zapier un peu ;). Le webhook de type "IN" est simplement une interface HTTP où l'on va envoyer un message en format JSON. C'est assez basique, mais très simple à mettre en oeuvre.

Pour ce faire, il suffit d'aller dans la console de Mattermost, de choisir "intégrations" et de créer un webhook de type incoming. Vous choisirez alors le canal où vous souhaitez recevoir le message.

mattermost-webhook.png

Un exemple assez simple du message à poster dans votre requête:

{
  "username": "quintana",
  "text": "Salut c'est sylvain"
}

Facile :)

Revenons à Wazo ! Comme toujours, quand on développe dans Wazo, il est obligatoire d'offrir une interface REST pour cette fonctionnalité, ce qui permet aussi d'ajouter simplement un plugin dans notre nouvelle interface de gestion.

wazo-webhook-api.png

Dans le cas de Wazo, voici à quoi cela va ressembler.

wazo-webhook.png

Comment cela fonctionne ? Nous avons pris l'habitude depuis plusieurs années d'envoyer un évènement dans notre bus (basé sur RabbitMQ) à chaque évènement. Ce qui veut dire par exemple que lorsqu'on reçoit un appel sur son téléphone, nous avons un évènement qui est envoyé dans le bus avec comme nom "call_created".

Voici une idée d'exemple concret avec Mattermost et Wazo. Je souhaite recevoir sur un channel, l'information que mon téléphone sonne. Pour le mettre en œuvre, il suffira alors de:

  • Créer un webhook de type incoming sur Mattermost vers un canal défini.
  • Récupérer l'adresse de ce webhook.
  • Créer un webhook sur Wazo sur l'évènement "call_created" qui enverra sur l'adresse HTTP de Mattermost le JSON décrit ci-dessus.

Ouf on y arrive.

Créer le wekhook sur Wazo, il faut le plugin wehbook de Wazo, puis appuyer sur le petit plus pour en ajouter un nouveau.

wazo-webhook-create.png

Vous allez entrer un nom, par exemple "Mattermost call created" puis:

  • Event Name: "call_created"
  • Target: "http://mattermost/hook/monhook
  • Method: "post" (les hooks de mattermost sont des POST)
  • Content Type: Nous laisserons du JSON
  • Users: Vous allez choisir de quel utilisateur vous souhaitez faire un webhook.
  • Template: Notre fameux JSON du dessus.

wazo-webhook-edit.png

Les templates sont basés sur des templates Jinja et vous pouvez donc récupérer les informations du message dans votre template en utilisant la syntaxe {{ payload }}. Example: {{ payload.user_uuid }}.

Une fois votre webhook terminé, il suffira de recevoir et d'émettre un appel et vous recevrez en temps réel sur votre canal Mattermost l'information donnée.

Exemple avancé:

mattermost-webhook-example.png

J'espère que cette information vous sera utile et vous permettra de mieux comprendre ce que vous allez pouvoir faire avec Wazo très bientôt !

N'hésitez pas à communiquer avec nous et nous remonter vos remarques sur le forum Wazo.

/sylvain


Sprint Review 17.07

Posted on Mon 15 May 2017 in Wazo IPBX by The Wazo Authors • Tagged with wazo, development

Hello Wazo community! Here comes the release of Wazo 17.07!

New features in this sprint

Admin UI: The new web interface based on our REST API is now available for preview. See Wazo admin UI

Admin UI: IVR can now be managed from the admin UI

Admin UI: CDR can now be listed and searched from the admin UI instead of downloading a CSV from the old web interface.

Admin UI: Conference rooms using Asterisk confbridge can be managed using the admin UI

Admin UI: Parkings using Asterisk parking lots can be managed using the admin UI

Admin UI: Plugins can be managed from the admin UI

REST API: We have added a new REST API to manage wazo plugins using wazo-plugind. This new API is used by the administration UI to install and enable features.

REST API: CDR can now be queried by user to get its own call logs.

Ongoing features

Call logs: We are attaching more data to the call logs and generating new views to have a summary for a given query instead of a list of call logs.

Admin UI: We are working to improve the new web interface.

Plugin management: There is still a lot to be done to the plugin management service. e.g. dependency, upgrade, wazo version constraint, HA, ..


The instructions for installing Wazo or upgrading Wazo are available in the documentation.

For more details about the aforementioned topics, please see the roadmap linked below.

See you at the next sprint review!

Sources:


The new web interface of Wazo

Posted on Thu 11 May 2017 in Wazo by The Wazo Authors

Wazo 17.07 is the first release embedding the future replacement of the administration web interface of Wazo.

The current admin interface of Wazo is aging, and its internal design is significantly slowing down the development of other components. We've been extracting logic from this admin interface in the last years into REST APIs, and we're now confident enough that we can start a much lighter version of the admin interface, entirely supported by the REST APIs.

So, you can try this admin interface by visiting https://<wazo_ip>/admin.

Login

Once you enter the same credentials as the other admin interface, you'll see a small Plugins menu on the left: this is where you choose what you want to see in the admin interface: no more frighteningly long list of menus, you can select only what you need.

login.png

Plugins

plugins.png

The recommended minimal plugins at this time are:

  • Users
  • Extensions
  • Contexts
  • Devices

We intend to allow third-party developers to create their own plugins for Wazo, so that features are not restricted by the core team. We will also setup a global market of plugins, so that people can share their plugins.

New features

This new admin interface also brings its share of features, that were only available via the REST APIs until now, but were too costly to integrate into the current admin interface.

Users with multiline

REST API released in 16.10

Until now, users created with the admin interface could only have one line, and one device... The new form for users allows you to add multiple lines to the same user, so that multiple devices ring at the same time, or to mix web-based phones (WebRTC), software phones and conventional physical phones. This kind of setup required the use of call groups, which brought its share of pain for integrators, and multi-line users was a recurrent need.

user-list.png user-edit.png

IVR

REST API released in 16.16

Another feature request we've heard often is a graphical form to create simple IVR... Here it is:

ivr.png

Parking lots

REST API released in 17.01

Parking lots is the same feature as the previous parking: put an incoming call on hold in a defined extension, so that someone else can pick up the incoming call later. Except that we can now have multiple ranges of extensions: there was previously only one range (default was 701-749), and we can now create multiple ranges.

parking_lot-edit.png

CDR

REST API released in 17.06

The current interface is really insufficient for reading call logs: there was only a small CSV file with very few details that is quite hard to query, when looking for a specific call. The CDR plugin brings a clearer view of call logs.

cdr.png

Limitations (as of 17.07)

The new admin interface is not yet ready to completely replace the current admin interface, and is still in active development. You may encounter weird behaviors or missing features. Here are the main limitations:

  • You should not use any plugin without the Extensions and Contexts plugins, because you will be missing very useful guides for selecting valid extensions and contexts. Dependencies between plugins should be added.
  • Parking lots will not show any already configured parking, because the underlying system is totally different. A future automatic migration should take care of this.
  • The switchboard plugin will not show any already configured switchboard, because the underlying system is totally different. And there is no working operator interface for those kinds of switchboards as of yet.
  • The Outcalls and Trunks plugins are not yet usable.
  • The Voicemails form is not usable yet, but the plugin is useful for setting up voicemail destination on IVR for example.
  • Plugins are not replicated on a High Availability setup.

Technicals

The new admin interface is built with Python, Flask, WTForms, Admin-LTE, Bootstrap. The plugin system uses the underlying Debian package system, that offers some guarantees about consistency and conflict detection.


Sprint Review 17.06

Posted on Mon 24 April 2017 in Wazo IPBX by The Wazo Authors • Tagged with wazo, development

Hello Wazo community! Here comes the release of Wazo 17.06!

New features in this sprint

REST API: We have added a new REST API to get call logs in JSON format, instead of the current CSV format. The CSV format was mainly chosen for compatibility and JSON is easier to create new web interfaces.

Technical features

Asterisk: Asterisk was updated from 14.3.0 to 14.4.0

Important bug fixes

CTI Client: Transfers made via the client could cause Asterisk to take all CPU of the machine, blocking the transfer and losing the call, in some circumstances. Ticket reference: #6624.

Ongoing features

Call logs: We are attaching more data to the call logs, so that we can filter call logs more easily. This mainly includes filtering call logs by user, so that call logs analysis becomes less tedious. See https://api.wazo.community in section xivo-call-logs for more details.

New web interface: This web interface will only use the REST API we've been developing in the past few years, with no brittle complicated internal logic like the current web interface has: all the logic is handled by the REST APIs. This web interface will not replace the current web interface before it has all the same features, so it will take time to become the default interface. However, both web interfaces will coexist during the maturation of the new one. We'll keep you posted when the new web interface becomes usable.

Plugin management: We are currently working a plugin management service as well as a standard plugin definition that will be easy to write. The goal is to allow users to add features easily to Wazo and to be able to distribute their extensions to other users. This new system will be used to install features on the new administration interface.


The instructions for installing Wazo or upgrading Wazo are available in the documentation.

For more details about the aforementioned topics, please see the roadmap linked below.

See you at the next sprint review!

Sources: