Revenir au début

Bloquer les appels téléphoniques indésirables

A faire soi-même et sans abonnement
A faire soi-même et sans abonnement

Introduction

Le système que je vous propose et basé sur le projet callattendant J’ai amélioré ou plutôt adapté le système pour la France. En effet à la base Callattendant utilise Nomorobot pour déterminer si un numéro de téléphone est indésirable. Pour la France je vais me baser sur le service Dois-je répondre ? .


Remarque : “Dois-je Répondre ?” , existe aussi en application pour Android et iPhone.


A noter aussi que sans être particulièrement complexe, l’installation et la configuration de ce logiciel demande d’être à l’aise dans les environnements Linux, de savoir lancer et contrôler un programme via systemd. Si pour vous les commandes : ssh, scp, systemctl et vi vous sont assez familières, que vous connaissez un peu python, vous n’aurez aucune difficulté lors de l’installation.


Etape 1 le matériel

Pour filtrer les appels arrivant dans votre domicile il vous faut :

  1. Un ordinateur sous Linux comme un RaspberryPi
  2. un modem qui sait interpréter les appels téléphoniques (comme le modèle US ROBOTICS 5637)
  3. 2 cables RJ11
  4. un découpleur RJ11 (1 prise mâle vers 2 prises femelles)
  5. un téléphone fixe

Si vous avez déjà suivi l’installation du Raspberry avec notre tuto concernant PiHole le bloqueur de pub, vous pouvez directement passer à l’étape 2, sinon continuez la lecture.

Le branchement est simple :

  1. le découpleur RJ11 prise mâle sur la sortie téléphone de la box.
  2. le découpleur RJ11 prises femelles, avec deux câbles RJ11 : un vers le modem et un vers le téléphone fixe.
  3. le modem connecté en USB sur le pi.
  4. le pi connecté en Wifi ou en Ethernet sur le réseau local.

matériel

Etape 2 Mise en place du Raspberry-Pi

Raspberry PI 3 avec les accessoires

La première étape consiste à récupérer l’ISO de Raspbian depuis le site officiel . Pour ce projet il est inutile de prendre l’image complète. La version légère (lite) fera l’affaire. Après l’image téléchargée, il faut l’installer sur une carte SD. J’utilise Etcher qui est disponible pour Linux, Mac et Windows.

Etcher est simple d’utilisation :

  • vous choisissez l’image (fichier zip)
  • vous choisissez la destination (carte SD)

Ensuite, la carte SD est prête à l’emploi avec le Raspberry-Pi. Il ne reste qu’a démarrer ce dernier et le raccorder au réseau local. Pour se connecter sur le Raspberry-pi la première fois, j’utilise SSH (on peut utiliser Putty). (On peut également utiliser RealVNC pour avoir l’interface graphique, mais ce n’est pas nécessaire pour ce projet.)

ssh pi@192.168.0.123

192.168.0.123 sera l’adresse de votre pi sur le réseau local. (Elle sera certainement différente chez vous.)

Les identifiants par défaut sont :

pi/raspbian

Quand les mises à jour sont effectuées :

$ sudo apt-get update && sudo apt-get dist-upgrade

et que le Raspberry a redémarré, on peut passer à la suite.

Etape 3 Installation de callattendant

Pour les anglophones toutes les explications concernant l’installation et la configuration complète sont disponibles sur le site suivant : Projet Call Attendant

On va survoler l’essentiel, il est conseillé d’aller jeter un oeil à la documentation officielle.

Pour commencer, on se rend dans le répertoire “home/pi” et on installe un environnement virtuel afin de cloisonner l’installation de callattendant, qui nécessite seulement python 3.

# Installation de virtualenv
sudo apt install virtualenv

# Création de l'environnement virtuel (appelé ici "venv" mais on peut choisir aussi quelque chose de plus parlant comme "callattendant_venv")
virtualenv venv --python=python3

# On active l'environnement virtuel
source venv/bin/activate’

Un fois dans l’environnement virtuel on peut vérifier qu’on pointe bien sur l’environnement python virtuel :

$ which python
/home/pi/venv/bin/python

$ python --version
Python 3.7.3

On installe callattendant en utilisant PyPi (python package installer) (lien)

# Dans environnement virtuel on utilise pip pour installer callattendant
pip install callattendant

# Si l'installation se fait à l'extérieur d'un environnement virtuel il faut penser à utiliser pip3
pip3 install callattendant

Si on n’utilise pas d’environnement virtuel pour l’installation de callattendant il faut penser à redémarrer pour que les modifications prennent effet.

Si à l’heure où vous lisez ces lignes les modifications n’ont pas été ajoutées dans le projet officiel, vous aurez à modifier quelques fichiers manuellement pour ajouter le service de filtrage “ShouldIAnswer” ou “Doisjerepondre”. Pour récupérer les fichiers rendez-vous sur le Git Cloud-Forge : Projet Call Attendant

J’ai modifié 2 fichiers pour prendre en compte le nouveau filtre :

  1. callattendant/callattendant/screening/callscreener.py
  2. callattendant/callattendant/config.py

J’ai créé un nouveau fichier qui est le filtre en question :

  • callattendant/callattendant/screening/shouldianswer.py

Dans votre installation de callattendant il vous suffira de les modifier à la main ou de les remplacer avec la commande scp : Par exemple la commande pour copier le fichier shouldianswer.py dans le repertoire /screening :

scp shouldianswer.py pi@192.168.0.123:/home/pi/callattendant/lib/python3.7/site-packages/callattendant/screening

Pour personnaliser votre callattendant je vous conseille également d’enregistrer des messages personnalisés en français. En particulier lors des rejets ou avant la bascule sur le répondeur :

arecord blocked_greetings_perso.wav
arecord please_leave_message_perso.wav

Ensuite avec la commande scp il faut déposer les messages audio à cet endroit /callattendant/resources :

scp blocked_greetings_perso.wav  pi@192.168.0.123:/home/pi/callattendant/lib/python3.7/site-packages/callattendant/resources
scp please_leave_message_perso.wav  pi@192.168.0.123:/home/pi/callattendant/lib/python3.7/site-packages/callattendant/resources

Une fois les messages enregistrés et copiés, il faut éditer le fichier de configuration afin que ces nouveaux messages audios soient pris en compte :

vi /home/pi/callattendant/app.cfg

Dans le fichier de configuration j’ai modifié quelques options

Le format d’affichage des numéros de téléphones français :

PHONE_DISPLAY_FORMAT = "####-###-##-##-##"

Les préfixes autorisés sans filtrage pour les numéros en 03 par exemple :

PERMIT_NUMBER_PATTERNS = {"03":"Est"}

Et comme je le signalais plus haut, les messages audio :

VOICE_MAIL_LEAVE_MESSAGE_FILE = "resources/please_leave_message_perso.wav"
BLOCKED_GREETING_FILE = "resources/blocked_greetings_perso.wav"

Comme pour le projet PiHole, on peut créer un fichier de service pour lancer automatiquement callattendant au démarrage du pi.

sudo vi /etc/systemd/system/callattendant.service

Dans lequel on mettra le service suivant :

[Unit]
Description=Callattendant service (virtual env)
After=multi-user.target

[Service]
Type=simple
User=pi
ExecStart=/home/pi/callattendant/bin/callattendant --config /home/pi/callattendant/app.cfg
Restart=on-abort

[Install]
WantedBy=multi-user.target

Puis on peut vérifier que tout fonctionne :

  1. on démarre le service :

     systemctl start callattendant
    
  2. on vérifie que tout est ok :

     systemctl status callattendant
    
        
     * callattendant.service - Callattendant service (virtual env)
     Loaded: loaded (/etc/systemd/system/callattendant.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-02-20 12:48:23 CET; 1 weeks 2 days ago
     Main PID: 3787 (callattendant)
         Tasks: 8 (limit: 2063)
     CGroup: /system.slice/callattendant.service
             `-3787 /home/pi/callattendant/bin/python3.7 /home/pi/callattendant/bin/callattendant --config /home/pi/callattendant/app.cfg
    
     f�vr. 26 10:22:02 pihole callattendant[3787]: Waiting for next call...
     f�vr. 26 10:22:02 pihole callattendant[3787]: {RING LED BLINKING}
     f�vr. 26 10:22:02 pihole callattendant[3787]: > Queueing call 0615****** for processing
     f�vr. 26 10:22:02 pihole callattendant[3787]: Incoming call from 0615******
     f�vr. 26 10:22:02 pihole callattendant[3787]: > Checking whitelist(s)
     f�vr. 26 10:22:02 pihole callattendant[3787]: >> Checking permitted patterns...
     f�vr. 26 10:22:03 pihole callattendant[3787]: > Checking blacklist(s)
     f�vr. 26 10:22:03 pihole callattendant[3787]: >> Checking blocked patterns...
     f�vr. 26 10:22:03 pihole callattendant[3787]: >> Checking shouldianswer...
     f�vr. 26 10:22:03 pihole callattendant[3787]: Caller has been screened
    
  3. Pour activer le service au redémarrage :

     systemctl enable callattendant
    

Note : Quand on modifie le fichier service pour que les modifications soient prisent en compte il faut penser à recharger le daemon :

sudo systemctl daemon-reload

Si tout est ok vous pouvez vous rendre sur la page de contrôle de callattendant à l’adresse de votre pi sur le port 5000

http://192.168.0.123:5000/

note : Il y a une traduction en français des différents écrans qui est en attente d’être ajoutée au projet :

Demande de pull pour la traduction française.

En espérant que ce projet vous aura plu et qu’il va vous permettre de filtrer les appels gênants.


Pour échanger au sujet du projet il y a notre page Github :

En cas de questions rendez-vous ici

En cas de bug vous pouvez ouvrir un ticket :

En cas de bugs rendez-vous ici

Rejoignez-nous sur notre page Facebook .