TelePing v1.0.7 · Support veille & écran verrouillé via TelecomManager

Ne laissez plus une coupure réseau silencieuse bloquer vos appels critiques.

Le bug de désinscription IMS / VoLTE frappe en traître : votre smartphone affiche 4 barres de réseau, mais les appels basculent directement sur répondeur sans sonner. TelePing orchestre des pings silencieux programmés entre deux téléphones, corrèle chaque test par Trace ID et alerte immédiatement votre domotique en cas de coupure.

0,00 €
Appels GSM calibrés à 10s non décrochés : 0 minute décomptée.
100% Silencieux
Suppression automatique immédiate de la notification d'appel manqué.
Souverain
Webhooks HTTP/HTTPS directs vers votre Home Assistant, sans cloud tiers.
Android 8 à 14+
Réveil garanti par AlarmManager exact même en sommeil profond (Doze Mode).
Deux Rôles Complémentaires

Les 2 Modes de TelePing : Sender & Receiver

Un seul et même APK Android teleping.apk configurable en un clic selon l'appareil.

14:30
5G 96%
TelePing HA
Émetteur (Sonde GSM)
v1.0.7
● Émetteur (Tél 2)
○ Récepteur
Numéro cible à appeler
+33 6 12 34 56 78 (Tél Principal)
URL du Webhook Home Assistant
http://192.168.1.50:8123/api/webhook/...
Intervalle
30 min
Sonnerie
10 sec
Pause la nuit (22h - 08h)
Surveillance active (prochain ping dans 18 min)
Dernier Trace ID : trk_1728112500_8fa2
[14:30:00] Init test trk_1728112500_8fa2
[14:30:00] Webhook call_initiated ➔ 200 OK
[14:30:01] Appel GSM lancé vers +33612345678
[14:30:11] 10s écoulées ➔ Raccrochage auto
[14:30:11] Webhook call_completed émis.
Sonde Émettrice Autonome

Le gardien silencieux branché chez vous

Ce mode est destiné à un second smartphone Android (un vieux smartphone recyclé branché sur son chargeur avec un forfait à 2€ ou illimité). Il a pour mission unique de se réveiller toutes les 30 minutes, d'émettre un ping GSM vers votre smartphone principal et de prévenir votre serveur domotique.

⏰ AlarmManager Exact While Idle

Réveille le processeur du téléphone même en veille prolongée (Doze Mode Android), garantissant une régularité horlogère.

📞 Calibrage Précis à 10s

Fait retentir 2 sonneries sur le récepteur et raccroche avant que le répondeur de l'opérateur ne prenne la ligne (0€ facturé).

🆔 Trace ID Unique par Cycle

Chaque test génère un jeton unique (ex: trk_...) envoyé dans call_initiated pour corréler la réponse sur Home Assistant.

🔌 Raccrochage Automatique

Invoque directement l'API système TelecomManager.endCall(). Aucun bouton physique à presser.

Configuration en 3 clics :

1

Renseignez le numéro cible

Saisissez le numéro de votre smartphone principal (ex: +33612345678) et l'URL Webhook Home Assistant.

2

Validez les permissions d'appel

Accordez la permission CALL_PHONE pour permettre à l'application d'émettre l'appel en tâche de fond.

3

Désactivez l'optimisation de batterie

Cliquez sur "Désactiver Optimisation Batterie" pour que le système Android ne coupe pas le processus en veille.

14:30
5G 88%
TelePing HA
Récepteur (Sentinelle)
v1.0.7
○ Émetteur
● Récepteur (Principal)
Numéro autorisé (Sonde Émettrice)
+33 7 89 01 23 45 (Sonde Tél 2)
Nom du contact émetteur
Sonde GSM Maison
URL du Webhook Home Assistant
http://192.168.1.50:8123/api/webhook/...
Masquer les notifications d'appel manqué
Efface instantanément l'appel test de l'écran de verrouillage.
Nettoyer le journal d'appels
Sentinelle en veille · À l'écoute des sonneries
Dernier ping reçu : 14:30:05 (Validé)
[14:30:05] Appel entrant détecté de +33789012345
[14:30:05] Webhook call_detected ➔ 200 OK
[14:30:07] Notif d'absence interceptée & masquée
[14:30:08] Ligne de log d'appel purgée.
Sentinelle Réceptrice Discrète

Votre smartphone du quotidien, 100% préservé

Ce mode s'installe sur votre smartphone principal (celui où vous attendez les appels critiques, par exemple de l'hôpital ou d'un client). Grâce à son architecture de filtrage, il valide la disponibilité de la ligne sans jamais vous importuner.

🛡️ Filtre Strict sur la Sonde

Seul le numéro de votre Sonde est capté. Si l'hôpital ou un proche appelle, TelePing n'interfère jamais : votre téléphone sonne normalement et l'appel reste intact.

🧹 Zéro Notification Résiduelle

Grâce à NotificationListenerService, la notification d'appel en absence du test est instantanément effacée de l'écran de verrouillage et de la barre d'état.

📞 Priorité aux Appels en Cours

Si vous êtes déjà en communication (ex: avec un médecin) quand le ping survient, TelePing valide la ligne avec le statut already_in_call_line_active sans émettre de double-bip gênant.

🔒 Zéro Fuite de Données

L'application n'accède à aucun contenu de message, n'enregistre aucune voix et communique directement avec votre propre serveur via votre réseau local ou HTTPS.

Configuration en 3 clics :

1

Saisissez le numéro de votre Sonde

Indiquez le numéro de téléphone de la Sonde (Tél 2) pour que le récepteur ignore automatiquement les appels d'autres contacts.

2

Autorisez le masquage des notifications

Cliquez sur "Masquer les notifications d'appel manqué" pour activer le droit d'accès aux notifications Android.

3

Lancez l'écoute

Cliquez sur "Démarrer l'écoute". Le service d'arrière-plan veille silencieusement sur votre ligne.

Comparatif des Rôles : Émetteur vs Récepteur

Une répartition optimale des tâches pour une surveillance 100% robuste et zéro nuisance.

Caractéristique Mode Émetteur (Sender / Sonde) Mode Récepteur (Receiver / Sentinelle)
Appareil cible Second smartphone (branché sur secteur chez vous) Votre smartphone principal (usage quotidien)
Type de carte SIM SIM secondaire (forfait voix basique ou 2€) Votre SIM principale (Orange, SFR, Bouygues, Free)
Rôle dans le cycle Initie le test, émet l'appel GSM, raccroche à 10s Détecte la sonnerie entrante, confirme la disponibilité
Événements Webhooks call_initiated, call_completed call_detected, already_in_call_line_active
Gestion du sommeil Android AlarmManager.setExactAndAllowWhileIdle() ReceiverService (Foreground Service persistant)
Nettoyage automatique Non nécessaire (appels sortants) Effacement de la notification + Purge du journal d'appels
Comportement appel de tiers Ne reçoit aucun appel Totalement transparent : l'appel tiers sonne normalement
Permissions requises CALL_PHONE, ANSWER_PHONE_CALLS READ_PHONE_STATE, NOTIFICATION_LISTENER
Corrélation par Trace ID

Le Schéma du Flow : Architecture & Déroulement

Comment les deux téléphones collaborent avec Home Assistant sans décrocher l'appel pour certifier que votre ligne est joignable.

Étape 1 & 5
📱
Tél 2 (Sonde Émettrice)
Réveil toutes les 30 min. Génère le Trace ID unique et émet l'appel GSM de 10 secondes.
POST call_initiated
Trace: trk_1728112500_8fa2
Étape 2 : Transmission
🌐
Réseau GSM / VoLTE
Achemine la sonnerie vers le téléphone principal sans déclencher le répondeur.
Status: Liaison radio OK
Coût: 0,00 € (Non décroché)
Étape 3 : Détection
📲
Tél Principal (Sentinelle)
Capte la sonnerie de la Sonde, envoie le webhook et masque la notification d'absence.
POST call_detected
Notif manquée: Effacée
Étape 4 : Corrélation
🏠
Home Assistant (Watchdog)
Tour de contrôle. Réarme le compte à rebours de 35 min à chaque sonnerie validée.
Timer: Réarmé à 35:00
État: Ligne Opérationnelle
1 Réveil Tél 2 & Webhook call_initiated
➔
2 Sonnerie GSM 10s vers Tél Principal
➔
3 Détection sonnerie & Webhook call_detected
➔
4 Watchdog HA réarmé à 35 min
➔
5 Raccrochage auto 0€ & Masquage notif
🚨

ALERTE CRITIQUE DÉCLENCHÉE · Panne Ligne Orange Détectée

Aucun ping GSM validé depuis plus de 35 minutes ! Le téléphone principal a silencieusement perdu sa connexion au serveur IMS opérateur. Le Watchdog Home Assistant a expiré : alerte sonore immédiate sur vos enceintes TTS et notification prioritaire sur vos écrans : "Attention ! Redémarrez votre smartphone Orange immédiatement pour ne pas rater l'appel de l'hôpital !"

Émetteur (Tél 2)
Réseau GSM Orange
Récepteur (Principal)
Home Assistant
T + 0.0s Tél 2 ➔ Home Assistant Émission de l'événement Webhook call_initiated avec le Trace ID Voir JSON ➔
T + 0.8s Tél 2 ➔ Réseau GSM Déclenchement de l'appel téléphonique vers le numéro cible (laisse sonner 10s) Détails ➔
T + 4.5s Réseau GSM ➔ Tél Principal Sonnerie entrante interceptée par CallStateReceiver (Vérifie numéro de la Sonde) Détails ➔
T + 5.0s Tél Principal ➔ Home Assistant Émission Webhook call_detected : sonnerie confirmée en temps réel ! Voir JSON ➔
T + 5.2s Home Assistant Corrélation validée : Réarmement du Watchdog à 35:00 et log de succès Détails ➔
T + 10.8s Tél 2 (Système) Raccrochage automatique via TelecomManager.endCall() (0€ facturé) Détails ➔
T + 11.0s Tél 2 ➔ Home Assistant Émission Webhook call_completed (statut hung_up: true) Voir JSON ➔
T + 11.2s Tél Principal NotificationListenerService efface la notification d'appel manqué de l'écran Détails ➔
Payload JSON
// Cliquez sur une étape pour inspecter le payload
Protocole Ouvert & Universel

Documentation Développeur du Webhook

Spécification technique détaillée des requêtes HTTP POST émises par TelePing vers Home Assistant ou vos propres serveurs.

Spécifications du Protocole HTTP

Chaque événement déclenché par l'émetteur ou le récepteur est transmis via une requête HTTP POST asynchrone.

POST Méthode HTTP
Content-Type: application/json; charset=UTF-8
Timeout: 10 000 ms
Protocoles : HTTP (LAN) & HTTPS (TLS)
Codes HTTP attendus : 200, 201, 204

Dictionnaire des champs JSON

Champ Type Événements concernés Description & Exemple
event string Tous Type d'événement : call_initiated, call_detected, call_completed, test_webhook
trace_id string call_initiated, call_completed Identifiant unique de corrélation du test (ex: "trk_1728112500_8fa2")
device_role string Tous Rôle de l'appareil émettant le webhook : "caller" (émetteur) ou "receiver" (récepteur)
target_phone string call_initiated, call_completed Numéro de téléphone cible appelé au format international ou local (ex: "+33612345678")
caller_phone string call_detected Numéro de l'appelant ayant déclenché la sonnerie sur le récepteur (ex: "+33789012345")
status string call_detected Statut d'interception : "ringing_confirmed" (sonnerie normale) ou "already_in_call_line_active" (en ligne avec un tiers)
duration_seconds integer call_completed Durée programmée de sonnerie avant raccrochage en secondes (ex: 10)
hung_up boolean call_completed Indique si la commande système TelecomManager.endCall() a été exécutée avec succès (true)
timestamp string Tous Horodatage ISO-8601 UTC à la seconde près (ex: "2026-10-05T14:30:00Z")

Exemples de payloads JSON & Configurations

{
  "event": "call_initiated",
  "trace_id": "trk_1728112500_8fa2",
  "device_role": "caller",
  "target_phone": "+33612345678",
  "ring_duration_seconds": 10,
  "timestamp": "2026-10-05T14:30:00Z"
}
{
  "event": "call_detected",
  "device_role": "receiver",
  "caller_phone": "+33789012345",
  "status": "ringing_confirmed",
  "timestamp": "2026-10-05T14:30:05Z"
}

// Note : Si l'utilisateur est déjà en communication (ex: en ligne avec l'hôpital) :
// "status": "already_in_call_line_active"
{
  "event": "call_completed",
  "trace_id": "trk_1728112500_8fa2",
  "device_role": "caller",
  "target_phone": "+33612345678",
  "duration_seconds": 10,
  "hung_up": true,
  "timestamp": "2026-10-05T14:30:10Z"
}
{
  "event": "test_webhook",
  "device_role": "caller", // ou "receiver"
  "message": "Connexion TelePing vers le Webhook fonctionnelle !",
  "timestamp": "2026-10-05T14:28:40Z"
}
# automations.yaml
# 1. Réception et Corrélation du Webhook GSM TelePing
- alias: "AutoCaller - Réception Webhook GSM"
  id: autocaller_reception_webhook_gsm
  mode: queued
  trigger:
    - platform: webhook
      webhook_id: "autocaller_gsm_webhook"
      allowed_methods:
        - POST
      local_only: false # true si Wi-Fi LAN uniquement
  action:
    - choose:
        # A. L'émetteur initie le test
        - conditions:
            - condition: template
              value_template: "{{ trigger.json.event == 'call_initiated' }}"
          sequence:
            - service: input_text.set_value
              target:
                entity_id: input_text.dernier_trace_id_gsm
              data:
                value: "{{ trigger.json.trace_id }}"
            - service: logbook.log
              data:
                name: "TelePing"
                message: "Test GSM initié (Trace: {{ trigger.json.trace_id }}) vers {{ trigger.json.target_phone }}"

        # B. Le récepteur confirme la sonnerie reçue !
        - conditions:
            - condition: template
              value_template: "{{ trigger.json.event == 'call_detected' }}"
          sequence:
            - service: input_boolean.turn_on
              target:
                entity_id: input_boolean.ligne_orange_operationnelle
            - service: timer.start
              target:
                entity_id: timer.watchdog_ligne_orange
            - service: logbook.log
              data:
                name: "TelePing"
                message: "✅ Ping validé sur Tél Principal ! Watchdog réarmé."

# 2. Chien de garde (Watchdog) : Alerte critique si timer de 35 min expire
- alias: "AutoCaller - Alerte Ligne Orange Hors Service"
  id: autocaller_alerte_ligne_orange_ko
  trigger:
    - platform: event
      event_type: timer.finished
      event_data:
        entity_id: timer.watchdog_ligne_orange
  action:
    - service: input_boolean.turn_off
      target:
        entity_id: input_boolean.ligne_orange_operationnelle
    - service: notify.notify
      data:
        title: "🚨 ALERTE CRITIQUE - LIGNE GSM COUPÉE"
        message: "Aucun appel de test n'a abouti depuis plus de 35 min ! REDÉMARREZ LE SMARTPHONE IMMÉDIATEMENT pour ne pas rater l'appel de l'hôpital !"
        data:
          channel: "Urgent"
          priority: high
          ttl: 0
# configuration.yaml
input_boolean:
  ligne_orange_operationnelle:
    name: "Ligne Orange Principale"
    icon: mdi:phone-check

input_text:
  dernier_trace_id_gsm:
    name: "Dernier Trace ID GSM"
    icon: mdi:identifier

timer:
  watchdog_ligne_orange:
    name: "Watchdog Ligne Orange"
    duration: "00:35:00"
const express = require('express');
const app = express();
app.use(express.json());

let lastReceivedPing = Date.now();
const WATCHDOG_LIMIT_MS = 35 * 60 * 1000; // 35 minutes

app.post('/api/webhook', (req, res) => {
  const { event, trace_id, caller_phone, status } = req.body;
  console.log(`[TelePing Webhook] ${event} | Trace: ${trace_id || 'N/A'}`);

  if (event === 'call_detected') {
    lastReceivedPing = Date.now();
    console.log(`✅ Ligne fonctionnelle confirmée (${caller_phone}, status: ${status})`);
  }

  res.status(200).json({ status: 'ok' });
});

// Chien de garde (Watchdog)
setInterval(() => {
  const diff = Date.now() - lastReceivedPing;
  if (diff > WATCHDOG_LIMIT_MS) {
    console.error("🚨 ALERTE CRITIQUE : Aucun ping GSM depuis > 35 min !");
    // Déclenchez votre alerte (Telegram, SMS, alarme sonore)
  }
}, 60 * 1000);

app.listen(3000, () => console.log('Serveur Webhook prêt sur port 3000'));
from flask import Flask, request, jsonify
import time

app = Flask(__name__)
last_ping = time.time()
WATCHDOG_LIMIT = 35 * 60 # 35 minutes

@app.route('/api/webhook', methods=['POST'])
def handle_webhook():
    global last_ping
    payload = request.get_json(force=True)
    event = payload.get('event')
    
    print(f"[TelePing] {event} (Trace: {payload.get('trace_id')})")
    
    if event == 'call_detected':
        last_ping = time.time()
        print("✅ Ping validé : la ligne GSM fonctionne !")
        
    return jsonify({"status": "received"}), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
APK Android Officiel · v1.0.7

Téléchargez TelePing et sécurisez votre ligne dès aujourd'hui

Installez le fichier teleping.apk directement sur vos deux téléphones. Mises à jour intégrées avec détection automatique de nouvelle version via version.json.

Télécharger teleping.apk (5.3 Mo) Vérifier version.json (API)
QR Code Téléchargement TelePing Scannez pour installer directement sur Android
Questions Fréquentes

Tout ce que vous devez savoir sur TelePing

Est-ce que ces appels de test me coûtent de l'argent ?

0,00 €. Un appel non décroché (qui émet 1 ou 2 sonneries puis raccroche automatiquement au bout de 10 secondes) n'est jamais facturé par les opérateurs télécoms et ne décompte aucune minute sur votre forfait.

L'application peut-elle bloquer l'appel critique de l'hôpital ?

Absolument pas. Sur votre téléphone principal (mode Récepteur), l'application filtre strictement sur le numéro autorisé de votre Sonde (Tél 2). Tout autre appel entrant (hôpital, proche, médecin, client) sonne normalement, fait vibrer votre smartphone et n'est jamais raccroché par l'application.

Et si je suis déjà en communication téléphonique quand le test arrive ?

TelePing détecte automatiquement l'état CALL_STATE_OFFHOOK. Il ne coupe pas votre communication et émet le webhook avec le statut "already_in_call_line_active". Votre ligne étant active, le test est validé et votre conversation n'est pas perturbée !

L'application fonctionne-t-elle la nuit avec l'écran éteint ?

Oui. TelePing utilise un Foreground Service certifié Android avec notification permanente et réveille le processeur via AlarmManager.setExactAndAllowWhileIdle(). N'oubliez pas de cliquer sur "Désactiver Optimisation Batterie" au premier lancement.

Sur Android 13/14, comment autoriser le masquage des notifications si l'option est grisée ?

Sur Android 13 et 14, pour les applications installées hors Play Store (via APK), Android active par défaut la sécurité "Paramètres restreints". Pour autoriser l'accès aux notifications : allez dans Paramètres du téléphone > Applications > TelePing > appuyez sur les 3 petits points verticaux en haut à droite > "Autoriser les paramètres restreints". Vous pourrez ensuite activer le commutateur dans TelePing en un clic.

Que faire en cas d'alerte de perte de ligne ?

Redémarrez simplement votre smartphone Orange pour forcer une ré-authentification sur l'antenne relais et le serveur IMS. En préventif, vous pouvez aussi désactiver l'option "Appels Wi-Fi (VoWiFi)" dans les paramètres réseau de votre carte SIM.

Copié dans le presse-papier !