Acheminer le trafic vers les numéros +999
Pour les opérateurs et les propriétaires de serveurs SIP : comment acheminer les appels et les messages vers les numéros +999 et comment ils vous parviennent. Standards ouverts, sans contrat ni inscription. Chaque numéro +999 appartient à une personne vérifiée via Persona.
Des numéros +999 pour votre PBX
La façon la plus simple d’obtenir des numéros pour les employés et les services : gratuits, sans opérateur ni contrat, en une minute sur ce site. Vous dirigez le numéro vers votre PBX dans le compte, et ensuite c’est un numéro entrant ordinaire, sauf que les appels vers lui ne coûtent rien.
- Un numéro pour chacun. Jusqu’à trois numéros par personne : pour des services, un accueil, des projets. Le numéro appartient à une personne vérifiée et ne peut pas être falsifié.
- Appels directs. Les utilisateurs d’Armor et d’autres PBX trouvent votre numéro dans ENUM et appellent directement votre PBX, sans intermédiaires et sans facturation à la minute.
- Appelez vous-même un +999. Les utilisateurs de votre PBX composent n’importe quel +999, et le PBX trouve l’adresse dans ENUM. Des exemples pour Asterisk et FreeSWITCH se trouvent plus bas.
Prendre un numéro
Dans l’application Armor, puis connectez-vous à votre compte sur armor.tel.
Le diriger vers votre PBX
Dans le compte, à côté du numéro : « Appels » → « vers mon PBX » → le nom du serveur, par exemple pbx.example.com.
Recevoir sur le PBX
L’appel arrive à sip:+999…@pbx.example.com. Le port vient de l’enregistrement SRV _sip._udp, sinon 5060.
Routage : ENUM
Chaque numéro délivré a un enregistrement NAPTR dans la zone e164.armor.tel. Le nom est formé des chiffres du numéro dans l’ordre inverse, séparés par des points. La zone est signée avec DNSSEC. Vérifiez les signatures : sinon, un enregistrement falsifié signifie un numéro détourné.
- Requête pour +999 730 905 13 05 : 5.0.3.1.5.0.9.0.3.7.9.9.9.e164.armor.tel IN NAPTR
- Réponse : 10 10 "u" "E2U+sip" "!^.*$!sip:+9997309051305@sip.armor.tel!" .
- NXDOMAIN signifie que le numéro n’est pas délivré ou a été libéré. N’envoyez pas de tels appels : le serveur répond 404.
- Mise en cache. Les enregistrements ont un TTL de 5 minutes. Un numéro libéré n’est pas réattribué pendant 90 jours.
Signalisation : SIP
- L’adresse vient de NAPTR ; le serveur et le port sont résolus selon la RFC 3263 (SRV _sips._tcp, _sip._tcp, _sip._udp).
- TLS est recommandé : port 5061 (SRV _sips._tcp), certificat Let's Encrypt pour sip.armor.tel, SNI obligatoire, aucun certificat client nécessaire. Sans chiffrement : UDP et TCP sur le port 5080.
- Ni enregistrement ni mot de passe. Tout serveur qui trouve le numéro dans ENUM peut appeler un +999.
- From est transmis tel quel à l’utilisateur et n’est pas vérifié. Mettez le numéro de l’appelant au format E.164 avec un « + ».
- Limites : 10 INVITE par seconde depuis une même adresse et 30 appels simultanés par numéro. Au-delà : 503 avec Retry-After.
- Retransmissions selon la RFC 3261 ; sur TCP/TLS, gardez la connexion ouverte, avec des keep-alive CRLF.
Média : RTP
- Pas de transcodage. Le serveur fait transiter le RTP et ne touche pas aux codecs du SDP : ils sont négociés avec l’appareil de l’utilisateur. Les appareils prennent en charge Opus, G.722, G.711 A/µ.
- SRTP et ZRTP passent tels quels : a=zrtp-hash et les paquets ZRTP parviennent à l’utilisateur. Si votre côté prend en charge ZRTP, l’appel est chiffré entre vous et l’utilisateur.
- DTMF : RFC 4733 (telephone-event) dans le RTP.
- Non pris en charge : early media et late offer. Un INVITE sans SDP reçoit 488.
Déroulement d’un appel
100 Trying, puis 180
Le serveur réveille par une notification push les appareils en veille de l’utilisateur et les fait tous sonner en même temps. Le premier 180 peut prendre quelques secondes.
200 OK du premier qui répond
Les autres appareils cessent de sonner. Le média passe par le serveur Armor ; les adresses sont dans le SDP de la réponse.
Erreurs
404 : le numéro n’est pas délivré. 480 : aucun appareil en ligne. 486 : occupé ou refusé. 503 : limite atteinte.
Messages
SIP MESSAGE vers la même adresse sip:+999…@sip.armor.tel, avec un corps text/plain ou message/cpim. Le serveur le remet à tous les appareils de l’utilisateur, et aux appareils hors ligne quand ils se connectent ; la réponse est 202. La réponse de l’utilisateur va à l’adresse de votre From, qui doit donc être joignable depuis internet.
Trafic de +999 vers vous
Le serveur Armor ne passe aucun appel sortant vers d’autres réseaux. Un utilisateur +999 joint vos numéros via un compte chez vous : il ajoute votre ligne dans l’application et appelle depuis votre numéro. Pour vous, c’est un abonné SIP ordinaire.
- Ce qu’il nous faut de votre part : un accès SIP (adresse, identifiant, mot de passe, TLS), le renvoi vers une adresse SIP et, si vous le souhaitez, les SMS via SIP MESSAGE.
- Pour une configuration en deux touches, donnez à vos utilisateurs un code QR avec les réglages au format de provisionnement à distance Linphone. L’application le lit.
- Catalogue d’opérateurs. Nous pouvons vous ajouter à la liste des opérateurs dans l’application : l’utilisateur vous choisit et se connecte à son compte chez vous via OAuth, et l’application récupère elle-même les réglages. Il vous faut une connexion OAuth et un point d’accès pour les réglages.
- Un numéro +999 vérifié dans From lors d’un appel vers vous n’est pas disponible. Si vous en avez besoin, écrivez-nous.
Exemple : Asterisk
PJSIP, Asterisk 18 et suivants. Les appels entrants vers vos numéros +999 sont acceptés sans enregistrement, mais uniquement pour les numéros listés. Les appels sortants vers +999 vont à l’adresse issue d’ENUM.
; pjsip.conf
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
; Calls to your +999: the caller found the PBX in ENUM, no registration
[anonymous]
type=endpoint
context=from-armor
disallow=all
allow=opus,g722,alaw,ulaw
rtp_symmetric=yes
rewrite_contact=yes
direct_media=no
; Calls to +999 from your PBX
[armor]
type=endpoint
context=from-armor
disallow=all
allow=opus,g722,alaw,ulaw
from_domain=pbx.example.com
direct_media=no; extensions.conf
[from-armor]
; your +999 number -> an extension
exten => +9997309051305,1,Dial(PJSIP/101,30)
same => n,Hangup()
; include in your users' context: include => to-armor
[to-armor]
exten => _+999XXXXXXXXXX,1,Set(URI=${ENUMLOOKUP(${EXTEN},sip,,1,e164.armor.tel)})
same => n,GotoIf($["${URI}" = ""]?missing)
same => n,Dial(PJSIP/armor/sip:${URI},60)
same => n,Hangup()
same => n(missing),Hangup(1)- Sûr. Le contexte from-armor ne contient que vos numéros : l’appel de personne d’autre ne peut donc traverser le PBX.
- Numéro non délivré : ENUM est vide, et l’appel se termine aussitôt, sans tenter de connexion.
Exemple : FreeSWITCH
Les appels entrants sont acceptés par le profil external (port 5080 : publiez un enregistrement SRV _sip._udp.pbx.example.com avec ce port). Les appels sortants passent par mod_enum.
<!-- autoload_configs/enum.conf.xml (and mod_enum in modules.conf.xml) -->
<configuration name="enum.conf" description="ENUM">
<settings>
<param name="default-root" value="e164.armor.tel"/>
</settings>
<routes>
<route service="E2U+SIP" regex="sip:(.*)" replace="sofia/external/$1"/>
</routes>
</configuration><!-- dialplan/public/armor.xml: calls to your +999 -->
<include>
<extension name="armor-in">
<condition field="destination_number" expression="^\+9997309051305$">
<action application="bridge" data="user/1001@${domain_name}"/>
</condition>
</extension>
</include>
<!-- dialplan/default/armor.xml: calls to +999 from the PBX -->
<include>
<extension name="armor-out">
<condition field="destination_number" expression="^(\+999\d{10})$">
<action application="enum" data="$1 e164.armor.tel"/>
<action application="bridge" data="${enum_auto_route}"/>
</condition>
</extension>
</include>- Le contexte public n’accepte que les numéros listés : FreeSWITCH rejette tout le reste.
Test
Le numéro de test +999 100 000 00 01 répond et annonce l’heure : un moyen pratique de vérifier la route, le transport et le média. Pour des questions et pour rejoindre le catalogue, écrivez à ops@armor.tel.