Documentation - Service de Notification

1. Introduction

Ce document explique comment utiliser le service de notification, aussi bien pour les applications mobiles que pour le web. Il inclut le processus d’enregistrement, la gestion des désabonnements, l’accès aux statistiques, ainsi que les bases URL de chaque service.

2. Base URL

La base URL pour accéder à l’API est :

https://services-innov.com/push/

3. Enregistrement d’un appareil

Avant de recevoir des notifications, il faut enregistrer l’appareil.

3.1. Mobile

Voici le déroulé comment enregistrer un appareil mobile(Android ou iOS) :

POST push/devices/register
Content-Type: application/json

{
    "userId": "user123",
    "token": "fcm_device_token_from_mobile_app", 
    "platform": "android", // ou ios
    "deviceInfo": {
      "model": "Samsung Galaxy S21", // ou iPhone 13 Pro Max
      "osVersion": "Android 12", // ou iOS 15.6.1
      "appVersion": "2.1.0", 
      "locale": "fr-FR" 
    },
    "deviceId": "device_unique_id" 
  }

3.2. Web

Le processus d’enregistrement Web se déroule en trois étapes : récupérer la clé VAPID, créer une souscription via le Service Worker, puis enregistrer l’appareil auprès de l’API.

3.2.1. Front office (Chrome / Firefox)

Étape 1 : Récupérer la clé VAPID

GET push/devices/vapid-key

Étape 2 : Créer la souscription (extrait JavaScript minimal)

// Exemple (navigateur)
const publicKey = await fetch(`${BASE_API}/push/devices/vapid-key`).then(r => r.json()).then(d => d.publicKey);
const registration = await navigator.serviceWorker.register('/sw.js');
const subscription = await registration.pushManager.subscribe({
  userVisibleOnly: true,
  applicationServerKey: urlBase64ToUint8Array(publicKey)
});

// Récupération des clés pour l'enregistrement serveur
const p256dhKey = btoa(String.fromCharCode(...new Uint8Array(subscription.getKey('p256dh'))));
const authKey = btoa(String.fromCharCode(...new Uint8Array(subscription.getKey('auth'))));

Étape 3 : Enregistrer l'appareil

POST push/devices/register
Content-Type: application/json

{
  "userId": "user123",
  "platform": "web_chrome", // ou "web_firefox"
  "deviceInfo": {
    "userAgent": "Mozilla/5.0 ...",
    "locale": "fr-FR",
    "webPushSubscription": {
      "endpoint": "https://fcm.googleapis.com/fcm/send/abc123",
      "keys": {
        "p256dh": "P256DH_KEY",
        "auth": "AUTH_KEY"
      }
    }
  }
}

3.2.2. Backoffice

Les appareils Backoffice sont enregistrés sur un endpoint dédié et sont automatiquement exclus des broadcasts généraux.

POST push/devices/register/backoffice-device
Content-Type: application/json

{
  "userId": "admin_user_123",
  "deviceInfo": {
    "webPushSubscription": {
      "endpoint": "https://fcm.googleapis.com/fcm/send/abc123",
      "keys": {
        "p256dh": "P256DH_KEY",
        "auth": "AUTH_KEY"
      }
    }
  },
  "isBackoffice": true
}

4. Désabonnements

Pour vous désabonner des notifications, utilisez les routes suivantes. Vous pouvez cibler un deviceId précis ou utiliser la route générique qui accepte token ou deviceId.

4.1. Désinscrire un appareil (par deviceId)

DELETE push/devices/{deviceId}

4.2. Route générique (token ou deviceId)

Permet de se désinscrire en envoyant soit le token de l'appareil, soit le deviceId (la résolution du token est faite côté serveur).

DELETE push/devices/unregister?token=DEVICE_TOKEN
DELETE push/devices/unregister?deviceId=DEVICE_ID
La désinscription est traitée de façon asynchrone via Kafka. La réponse indique que la requête a été mise en file d’attente.

5. Statistiques

Pour chaque service, vous pouvez obtenir des statistiques précises :

5.1. Statistiques globales (KPIs)

Service push:
base url: https://services-innov.com/push/
endpoint: push/stats
GET https://services-innov.com/push/push/stats
Service email:
base url: https://services-innov.com/email/
endpoint: email/stats
GET https://services-innov.com/email/email/stats
Service sms:
base url: https://services-innov.com/sms/
endpoint: sms/stats
GET https://services-innov.com/sms/sms/stats

5.2. Statistiques détaillées

Service push:
base url: https://services-innov.com/push/
endpoint: push/stats/details
GET https://services-innov.com/push/push/stats/details
Service email:
base url: https://services-innov.com/email/
endpoint: email/stats/details
GET https://services-innov.com/email/email/stats/details
Service sms:
base url: https://services-innov.com/sms/
endpoint: sms/stats/details
GET https://services-innov.com/sms/sms/stats/details

6. Base URL par service