jan 09

trueCall, filtrer les appels téléphoniques entrants

Dans ce merveilleux XXIe siècle, il faut bien avouer que le Spam est une plaie qu’il est difficile de cautériser.

La première destination de ses sollicitations abusives est bien entendu votre (vos) email(s), mais heureusement, de nombreuses solutions existent et sont pour la plupart très efficace.
Personnellement, j’utilise Spamassassin mais surtout Postgrey qui à réduit mon nombre de spams emails de façon drastique (voire quasi-nulle).
Certains hurleront sur le fait que le greylisting est insupportable pour le client (5 minutes de plus en attente, oh my god !), mais je n’ai qu’une réponse à leur apporter : « C’est votre boulot de sysadmin de remplir la whitelist aussi… »
Honnêtement, si le greylisting vous gène ou insupporte le client, c’est que vous vous la couler douce…
Depuis des années que j’utilise ce système, je n’ai eu aucun retour négatif quand a son efficacité, et je passe peut être 10 minutes par mois à peaufiner ma liste blanche… A bon entendeur.

Ca c’est dit…

Bref, ce n’est pas un billet sur la façon de combattre le spam email mais plutôt le spam téléphonique.

J’avais déjà aborder le sujet dans ce billet, et j’ai découvert une solution beaucoup plus intéressante et performante que je vais vous présenter aujourd’hui.

Des appels commerciaux ou bidons, comme tous, j’en reçois des tas (et pourtant je suis en liste Orange (la liste anti-prospection d’Orange (ça s’invente pas) et j’ai l’option Stop-secret d’Orange.
Ah oui, pour information, j’ai gardé mon numéro RTC Orange fixe en plus de mon numéro de ligne ADSL (pour pleins de raisons que vous retrouverez sûrement dans ce blog).
Avec ma solution domotique, je peux rejeter les appels indésirables avec présentation du numéro mais l’inconvénient principal, c’est que le téléphone de la maison sonne quand même 1 ou 2 fois avant de se faire couper par le modem. Gênant…

Ce bug n’est pas de mon ressort, mais du fonctionnement de la présentation du numéro en France qui n’est transmis qu’a partir de la deuxième sonnerie.

Bon j’avoue aussi jouer au jeu du sifflet avec les call-centers, mais ça va un temps… (pour ceux qui ne connaissent pas, il s’agit de détenir un simple sifflet à bille à côté du téléphone et de « vriller » les oreilles de votre interlocuteur après quelques minutes de discussion. Je sais, c’est très méchant, mais terriblement plaisant :D )

Si des solutions de filtrage d’appels entrants existent chez de nombreux FAI sur des lignes téléphoniques ADSL, il n’y a rien sur des lignes RTC. (Va comprendre pourquoi…)

Je me suis donc mis à rechercher un système pouvant s’intercaler sur ma ligne et m’offrant cette possibilité et rapidement, j’ai découvert le Call Blocker de la société TrueCall .

Commande faite pour la somme d’environ 150 euros.

Reçu rapidement, voici la bête :

Le fonctionnement de cette boite est très simple et extrêmement polyvalent.

Le CallBlocker gère 2 types de liste, la « Star list » (les amis/famille) et la « Zap list » (les emmerdeurs).
Outre ces deux listes, il gère les appels  « mobiles », « internationaux », « masqués » ou « indisponibles » (l’appelant ne présente pas d’identification du numéro. C’est ce qui se passe avec certains call-centers à l’étranger).

L’ajout des numéros dans la Zap ou la « Star list » se fait par les touches du téléphone, ou par le site web, ou durant un appel (par exemple quand vous appelez quelqu’un, il vous suffit de rajouter la touche « * » à la fin du numéro pour que le CallBlocker  le rajoute automatiquement dans la liste « Star ».

Une fois en possession de ses listes, un système de workflow permet de définir les flux vers lesquels renvoyer les appels :

- Accepter l’appel (et donc faire sonner le téléphone de la maison)
- Demander à l’appelant de se présenter (c’est le même principe que le « Stop-secret » d’Orange. Le boîtier nous appelle en nous disant que -le message de présentation de l’appelant- veut nous joindre, on accepte ou non l’appel (avec la possibilité également de rajouter son numéro en liste Star ou Zap).
- Bloquer l’appel et diffuser le message Zap (« tu me casses les bonbons » (par exemple ou plus « compréhensif ;) ))
- Renvoyer sur le répondeur interne du CallBlocker (ici la fonction de répondeur banale du boîtier)
- Bloquer l’appel en annonçant que nous refusons les appels anonymes
- Demander à l’appelant d’appuyer sur telle touche avant de faire sonner le téléphone de la maison
- Bloquer l’appel mais faire croire que notre téléphone sonne en diffusant la tonalité qui va bien
- Demander à l’appelant de taper son « caller code » (un code secret à diffuser auprès de vos correspondants)
- Bloquer l’appel en émettant une tonalité « n’est plus en service »
- Bloquer l’appel et demander à l’appelant de presser telle touche du téléphone, puis après de se présenter, puis enfin fait sonner notre téléphone pour la séquence de choix d’accepter ou pas l’appel.

Ce workflow est paramétrable ou par les touches du téléphone, ou par le site internet de TrueCall dans votre espace client.

Pour se synchroniser à cet espace client (c’est une option non obligatoire), le CallBlocker appelle (à votre demande ou automatiquement) un modem à Londres (rassurez vous, la mise a jour est très rapide et le coût de la communication est de quelques centimes). Ce qui vous permet également d’avoir une liste des appels reçus et bloqués par le CallBlocker.
Sachez toutefois que le CallBlocker appelle quand même le modem après sa mise sous tension pour synchroniser sa date et son heure.

Lors de mes premiers tests, voici donc ce que cela donne sur l’interface :

Par exemple, tout les appels masqués/indisponible sont envoyés vers « la demande de présentation », les numéros en « Zap list » sont bloqués avec le message « va te faire voir » et les autres appels font sonner normalement le téléphone de 7h à 23h (a vous de créer vos scénarios :) )

Il existe des profils pré-définis de différents types, mais l’option « customisée » est quand même plus agréable (la gestion des plages horaires est aussi possible (jour/nuit)).

Je ne vous détaillerais pas toute la documentation (que vous trouverez sur le site du fabricant) mais les possibilités de ce boîtier sont impressionnantes.

De plus, vous pouvez ajouter une carte SD (obligé de les acheter chez le fabricant par contre :( ) ce qui vous permet d’enregistrer les conversations :D

Voici un petit boîtier très performant et je suis toujours surpris que ce genre d’option n’existe pas chez Orange sur les lignes RTC classiques.

L’équipe TrueCall est très sympathique et répondent rapidement par mail ou par téléphone (attention, ils ne parlent qu’anglais ;) )

Bilan un produit efficace, avec de nombreuses possibilités et même s’il est un peu cher, il remplit parfaitement le rôle pour lequel il a été conçu.
Je vous invite à consulter le site du fabricant pour découvrir leurs produits et si vous avez des questions, n’hésitez pas à me laisser un commentaire.

EDIT : Juste 2 choses que j’ai oublié de spécifier.
Les messages des menus vocaux sont en anglais (mais vous pouvez modifiez les messages qu’entendent vos correspondants par les vôtres).
Le CallBlocker marche derrière une Freebox (même les mises a jour ;) )

Amusez vous bien :)

 

Classé dans domotique, geekerie, matériel | Taggé , , | 64 Commentaires
nov 19

Asterisk, suivi des appels en xPL

Asterisk est un serveur VoIP facilement installable à la maison.

Je ne m’étendrais pas la dessus, il y a pléthore de tutos sur le nain ternet pour vous expliquer ce que c’est et comment le mettre en place.

Je m’en sers tout les jours pour de multiples usages et l’une des fonctions qui me manquait était la possibilité de transmettre en xPL les numéros des appels entrants, et pourquoi pas, le numéro des appels émis.

(Rassurez vous, tout cela dans l’idée de l’intégrer à mon centralisateur xPL).

En fouillant un peu, j’ai d’abord découvert le package d’ iranger, xplast.

Puis l’excellent billet de mon confrère Ma domotique

Tout cela était bien gentil et sympa, mais je voulais un truc plus simple et plus rapide à mettre en oeuvre.

Je me suis donc plongé (avec délicatesse je vous rassure) dans la documentation d’Asterisk et surtout sur la partie AGI.

Vous trouverez également plein d’info sur le site voip-info.org a cette adresse :

http://www.voip-info.org/wiki/view/Asterisk+AGI

Un peu de google derrière et je suis tombé sur un très bon billet d’Andy Ortlieb qui explique comment utiliser les Asterisk Gateway Interface avec python.

Je me suis donc servi de ses exemples pour écrire un simple module AGI qui transmet en xPL les numéros des appels reçus ou émis via Asterisk.

Copier ce script dans le répertoire agi-bin d’Asterisk (généralement /var/lib/asterisk/agi-bin)
Mettre l’utilisateur asterisk propriétaire de ce script et le rendre executable

Pour intercepter les appels, il faut rajouter une entrée dans votre extensions.conf :

Exemple, pour envoyer un message xPL à chaque appel sortant avec le numéro appelé:
dans votre contexte « appel sortant »:

[appelsortant]
exten => _0ZXXXXXXXX,1,AGI(/usr/bin/python,"/var/lib/asterisk/agi-bin/Asterisk2xPL.agi")
exten => _0ZXXXXXXXX,2,Dial(SIP/freephonie-out/${EXTEN})

Exemple, pour envoyer un message xPL à chaque appel entrant avec le numéro appelant :
dans votre contexte « appel entrant »:

[appelentrant]
exten => s,1,Ringing
exten => s,2,AGI(/usr/bin/python,"/var/lib/asterisk/agi-bin/Asterisk2xPL.agi")
...

Attention, par défaut le message « INBOUND » (appel entrant) est produit quand le script voit une extension « s » (comportement le plus souvent rencontré pour les appels entrants)

#!/usr/bin/python
# -*- coding: ISO-8859-1 -*-
#
# Asterisk2xPL
# http://blog.guiguiabloc.fr
import sys,os,socket
 
hostname = socket.gethostname()
xpladdr = ("255.255.255.255",3865)
xplport = 3865
UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
UDPSock.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
 
 
def get():
  res = sys.stdin.readline()
  res = res.strip()
  response,delim,result=res.partition(' ')
  result=result.split('=')[1].strip()
  result,delim,data = result.partition(' ')
  return response,result,data
 
def send(data):
  sys.stdout.write("%s \n"%data)
  sys.stdout.flush()
 
AGIENV={}
 
env = ""
while(env != "\n"):
 
    env = sys.stdin.readline()
    envdata =  env.split(":")
    if len(envdata)==2:
      AGIENV[envdata[0].strip()]=envdata[1].strip()
 
incomingnumber = AGIENV['agi_callerid']
outgoingnumber = AGIENV['agi_extension']
 
if outgoingnumber == "s":
  body = 'calltype=INBOUND\nphone='+incomingnumber
  msg = "xpl-trig\n{\nhop=1\nsource=guigui-asterisk."+hostname+"\ntarget=*\n}\ncid.basic\n{\n" + body + "\n}\n"
  UDPSock.sendto(msg,xpladdr)
else:
  body = 'calltype=OUTBOUND\nphone='+outgoingnumber
  msg = "xpl-trig\n{\nhop=1\nsource=guigui-asterisk."+hostname+"\ntarget=*\n}\ncid.basic\n{\n" + body + "\n}\n"
  UDPSock.sendto(msg,xpladdr)

Vous trouverez le script en téléchargement sur mon googlecode :

http://code.google.com/p/guiguiabloc/downloads/detail?name=Asterisk2xPL.agi
Bien évidemment, si vous mettez à jour xPL-PyHAL par le SVN, il inclut la possibilité de réagir à la réception ou l’émission d’un numéro de téléphone ;)

Par exemple pour allumer le module « m5″ a la réception d’un appel du 0699999999 :

MODULE: INBOUND
TELNUMBER: "0699999999"
ACTION: command
TARGETXPL: heyu
TARGETCOMMAND: "on"
TARGETMODULE: "m5"

Amusez-vous bien :D

Classé dans domotique, geekerie | Taggé , | 3 Commentaires
nov 16

Projet xPL-pyHAL, Alpha release 2

Enfin un peu de nouvelles de mon projet xPL-PyHAL (dont vous trouverez le précédent billet ici).

J’y travaille toujours pour mon propre usage et, honte sur moi, je délaissais un peu la mise à jour du dépot SVN et du package sur googlecode.

Mais je me suis vite fait rattraper par des utilisateurs dont xPL-PyHAL avait, à ma grande fierté je l’avoue, intégré leur environnement domotique :)

Donc merci à Olivier de Connecting Stuff  et Johan de Hotfirenet de me secouer un peu les puces :D

Voici donc une mise à jour, la version Alpha 0.2 que vous pouvez dès à présent télécharger ici :
http://code.google.com/p/guiguiabloc/downloads/detail?name=xPL-PyHAL-alpha-0.2.tgz

ou mettre à jour votre SVN.

Au programme des changements :

  • Optimisation du code python

Une des parties qui m’a prit le plus de temps. Les sections de code du Brain devenaient de plus en plus conséquentes et j’ai tout regroupé dans des fonctions bien définies.

  • Choix du module Memcached

A utilisation intensive, je me suis rendu compte que le module « memcached » de python avait des comportements un peu bizarre et gênant (une nouvelle session à chaque fois sans réutiliser une existante), donc si vous disposez de pylibmc, le Brain l’utilisera en priorité, sinon le module Memcached standard.

N’oubliez pas la configuration dans Memcached_pylibmc.py dans ce cas (adresse du serveur et port de connexion, à l’identique de Memcached.py si vous utilisez ce module).

def __init__(self, hostname="127.0.0.1", port="11211"):
  • Correction d’un bug sur les schémas ac.basic

Plutôt une omission qu’un bug, Marc m’a signalé que certaines télécommandes DIO se présentaient avec le schéma ac.basic plutôt que homeeasy.basic et suite à sa correction, ce type de schéma est désormais intégré au Brain. Merci à lui :) (d’ailleurs vous êtes amplement encouragé a me remonter vos bugs !)

  • Ajout du support DawnDusk xPL

Si vous utilisez le client xPL Dawndusk , qui vous permet d’être alerté dans le bus xPL quand le soleil se lève, ou quand il se couche, xPL-PyHAL intègre désormais la possibilité de générer des évènements suite à cette action.

Le format YAML est le suivant (exemple: envoyer un message notifry « il fait nuit » au coucher du soleil) :

MODULE: dawndusk
DAYNIGHT: dusk
ACTION: message
TARGETXPL: notifry
KEY: "b11111223FFFFFzz"
MESSAGE: "il fait nuit"

Le nom du module pour que xPL-PyHAL réagisse: dawndusk

La clé DAYNIGHT sur laquelle réagir : dusk (coucher du soleil) ou dawn (lever du soleil)

et les actions comme d’habitude (TARGETCOMMAND par exemple pour une action command.

J’ai rajouté quelques exemples dans le répertoire yamlrepo.

 

N’hésitez pas à me remonter les bugs, demande d’évolution :)

 

Amusez-vous bien :D

 

 

 

 

 

Classé dans domotique | Taggé , , | 11 Commentaires
oct 12

CloudTrax, gérer l’accès wifi de vos invités

Vous avez sûrement, tout comme moi, la nécessité parfois d’offrir un accès wifi à vos amis ou famille de passage à la maison.

Malheureusement, (surtout côté famille…), les « trucs » qui veulent se connecter à votre réseau Wi-Fi sont parfois très sales ou sentent un peu des pieds.

Si en plus vous avez méchamment blindé votre accès Wi-Fi a coup d’Ipsec et de firewall authentifiant, la soirée risque d’être longue à configurer leurs portables (même si on simplifie un peu le bouzin ), surtout après l’apéro avec le beau-frère…

Je cherchais donc une solution permettant de mettre en place un accès Wi-Fi temporaire un peu à la manière des Hôtels, avec un code d’accès aléatoire ayant une validité restreinte.

Alors bien évidemment, j’aurais pu partir sur une solution à base de Portail Captif, de redirection etc… mais franchement je n’avais pas envie de perdre trop de temps dans sa mise en oeuvre.

Voulant réutiliser le matériel Wi-Fi que j’avais à ma disposition et qui dort dans le placard la majorité du temps, j’avais le choix entre mes Fonera et mes boîtiers Accton Open-Mesh.

J’avais déjà parlé précédemment des petits boîtiers Accton d’Open-Mesh et comme j’avais bien aimé le principe, je décide de refaire un tour sur leur site et là, surprise ! :

« Open-Mesh’s cloud controller, CloudTrax, is a free cloud-based network controller that helps you build, manage and monitor your wireless networks from anywhere in the world. »

CloudTrax ??? Mais, mais, mais…. C’est tout a fait ce que je recherche !

La gestion est identique à ce qui existait avant mais ce qui m’a surtout intéressé, c’est la possibilité de créer des « Vouchers », comprendre des tickets temporaires d’accès au réseau Wi-Fi.

Ni une, ni deux, on s’attèle à mettre cela en place.

- Flasher le (ou les) boitiers Accton avec la version NG du firmware

Vous trouverez les images des firmwares  ici:
http://dev.cloudtrax.com/downloads/testing/firmware-ng/

La procédure de flash est parfaitement expliqué ici :
http://support.open-mesh.com/knowledgebase/12/How-to-Flash-Open-Mesh-Routers.html

La configuration ne change presque pas de mon billet précèdent, a savoir offrir la possibilité pour votre boîtier CloudTrax de se connecter au nain ternet comme un grand :) (donc dhcp toussa), puis saisir l’adresse MAC du boîtier dans l’interface Web de Cloudtrax sur https://cloudtrax.com/dashboard.php

Comme je ne voulais pas que ce « réseau » tripote de ses sales doigts mon LAN perso, j’ai configuré un VLAN dédié pour l’isoler au niveau 2 et j’ai laissé le routeur Cisco faire office de dhcp, et bien sur router/filtrer comme un gros malade (mais pour les gens normaux vous pouvez simplement le brancher dans votre réseau local du moment qu’un serveur DHCP existe (comme la Freeteuse par exemple).

Une fois connecté et mis à jour, votre boîtier se retrouve dans votre administration Cloudtrax

 

Enfin la partie la plus intéressante, a savoir la génération d’un code temporaire pour l’accès wifi.

Quand votre « invité » se connecte à votre réseau Wifi CloudTrax, il n’a pas de clé a entrer, c’est un réseau « ouvert » (qu’il croit le petit padawan !)

Il lance son navigateur et tombe sur le portail captif (qui est totalement modifiable dans l’interface d’administration CloudTrax (la splash page).

C’est à vous de créer ses codes d’accès temporaire sur la page dédiée :

https://lobby.cloudtrax.com/lobby.php

Une page toute simple vous demande de remplir le code désirée (ou laisser le système le générer aléatoirement), la durée de validité, les limites de download/upload en Mbits etc…

Vous validez et hop, vous avez un numéro a communiquer à votre « invité » ou un ticket à imprimer pour lui remettre.

C’est pas génial ?

Une interface générale vous permet de jeter un oeil à vos tickets et les désactiver si besoin.

Toutes les possibilités sont superbement bien documentées sur la page d’accueil  https://cloudtrax.com/

J’ai trouvé le concept absolument génial, je n’ai pas passer du temps à mettre en place un portail type ChilliSpot en réutilisant un vieux boitier wifi « apacher » et cette façon de générer un ticket valable 1h, 6h, 1 week-end répond tout a fait a mes attentes de fournir l’accès Facebook tant convoitée de ma nièce sur son portable sans qu’elle pollue mes sains systèmes.

Bilan, une solution de Wi-fi pour des invités qui a répondu à mes exigences, qui n’est pas là pour être tout le temps en place, mais qui peut se rallumer en quelques minutes et frimer en donnant un ticket avec la « touche » GuiguiAbloc a ma nièce qui désormais ne peut que me vénérer :D

En espérant vous avoir donner des idées ;)

Amusez-vous bien :)

Classé dans geekerie | Taggé , | 4 Commentaires