Petite API REST pour asterisk avec Flask ======================================== Pourquoi ? ---------- On utilse au bureau un serveur Asterisk qui gère la VOIP avec des files d'attentes et d'un côté `Étoile Dièse`_ , un fournisseur VoIP toulousain, de l'autre un N510 Pro de chez Gigaset, qui transforme les comptes SIP en DECT et peut gérer jusqu'à 6 combinés. On a acheté des combinés A380 Gigaset or ces derniers sont très bien mais pas avec cette base DECT : pas de présentation du Caller ID ni d'historiques des appels. Un peu dommage en 2017. Du coup nous avons décidé de faire une petite page web qui affichera les CDR d'asterisk pour voir si on a manqué un appel, en plus on s'est dit que ça serait bien d'aller chercher dans notre base Odoo 8.0 pour voir si le numéro est connu dans la base client. Donc dans un second je ferais un VM à part qui ira piocher les infos dans Asterik et dans Odoo, mais pour l'instant je vais faire un petit serveur Flask qui ira lire le CDR sous forme de csv et l'envera en json à la demande. Il doit surement exister un plugin asterisk qui fait ça, on pourrait faire ça avec une commande ssh qui rappatrie le csv en local, mais je voulais aussi pouvoir étendre cette API avec la possiblité de blacklisté des numéros ou de les rediriger sur une queue asterisk. .. _étoile dièse: http://www.etoilediese.fr/ Le REST c'est quoi ? -------------------- C'est un façon un peut normalisée (et super facile) de partager des infos entre programmes. Le principe c'est de faire du HTTP pour récuper de trucs, que l'on partage par adresse internet: On peut utiliser le navigateur pour récuperer la liste des appels téléphoniques: http://192.168.1.25//asterisk/calls/ Va vous retourner un joli fichier texte en json (ou XML ou autre) contenant la liste des appels. Ensuite un programme peut faciler lire cette URL, dé-jsonifier le résultat et avoir une structure prête à traiter. Voici un exemple de l'appel à mon API de blacklist: .. image:: exemple_rest.png Pour plus d'infos sur la page `Wikipedia de Rest `_ Installation de flask --------------------- J'ai utilisé la version de flask livrée avec Jessie, ça allait très bien pour ça : :: apt install python3-flask Le code ! Le code ! ------------------- Pour être honnête, j'ai rempompé une bonne partie du code sur ce blog: https://blog.miguelgrinberg.com/post/designing-a-restful-api-with-python-and-flask .. literalinclude:: asterisk-rest.py