OmniRoam
OmniRoam est la solution complète de gestion des revenus de gros pour les opérateurs de roaming d'Omnitouch. Elle gère l'ensemble du cycle de vie des CDRs de données de roaming (Call Detail Records), de l'ingestion à l'évaluation, jusqu'à la génération de fichiers TAP3 et aux rapports.
Table des Matières
- Aperçu
- Guide des Opérations
- Architecture du Système
- Guide de Configuration
- Décisions Architecturales
Aperçu
OmniRoam traite les CDRs de roaming des opérateurs de réseaux mobiles, les évalue à l'aide du moteur de tarification OmniCharge, génère des fichiers TAP3 conformes aux normes GSMA pour la facturation, et fournit des capacités de surveillance et de reporting complètes.

Processus d'Importation et d'Évaluation des CDR
Processus d'Export TAP3
Guide des Opérations
Exécution de l'Export TAP3
# Export pour un partenaire spécifique
python3 export_TAP3.py VZW_Live
# Mode interactif (demande pour le partenaire)
python3 export_TAP3.py
Le processus d'exportation :
- Interroge les CDRs des 30 derniers jours (exigence GSMA)
- Filtre les CDRs marqués comme déjà traités
- Exclut les CDRs avec un temps de fin inférieur à 1 heure (empêche les sessions incomplètes)
- Regroupe les CDRs par partenaire de roaming
- Génère un fichier TAP3 par partenaire
- Marque les CDRs comme traités dans la base de données
- Incrémente le compteur de séquence
- Pousse les métriques vers InfluxDB
Surveillance & Reporting
OmniRoam pousse des métriques en temps réel vers InfluxDB pour la surveillance et l'analytics.
Métriques Collectées
Métriques CDR Brutes Poussées pendant le processus d'importation et d'évaluation des CDR :
- operator : Identifiant du partenaire de roaming
- input_file : Nom du fichier CSV source
- apn : Nom du Point d'Accès (identifiant du service de données)
- cellId : Identifiant de la tour cellulaire
- imsi : Identité de l'abonné
- tac : Code de Zone de Suivi
- sGWAddress : Adresse IP de la passerelle de service
- pGWAddress : Adresse IP de la passerelle PDN
- chargeableUnits : Total des octets utilisés
- chargedUnits : Coût calculé
Métriques d'Export TAP Poussées pendant le processus de génération de fichier TAP3 :
- operator : Identifiant du partenaire de roaming
- filename : Nom du fichier TAP3 généré
- totalcharge : Charge totale dans le fichier TAP3
- totalconsumed : Total des octets dans le fichier TAP3
- cdr_count : Nombre de CDRs dans le fichier TAP3
Requêtes de Tableau de Bord
Exemples de requêtes InfluxDB pour la surveillance :
Revenus par Opérateur
SELECT sum("totalcharge")
FROM "tap_cdr"
WHERE time > now() - 30d
GROUP BY "operator"
Utilisation des Données par TAC
SELECT sum("chargeableUnits")
FROM "raw_cdr"
WHERE time > now() - 7d
GROUP BY "tac"
Volume de CDR par Heure
SELECT count("chargeableUnits")
FROM "raw_cdr"
WHERE time > now() - 24h
GROUP BY time(1h)
Revenus par APN
SELECT sum("chargedUnits")
FROM "raw_cdr"
WHERE time > now() - 7d
GROUP BY "apn"
Intégration Grafana
Créez des tableaux de bord Grafana en utilisant ces métriques pour :
- Surveillance des revenus en temps réel
- Analyse des modèles de trafic
- Suivi des performances des partenaires
- Utilisation des ressources réseau
- Détection d'anomalies
- Réconciliation de facturation
Dépannage

Problèmes d'Importation des CDR
Vérifiez les journaux à /tmp/import_CDR_Logger_Marben_*.log
Problèmes courants :
- Format IMSI invalide
- Champs requis manquants
- Erreurs de conversion de fuseau horaire
- Identifiants de facturation en double
Problèmes d'Export TAP3
Vérifiez les journaux à /tmp/tap3_export_*.log
Problèmes courants :
- Aucun CDR dans les 30 derniers jours
- Configuration TAC manquante
- Numéro de séquence invalide
- Erreurs de connexion à la base de données
Erreurs de Tarification OmniCharge
Examinez les journaux OmniCharge pour :
- Plans tarifaires manquants
- Compte non trouvé
- Valeurs d'utilisation invalides
- Erreurs de conversion de devise
Problèmes de Connexion InfluxDB
Vérifiez :
- URL InfluxDB accessible
- Jeton d'authentification valide
- Le bucket existe
- Connectivité réseau
Support & Maintenance
Emplacements des Journaux
- Importation CDR :
/tmp/import_CDR_Logger_Marben_*.log - Export TAP :
/tmp/tap3_export_*.log
Fichiers de Configuration Clés
- config.yaml - Configuration principale (tarifs des partenaires, paramètres réseau, connexion InfluxDB)
- counters.yaml - Compteurs de séquence des fichiers TAP3
Tâches de Maintenance Régulières
- Surveiller les compteurs de séquence - Assurez-vous qu'ils ne dépassent pas 99999
- Archiver les anciens fichiers TAP - Déplacer les fichiers plus anciens que la période de conservation
- Surveiller l'utilisation du disque InfluxDB - Configurer des politiques de conservation
- Examiner les configurations tarifaires - Mettre à jour lorsque les tarifs des partenaires changent
- Sauvegarder les fichiers de configuration - config.yaml et counters.yaml
- Surveiller l'arriéré de CDR - Assurer un traitement en temps opportun
Architecture du Système
Aperçu de Haut Niveau
Processus d'Importation des CDR
OmniRoam utilise un processus d'importation en deux étapes avec le Cache comme couche d'agrégation temporaire pour assembler des enregistrements CDR partiels en CDRs complets et facturables.
Comprendre les CDRs Partiels
Les éléments de réseau mobile (S-GW/P-GW) ne génèrent pas un seul CDR pour une session de données. Au lieu de cela, ils produisent plusieurs enregistrements CDR partiels tout au long du cycle de vie de la session :
- Enregistrement de Début : Généré lorsque la session de données commence
- Enregistrements de Mise à Jour : Générés périodiquement pendant la session (par exemple, toutes les 15 minutes ou tous les 100 Mo d'utilisation de données)
- Enregistrement d'Arrêt : Généré lorsque la session se termine
Chaque enregistrement partiel contient des données d'utilisation incrémentales. Pour une facturation précise, OmniRoam doit :
- Identifier quels enregistrements partiels appartiennent à la même session de données
- Agrégater les données d'utilisation de tous les enregistrements partiels
- Calculer la durée totale de la session
- Assembler un CDR complet représentant l'ensemble de la session
Pourquoi le Cache pour l'Agrégation des CDR ?
Le Cache sert de zone de stockage temporaire à haute performance où les CDRs partiels s'accumulent jusqu'à ce que la session soit complète. Le Cache fournit :
- Recherches clé-valeur rapides - Trouver instantanément les CDRs partiels existants pour une session
- Stockage en mémoire - Opérations de lecture/écriture à grande vitesse pour une agrégation en temps réel
- Opérations atomiques - Mises à jour sécurisées et concurrentes provenant de plusieurs processus d'importation
- Persistance - Les CDRs survivent aux redémarrages du système pendant la fenêtre d'agrégation
Architecture d'Importation en Deux Étapes
Étape 1 : Analyse CSV et Agrégation des CDRs Partiels
La première étape lit en continu les fichiers CSV des éléments de réseau S-GW et agrège les CDRs partiels dans le Cache.
Comment les CDRs Partiels Sont Identifiés et Appariés
OmniRoam doit déterminer quels enregistrements partiels appartiennent à la même session de données. Chaque session est identifiée de manière unique par un ID de Session composite composé de :
- ID de Facturation : Identifiant de session unique provenant de l'élément réseau
- IMSI : Identité de l'abonné (identifiant du numéro de mobile)
- Date : Date de la session dans le fuseau horaire du réseau de service
- Adresse IP de P-GW : Passerelle qui a géré la session
- TAC : Code de Zone de Suivi (emplacement de la tour cellulaire)
- QCI : Classe de Qualité de Service
Cette combinaison garantit que tous les enregistrements partiels de la même session de données sont regroupés, même lorsque plusieurs fichiers arrivent dans le désordre.
Comment les CDRs Partiels Sont Agrégés
Lorsque le parseur CSV traite chaque CDR partiel :
- Générer l'ID de Session à partir des champs CDR
- Vérifier le Cache pour voir si cette session existe déjà
- Si la session existe dans le Cache :
- Récupérer les données CDR accumulées
- Vérifier que ce fichier n'a pas été traité auparavant (évite les doublons)
- Ajouter les nouvelles données d'utilisation : octets entrants + octets sortants
- Mettre à jour la durée de la session en utilisant les horodatages les plus anciens et les plus récents
- Stocker les métadonnées concernant cet enregistrement partiel à des fins d'audit
- Enregistrer le CDR mis à jour dans le Cache
- Si nouvelle session :
- Créer une nouvelle entrée CDR dans le Cache
- Initialiser les compteurs d'utilisation et les métadonnées de session
- Enregistrer l'horodatage du premier enregistrement partiel
Piste de Vérification et Métadonnées
Chaque enregistrement partiel qui contribue à un CDR est suivi avec des métadonnées complètes :
- Nom de fichier source : Quel fichier CSV contenait cet enregistrement partiel
- Horodatage : Quand l'élément réseau a généré cet enregistrement
- Temps de traitement : Quand OmniRoam l'a reçu et traité
- Contribution d'utilisation : Combien de données cet enregistrement partiel a ajouté (octets entrants/sortants)
- Type d'événement : S'il s'agissait d'un enregistrement de début, de mise à jour ou d'arrêt
- Fuseau horaire du réseau de service : Pour une conversion d'horodatage précise
Pourquoi les métadonnées sont critiques pour la comptabilité :
Cette piste de vérification permet à OmniRoam de tracer un seul coût de bout en bout à travers chaque étape de traitement, ce qui est essentiel pour :
- Résolution de litiges : Lorsque des partenaires contestent un coût, les opérateurs peuvent montrer exactement quels fichiers sources y ont contribué
- Réconciliation des revenus : Vérifier que toute l'utilisation facturable a été capturée et que rien n'a été manqué ou dupliqué
- Conformité réglementaire : Démontrer le traitement approprié des enregistrements de facturation à des fins d'audit
- Débogage : Identifier rapidement les problèmes dans le processus d'agrégation des CDR en suivant le flux de données complet
- Précision financière : S'assurer que chaque dollar facturé peut être retracé à des événements réseau spécifiques
Calcul de la Durée de Session
La durée totale de la session est calculée en trouvant :
- L'horodatage le plus ancien parmi tous les enregistrements partiels (début de la session)
- L'horodatage le plus récent parmi tous les enregistrements partiels (fin de la session)
- Durée = Dernier - Premier
Pour les sessions où seuls des enregistrements de mise à jour existent (manque de début/d'arrêt), la durée par défaut est de 24 heures.
Étape 2 : Assemblage et Tarification des CDRs
La deuxième étape scanne périodiquement le Cache pour les sessions complètes, assemble les CDRs finaux et les soumet à OmniCharge pour tarification.
Comment les CDRs Complets Sont Sélectionnés du Cache
Le Processus d'Assemblage des CDRs fonctionne en continu et examine toutes les sessions stockées dans le Cache :
- Scanner le Cache pour toutes les sessions CDR accumulées
- Traiter par lots de 1 000 sessions à la fois
- Pour chaque session :
- Extraire la date de session de l'ID de Session
- Sauter si trop ancien (> 30 jours) : Supprimer du Cache (évite l'accumulation de données obsolètes)
- Sauter si trop récent (< 24 heures) : Laisser dans le Cache pour que d'autres enregistrements partiels arrivent
- Charger le CDR complet avec toutes les données accumulées
La Période d'Attente de 24 Heures
Pourquoi OmniRoam attend-il 24 heures avant de tarifer un CDR ?
- Les enregistrements partiels arrivent dans le désordre : La congestion du réseau peut retarder la livraison des fichiers CSV de plusieurs heures
- Les sessions s'étendent jusqu'à minuit : Une session commençant à 23h50 génère des fichiers sur deux dates différentes. Le même ID de facturation peut s'étendre sur plusieurs jours, avec des enregistrements partiels datés différemment
- Les enregistrements de mise à jour sont retardés : Les enregistrements de mise à jour périodiques peuvent arriver bien après la fin de la session
- Génération de fichiers asynchrone : Différents éléments de réseau exportent des fichiers à des horaires différents
- Sessions longues : Les sessions de données peuvent durer des heures ou des jours, avec des enregistrements de mise à jour arrivant tout au long
En attendant 24 heures, OmniRoam s'assure que tous les enregistrements partiels sont arrivés et que le CDR est vraiment complet avant la facturation.
Validation et Enrichissement des CDRs
Avant la tarification, chaque CDR assemblé passe par la validation et l'enrichissement :
-
Valider la complétude :
- Vérifier si les enregistrements de début/arrêt sont présents
- Si seuls des enregistrements de mise à jour existent, définir la durée à 24 heures (par défaut)
-
Éliminer les CDRs invalides :
- Les sessions à utilisation nulle sont supprimées (aucune activité facturable)
-
Calculer l'utilisation finale :
- Additionner tous les octets entrants et sortants
- Appliquer les règles d'arrondi spécifiques au partenaire (par exemple, arrondir au kilo-octet le plus proche)
-
Enrichir avec des données de localisation :
- Mapper le TAC (Code de Zone de Suivi) à l'emplacement du réseau de service
- Ajouter des informations de fuseau horaire pour des horodatages précis
- Ajouter une description de l'emplacement géographique
-
Soumettre à OmniCharge :
- Envoyer le CDR complet et enrichi pour tarification
- Recevoir le coût calculé en retour
-
Stocker et nettoyer :
- Enregistrer le CDR évalué dans la base de données
- Pousser les métriques vers InfluxDB pour le reporting
- Supprimer le CDR traité du Cache
Structure des Données CDR
Chaque CDR agrégé contient :
- Informations sur l'Abonné : IMSI, MSISDN, IMEI
- Informations sur le Réseau : Passerelle de Service (S-GW), Passerelle PDN (P-GW), ID de Cellule, TAC (Code de Zone de Suivi)
- Détails de la Session : Horodatages de Début/Fin, Durée, APN (Nom du Point d'Accès)
- Données d'Utilisation : Volume de Données Entrantes/Sortantes, Total des Unités Facturables
- Informations de Localisation : BID de Service (ID du Réseau), Localisation Géographique
- Informations QoS : QCI (Identifiant de Classe de QoS)
Règles de Traitement des Données
Arrondi des Utilisations
Les CDRs sont arrondis en fonction de la configuration spécifique au partenaire dans config.yaml:
partners:
Example_Live:
round_up_to: 1024 # Arrondir l'utilisation au kilo-octet le plus proche
Le système :
- Calcule l'utilisation totale :
dataVolumeIncoming + dataVolumeOutgoing - Arrondit au multiple configuré (par exemple, 1024 octets)
- Préserve les valeurs originales pour l'audit
Localisation Basée sur le TAC
Le système détermine l'emplacement du réseau de service en fonction du TAC (Code de Zone de Suivi) :
config:
tac_config:
Global:
tac_list: ['1101', '10000', '10100']
servingBid: 72473
servingLocationDescription: 'Smallville USA'
timezone: 'America/Smallville'
Cela permet :
- Conversion de fuseau horaire appropriée pour les horodatages
- Attribution d'un emplacement géographique
- Identification du réseau de service
Moteur de Tarification OmniCharge
OmniRoam envoie les CDRs à OmniCharge, le puissant moteur de tarification qui calcule les coûts en fonction des plans tarifaires configurables.

Processus de Tarification
Configuration des Tarifs
Les tarifs sont configurés par partenaire de roaming dans le fichier de configuration :
partners:
Example_Live:
imsi_prefixes:
- 99901
rates:
unit_price: 0.000476800 # Prix par unité
unit_bytes: 1024 # Taille de l'unité en octets
batch_info:
sender: AUSIE
recipient: AAA00
accountingInfo:
localCurrency: 'USD'
tapCurrency: 'USD'
roundingAction: 'Simple'
tapDecimalPlaces: 5
Appariement de Préfixe IMSI
OmniRoam apparie les CDRs aux partenaires de roaming en utilisant l'appariement de préfixe IMSI avec la logique du plus long match en premier. Cela permet aux opérateurs de créer des configurations spécifiques pour les SIMs de test tout en maintenant des configurations générales pour le trafic de production.
Comment Fonctionne l'Appariement de Préfixe
Lors de la tarification d'un CDR, OmniRoam :
- Extrait l'IMSI du CDR (par exemple,
310410123456789) - Évalue toutes les configurations de partenaires dans l'ordre
- Trouve le préfixe correspondant le plus long
- Applique les tarifs et la configuration de ce partenaire
Exemple : Configuration de SIM de Test
Cette fonctionnalité est particulièrement utile pour les tests TADIG/IREG où les SIMs de test nécessitent un traitement différent :
partners:
Demo_Test:
imsi_prefixes:
- 0010112345123 # Plage de SIM de test (préfixe de 9 chiffres)
rates:
unit_price: 0.0 # Pas de frais pour le trafic de test
batch_info:
sender: AUSIE
recipient: AAA00TEST
Demo_Production:
imsi_prefixes:
- 001011 # Plage de production (préfixe de 6 chiffres)
rates:
unit_price: 0.000476800
batch_info:
sender: AUSIE
recipient: AAA00
Comportement d'appariement :
- IMSI
00101123451234→ Correspond àDemo_Test(le préfixe de 9 chiffres est plus long) - IMSI
00101023456789→ Correspond àDemo_Production(le préfixe de 6 chiffres)
Cela garantit que le trafic de test va vers des fichiers TAP de test avec des codes TADIG de test, tandis que le trafic de production est facturé normalement avec des codes TADIG de production.
Calcul de la Tarification
Pour chaque CDR :
- Apparier le Partenaire : Identifier le partenaire de roaming par le préfixe IMSI
- Calculer les Unités :
totalBytes / unit_bytes - Appliquer le Tarif :
units × unit_price = charge - Appliquer l'Arrondi : Arrondir en fonction de
roundingAction(Haut/Bas/Simple) - Convertir en Unités TAP : Multiplier par 1000 pour le format TAP3
Exemple :
Utilisation : 52,428,800 octets (50 Mo)
Taille de l'Unité : 1024 octets
Unités : 51,200
Tarif : 0.000476800 $ par 1 Ko
Charge : 51,200 × 0.000476800 $ = 24,41 $
Unités TAP : 24,410 (24,41 × 1000)
Attribution du Type d'Appel Basée sur le QCI
Les Classes de Qualité de Service (QCI) sont mappées aux Niveaux de Type d'Appel TAP3 :
call_type_level:
qci_1: 20 # Conversationnel (Voix)
qci_2: 22 # Conversationnel (Vidéo)
qci_3: 23 # Jeux en Temps Réel
qci_4: 24 # Streaming Tamponné
qci_5: 20 # Signalisation IMS
qci_6: 26 # Interactif (Navigation)
qci_7: 27 # Interactif (Jeux)
qci_8: 28 # Arrière-plan
qci_9: 29 # Arrière-plan (Priorité Basse)
default: 20
Génération de Fichiers TAP3
Après que les CDRs aient été évalués par OmniCharge, OmniRoam génère des fichiers TAP3 conformes aux normes GSMA pour la facturation de gros.
Flux d'Export TAP3
Structure du Fichier TAP3
Convention de Nommage des Fichiers
Les fichiers TAP3 suivent les normes de nommage GSMA :
<TypeDeFichier><Expéditeur><Destinataire><NuméroDeSéquence>
Exemples :
CDAUSIEAAA0000001 - Fichier de Données Commerciales de AUSIE à AAA00, séquence 1
TDAUSIEAAA0000001 - Fichier de Données de Test de AUSIE à AAA00, séquence 1
Où :
- TypeDeFichier :
CD(Commercial) ouTD(Test) - Expéditeur : code TADIG de 5 caractères
- Destinataire : code TADIG de 5 caractères
- NuméroDeSéquence : séquence de 5 chiffres (provenant de counters.yaml)
Guide de Configuration
Configuration des Partenaires
Ajoutez des partenaires de roaming dans config.yaml :
partners:
ONS_Live:
imsi_prefixes: # Liste des préfixes IMSI pour ce partenaire
- 505057
accessPointNameOI: mnc057.mcc505.gprs
rates:
unit_price: 0.000476800 # Prix par unité en dollars
unit_bytes: 1024 # Nombre d'octets par unité
batch_info:
sender: AUSIE # Votre code TADIG
recipient: AAA00 # Code TADIG du partenaire
specificationVersionNumber: 3
releaseVersionNumber: 12
accountingInfo:
localCurrency: 'USD'
tapCurrency: 'USD'
roundingAction: 'Simple' # Haut/Bas/Simple
tapDecimalPlaces: 5
round_up_to: 1024 # Arrondir l'utilisation au kilo-octet le plus proche
call_type_level: # Mappage QCI vers Niveau de Type d'Appel
qci_1: 20
qci_2: 22
default: 20
Configuration des Compteurs de Séquence
Initialisez les compteurs de séquence dans counters.yaml :
AAA00:
CD: 1 # Séquence de Données Commerciales
TD: 1 # Séquence de Données de Test
AAA01:
CD: 1
TD: 1
Les séquences s'incrémentent automatiquement avec chaque fichier TAP généré.
Configuration du Réseau
Configurez les mappages TAC-vers-localisation :
config:
tac_config:
LocationName:
tac_list: ['1101', '10000']
servingBid: 72473
servingLocationDescription: 'Emplacement du Réseau'
timezone: 'America/New_York'
Configuration InfluxDB
Configurez la connexion InfluxDB dans config.yaml :
config:
influx_db:
influxDbUrl: 'http://10.3.0.135:8086'
influxDbOrg: 'omnitouch'
influxDbBucket: 'Omnicharge_TAP3'
influxDbToken: 'your-token-here'
Chemins de Sortie
Configurez les emplacements de sortie des fichiers :
config:
tap_output_path: '/etc/pytap3/OutputFiles'
tap_human_readable_output_path: '/etc/pytap3/OutputFiles_Human'
tap_in_path: '/home/user/TAP_In/'
Décisions Architecturales
Pourquoi OmniCharge ?
OmniCharge fournit :
- Un moteur de tarification puissant avec des plans tarifaires flexibles
- Des capacités de tarification en temps réel
- Dé-duplication des CDR
- Pistes d'audit complètes
- Intégration basée sur API
Pourquoi InfluxDB ?
Avantages :
- Optimisé pour les métriques CDR en série temporelle
- Haut débit d'écriture
- Stockage efficace avec compression
- Échantillonnage intégré
- Intégration native avec Grafana
Résumé du Flux de Travail
OmniRoam - Gestion professionnelle des revenus de roaming par Omnitouch.