ITSkillsCenter
Business Digital

Configurer un SIP trunk Sonatel et Orange Côte d’Ivoire sur FreePBX 17 — tutoriel 2026

13 دقائق للقراءة

📍 Article principal : Asterisk + FreePBX en production pour PME ouest-africaine. Ce tutoriel détaille spécifiquement la configuration du SIP trunk avec les opérateurs locaux du Sénégal et de la Côte d’Ivoire.

L’interconnexion d’un serveur Asterisk avec le réseau commuté public passe systématiquement par un SIP trunk fourni par un opérateur télécom. Au Sénégal, Sonatel/Orange Business reste l’acteur dominant pour les blocs de SDA professionnels, complété par Free Sénégal sur les nouveaux contrats. En Côte d’Ivoire, Orange Business CI mène le marché entreprise, suivi de MTN Business et Moov Africa Business. Ce tutoriel guide la configuration pas-à-pas d’un trunk PJSIP sur FreePBX 17 jusqu’à la réalisation d’un appel entrant et d’un appel sortant validés.

Prérequis

  • FreePBX 17 installé et accessible (Debian 12, Asterisk 21 ou 22 LTS)
  • IP publique fixe ou FQDN pointant vers le serveur Asterisk, déclaré chez l’opérateur
  • Contrat SIP trunk actif avec : identifiants SIP, FQDN ou IP du SBC opérateur, plage de SDA, codecs imposés
  • Ports ouverts dans le firewall : UDP 5060 (SIP) ou 5061 (SIP-TLS), UDP 10000-20000 (RTP)
  • Niveau : intermédiaire — compréhension de SIP et des concepts de NAT
  • Temps estimé : 90 à 120 minutes

Étape 1 — Récupérer les paramètres techniques de l’opérateur

Avant toute manipulation côté serveur, il faut obtenir le document technique de l’opérateur. Sonatel transmet généralement une fiche PDF ou un courrier électronique récapitulant tous les paramètres : nom du compte SIP (souvent l’un des numéros DID principaux), mot de passe SIP de 16 à 32 caractères, FQDN du SBC d’enregistrement (par exemple sbc1.sip.sonatel.sn — le FQDN exact est communiqué dans le contrat), port SIP (5060 ou 5061), méthode d’authentification (registration ou peering IP), codecs supportés (généralement G.711 a-law et µ-law), et plage de SDA attribuée.

Côté Orange Business Côte d’Ivoire, le format du contrat est similaire mais les FQDN diffèrent (souvent sip.orange.ci ou un sous-domaine dédié au client). MTN et Moov fournissent parfois uniquement une IP publique sans FQDN — dans ce cas, déclarer cette IP comme contact PJSIP dans la configuration.

Vérifier impérativement deux points avant d’aller plus loin : la liste des IP publiques sortantes du serveur Asterisk doit être communiquée à l’opérateur pour ouverture côté SBC, et le FQDN ou l’IP fournie par l’opérateur doit répondre à un test de ping ou un nc -zvu sur le port SIP.

# Vérification de la connectivité au SBC opérateur
nc -zvu sbc1.sip.sonatel.sn 5060
# Sortie attendue : Connection to sbc1.sip.sonatel.sn 5060 port [udp/sip] succeeded!

# Vérification depuis Asterisk
asterisk -rx "core show version"
asterisk -rx "pjsip show version"

Si la commande nc échoue, le firewall sortant bloque le trafic ou l’IP du serveur n’est pas encore autorisée côté opérateur. Le ticket support de Sonatel ou Orange Business prend généralement 24 à 72 heures pour ouvrir une nouvelle adresse — anticiper.

Étape 2 — Créer le trunk PJSIP dans FreePBX

Depuis l’interface FreePBX 17, naviguer dans Connectivity → Trunks → Add Trunk → Add SIP (chan_pjsip) Trunk. L’onglet General reçoit le nom interne du trunk (par exemple sonatel_main), un libellé d’affichage explicite (Sonatel SIP Trunk Principal) et un canal d’identification de l’appelant sortant — ce dernier sera réécrit ensuite dans les routes sortantes mais doit être un DID valide de votre plage.

L’onglet pjsip Settings → General contient les paramètres de connexion. Username reçoit l’identifiant SIP fourni, Secret le mot de passe SIP, SIP Server le FQDN du SBC, SIP Server Port 5060 (ou 5061 pour TLS), Context reste sur from-trunk, Transport sur udp en première intention. Authentication est Outbound et Registration est Send dans le cas d’une registration SIP — c’est le mode majoritaire chez les opérateurs ouest-africains.

L’onglet pjsip Settings → Advanced mérite une attention particulière. Activer From Domain avec le FQDN opérateur, From User avec l’identifiant SIP, et surtout configurer correctement les paramètres NAT : Force rport à yes, Rewrite Contact à yes. Sans cela, l’opérateur enverra les paquets SIP vers une IP privée invalide et tout l’audio sera muet dans un sens (one-way audio classique).

L’onglet pjsip Settings → Codecs doit refléter exactement ce que l’opérateur autorise. Cocher ulaw et alaw, décocher tout le reste. Si la PME utilise Opus en interne, le transcodage se fait automatiquement par Asterisk entre le trunk (G.711) et les extensions internes (Opus).

Sauvegarder le trunk puis cliquer sur Apply Config en haut à droite. Asterisk recharge sa configuration PJSIP. Vérifier l’état d’enregistrement :

asterisk -rx "pjsip show registrations"
# Devrait afficher : Registered (3600s) pour le trunk sonatel_main

asterisk -rx "pjsip show endpoints"
# Le trunk doit apparaître en état Avail

Si le statut est Rejected ou Unreachable, le code de retour SIP indique la cause : 401/407 signale un problème d’authentification (vérifier mot de passe), 403 signale un blocage côté opérateur (IP source non autorisée ou compte désactivé), 408 indique un timeout réseau (firewall ou routage).

Étape 3 — Configurer la route sortante avec préfixe pays

Une fois le trunk enregistré, il faut indiquer à FreePBX comment router les appels sortants depuis les extensions vers ce trunk. Aller dans Connectivity → Outbound Routes → Add Outbound Route. Donner un nom (sortant_principal), choisir le trunk créé précédemment dans Trunk Sequence.

L’onglet Dial Patterns définit quels numéros déclenchent ce trunk. Pour un déploiement sénégalais, les patterns typiques sont :

prepend  | prefix | match pattern | CallerID
221      |        | 7XXXXXXXX     |             # Mobile Sénégal 9 chiffres → ajout 221
221      |        | 33XXXXXXX     |             # Fixe Sénégal Sonatel
         | 00     | .             |             # International, conserver tel quel

Pour la Côte d’Ivoire, le préfixe pays est 225 et les numéros mobiles font 10 chiffres. Le pattern devient 225 | | 0[1-9]XXXXXXXX en remplaçant le 0 initial par 225.

L’onglet Route CID permet de forcer le numéro affiché par défaut sur les appels sortants — utile pour qu’un commercial mobile fasse remonter le standard plutôt que sa ligne directe. Route Settings → Optional Destination on Congestion peut diriger vers un message d’attente ou une boîte vocale en cas d’indisponibilité du trunk.

Sauvegarder et appliquer. Tester depuis une extension SIP : composer un mobile externe. La trace en console confirme l’acheminement :

asterisk -rvvvv
# Dans le CLI, lancer un appel depuis l'extension 1001 vers 776543210
# Observer la trace : Executing [221776543210@from-internal:1] ...
# Dial(PJSIP/sonatel_main/sip:221776543210@sbc1.sip.sonatel.sn)

Étape 4 — Configurer la route entrante et les SDA

Les appels entrants depuis le réseau public arrivent sur Asterisk avec un numéro destinataire qui correspond à l’un des SDA de la plage attribuée par l’opérateur. FreePBX décide de la destination via le module Inbound Routes. Aller dans Connectivity → Inbound Routes → Add Inbound Route.

Dans le champ DID Number, saisir le numéro complet tel qu’il arrive sur le trunk — souvent au format E.164 sans le +, par exemple 221338000000. Pour un standard d’accueil, choisir comme destination un IVR (préalablement créé dans Applications → IVR) ou une queue. Pour une ligne directe, choisir une extension précise.

Astuce : dans la pratique, certains opérateurs envoient le DID sans le préfixe pays. Il faut alors saisir 338000000 ou laisser le DID vide et utiliser le champ CID Lookup Source pour identifier l’appelant. La trace SIP confirme le format réel via sngrep :

apt install sngrep
sngrep -d any port 5060
# Filtrer pour observer le INVITE entrant
# Repérer la ligne To: <sip:338000000@sbc1.sip.sonatel.sn>
# Le numéro entre sip: et @ est ce qu'attend FreePBX dans DID Number

Une fois la première route entrante validée, dupliquer pour chaque SDA important — un par service, par commercial ou par campagne marketing. Les SDA non assignés peuvent être routés vers une route entrante générique any DID / any CID pointant vers le standard d’accueil.

Étape 5 — Vérifier la qualité des appels

La configuration fonctionne, reste à valider la qualité audio. Trois mesures à observer : la latence aller-retour entre le softphone et le serveur Asterisk, le pourcentage de paquets RTP perdus, et le score MOS (Mean Opinion Score) calculé par les téléphones modernes.

# Pendant un appel actif, depuis le CLI Asterisk
asterisk -rx "pjsip show channelstats"
# Observer les colonnes Lost (perte) et Jitter

# Statistiques globales
asterisk -rx "pjsip show channels"

Les valeurs cibles en production : latence aller-retour sous 150 ms (idéal sous 80 ms), perte de paquets sous 1 %, jitter sous 30 ms. Un score MOS supérieur à 4,0 indique une qualité bonne à excellente. Si les valeurs dérivent, vérifier dans l’ordre : la QoS sur le routeur de sortie (DSCP EF pour le RTP), le codec négocié (préférer Opus en interne, G.711 sur le trunk), et la charge CPU du serveur Asterisk pendant les pics.

Erreurs fréquentes

ErreurCauseSolution
SIP 403 Forbidden au registrationIP non autorisée chez l’opérateur ou compte désactivéVérifier auprès du support opérateur que l’IP publique sortante est bien dans la whitelist du SBC
SIP 488 Not Acceptable HereCodec proposé non supporté par l’opérateurDécocher tous les codecs sauf G.711 a-law/µ-law dans l’onglet Codecs du trunk
Appels sortants OK, entrants rejetés en 480Route entrante non créée ou DID au mauvais formatCréer la route entrante avec le DID au format envoyé par l’opérateur (vérifier avec sngrep)
Audio dans un seul sensNAT mal configuré, RTP bloquéRenseigner external_media_address et external_signaling_address dans pjsip.conf, ouvrir UDP 10000-20000
Numéro appelant non transmisCID non configuré dans Outbound RouteForcer le CID dans Route CID avec un DID valide de la plage

Diagnostiquer en profondeur avec sngrep et pjsip logger

Quand un trunk refuse de s’enregistrer ou qu’un appel échoue avec un code SIP exotique, l’analyse de la signalisation au niveau paquet est indispensable. L’outil sngrep affiche en temps réel les transactions SIP avec un rendu en arbre : INVITE → 100 Trying → 180 Ringing → 200 OK → ACK → BYE → 200 OK. La vue par flux permet de voir immédiatement où la conversation s’arrête. Lancer sngrep -d any port 5060 or port 5078 et placer le serveur en attente d’un appel. La capture peut être sauvée en pcap pour analyse ultérieure dans Wireshark : pratique pour un échange avec le support opérateur.

Côté Asterisk, activer le logger PJSIP fournit le détail complet des SDP négociés. Dans le CLI : pjsip set logger on. Chaque message envoyé et reçu est tracé avec son corps complet, ce qui permet d’identifier les codecs proposés, les contraintes NAT et les éventuelles discordances de RTP. Penser à désactiver le logger dès le diagnostic terminé — sur un serveur chargé, le volume de logs sature rapidement le disque.

Numéros de service à valeur ajoutée et SVA

Les services à valeur ajoutée (numéros surtaxés type 81X, 33X au Sénégal) demandent un contrat spécifique chez l’opérateur. La PME peut soit recevoir des appels SVA pour générer du chiffre (services médicaux, conseil juridique, support technique), soit interdire totalement les appels sortants vers les SVA pour limiter les abus internes. Cette interdiction doit être configurée dans Outbound Routes avec un dial pattern qui capture explicitement 81X, 33X et les autres préfixes SVA puis les renvoie vers une destination « appel non autorisé ».

Pour exploiter un numéro SVA en réception, l’opérateur affecte le numéro à votre trunk SIP comme un DID classique mais avec une convention de routage facturée à la minute. Le revenu net après reversement opérateur tourne entre 30 % et 60 % selon la grille — à clarifier au contrat. Côté FreePBX, le routage est identique à un DID standard, mais on positionne souvent l’IVR du SVA en mode Direct Dial Disabled pour empêcher les utilisateurs de contourner l’arborescence et atteindre directement un agent.

Adaptation au contexte ouest-africain

Trois ajustements spécifiques améliorent significativement l’expérience locale. Premièrement, certains opérateurs (Sonatel, Orange CI) imposent un délai de propagation des CDR opérateur de quelques minutes — ne pas s’inquiéter si la facturation détaillée n’apparaît pas instantanément. Deuxièmement, la portabilité des numéros entre opérateurs reste partielle dans la sous-région : anticiper les délais de portage (10 à 30 jours ouvrés) si la PME change d’opérateur. Troisièmement, en cas de coupure du lien internet principal, prévoir un trunk de secours — un compte SIP chez un opérateur OTT international comme Voxbeam ou Twilio (en respectant la conformité réglementaire locale) ou un GSM gateway sur une carte SIM Orange/Free permet de maintenir au moins les appels d’urgence.

Suivi qualité et CDR détaillés

Une fois la chaîne entrante et sortante validée, mettre en place un suivi quotidien du Call Detail Record. Le module CDR Reports de FreePBX donne une vue tableau filtrable par date, par extension ou par destination, avec lecture inline des enregistrements quand l’enregistrement est actif. Pour aller plus loin, exporter les CDR vers un Postgres ou une instance ClickHouse permet d’analyser les tendances sur 12 mois, identifier les heures de pic et dimensionner correctement les ressources humaines du standard.

Trois indicateurs clés à suivre : le taux de décroché (pourcentage d’appels ANSWERED par rapport au total), la durée moyenne de communication par service, et le pourcentage d’appels abandonnés en file d’attente. Un taux d’abandon supérieur à 8 % sur une queue commerciale indique soit un manque d’agents, soit un message d’attente trop frustrant — plusieurs leviers à ajuster avant de signer un contrat de renforcement RH.

Pour finaliser la mise en production, prévoir une période de double-run de deux semaines pendant lesquelles l’ancien système (PABX classique ou solution cloud) reste actif en parallèle. Diriger 10 % des appels entrants vers le nouveau trunk Asterisk via une portion limitée de la plage SDA, surveiller les CDR et la qualité, puis monter progressivement à 50 % puis 100 % avant de couper l’ancien. Cette migration progressive évite les surprises et permet de remonter rapidement en cas d’anomalie sur un sous-ensemble de numéros. Documenter chaque étape dans un carnet de bord partagé permet aussi à un nouvel administrateur de comprendre l’historique des décisions techniques prises pendant la phase de bascule.

Pour aller plus loin

🔝 Retour à l’article principal : Asterisk + FreePBX en production pour PME ouest-africaine.

Une fois le trunk fonctionnel, deux étapes critiques restent à traiter avant la mise en production réelle : sécuriser l’installation contre la fraude téléphonique (Fail2ban, ACL PJSIP, plafonds de coût) et structurer l’accueil avec un IVR multilingue. Ces sujets sont couverts dans les tutoriels suivants de cette série. La documentation officielle PJSIP est disponible sur docs.asterisk.org, et la spécification du protocole SIP dans la RFC 3261.

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité