Téléphoner pas cher avec un mobile prépayé et Asterisk

L'un des avantages d'un mobile prépayé, c'est de ne payer que pour ce que l'on consomme. Chez Leclerc Mobile c'est d'ailleurs assez intéressant car le crédit à une durée de validité de 12 mois. Le défaut c'est que le coût à la minute est assez élevé pour un consommateur occasionnel de téléphone comme moi : 0,39€/min pour qui consomme moins de 30 minutes par mois. Et comme je travaille au Luxembourg désormais, c'est encore pire : 0,58€/min l'appel émis, 0,28€/min l'appel reçu.

Mais c'est là qu'intervient les services de VoIP basés sur SIP, et le logiciel libre de IPBX Asterisk.

VoIP

Betamax propose une foule de sites clones de VoIP, comme par exemple Nonoh. Il permet la mise en relation de deux numéros de téléphones à partir d'un formulaire sur le site. Les tarifs sont assez intéressants. Par exemple, pour mettre en relation un téléphone portable français et un téléphone fixe, cela coûte 0,071€/min (tarif mobile fr) + 0€/min (tarif fixe fr).

En bref, si je suis en France, un appel vers un fixe me coutera alors 0,071€/min, et un appel vers un mobile 0,142€/min. Au lieu de 0,39€/min. Cependant, via Nonoh la minute facturée est indivisible : c'est donc rentable qu'à partir de 30 sec d'appel vers un mobile.

Si je suis au Luxembourg, un appel vers un fixe francais me coutera alors 0,28€/min (prix reception) + 0,071€/min (prix appel mobile) soit 0,351€/min. Au lieu de 0,58€/min. VIa Nonoh la minute facturée est indivisible, et via Leclerc Mobile la première minute est indivisible.

Seul hic : l'appel s'initie depuis une page web. Pas toujours très pratique : je ne suis pas toujours devant un PC connecté au net.

Asterisk, SIP et DID

Asterisk est un PABX : un central d'appel qui permet de router des appels dans tous les sens. SIP est un protocole de communication. Nonoh permet de passer les appels via ce protocole. Asterisk peut se connecter à un compte SIP pour passer des appels. Le but est de demander à Asterisk d'appeler mon mobile d'un coté et mon correspondant de l'autre, et de nous connecter ensemble.

Tout ça c'est bien beau, mais comment faire pour dire à Asterisk de faire cela ? Il faut utiliser un numéro de téléphone qui dirige vers Asterisk. On utilisera pour cela un DID associé à un compte SIP. Le scénario d'utilisation est le suivant :

  1. je téléphone avec mon mobile à Asterisk via le numéro DID.
  2. asterisk detecte l'appel et constate que c'est mon numéro de mobile qui l'appelle. Mais il ne prends pas l'appel.
  3. mon mobile se prends une erreur réseau ou un message comme quoi le numéro n'est pas disponible. Je ne paie rien.
  4. asterisk m'appelle via Nonoh (7,1cts/min)
  5. je tape mon mot de passe
  6. j'obtiens une tonalité pour taper le numéro de mon correspondant via Nonoh ou Freephonie, en fonction du préfixe tapé (comme au temps de la préselection via Tele2 / LeNeuf)

Freephonie

Vous vous demandez peut être pourquoi se tracasser avec un numéro DID et un fournisseur SIP distinct alors que Free propose un compte SIP correspondant à la ligne téléphonique (nommé freephonie). Tout d'abord, les tarifs vers les mobiles de Free sont moins intéressants que ceux de Nonoh. Ensuite, Freephonie ne permet de passer qu'un seul appel à la fois. Difficile donc de s'appeler et d'appeler le correspondant en même temps. De plus je ne veux pas que lorsque j'appelle chez moi avec mon mobile, je me fasse systématiquement rappeler.

Je permettrai tout de même de choisir Freephonie pour composer le numéro en sortie.

En pratique

Installation d'asterisk (ubuntu) : apt-get install asterisk asterisk-config asterisk-prompt-fr-proformatique

Création d'un compte chez Nonoh (ou ailleurs), et ajout d'un peu de crédit pour pouvoir passer des appels.

Création d'un compte SIP sur ekiga.net : sip:user@ekiga.net

Création d'un compte sur PimpMyNumber pour obtenir un DID gratuitement. Créer un numéro d'appel en (+44)(0)703..... Attention, ce numéro est au Royaume Uni et surtaxé, mais on s'en fiche, puisque Asterisk ne décroche jamais. A noter par ailleurs que je n'arrive pas à jointe ce numéro avec le téléphone de la freebox : il est refusé car surtaxé. Il est possible d'obtenir d'autres DID localisés dans d'autres pays chez d'autres prestataires moyennant finances, comme par exemple chez voipGate, qui propose un compte SIP prépayé pour de la VoIP et en option un numéro d'appel, par exemple un numéro français géographique (en 03 54 ... pour Nancy) à pour 5€ par mois, ou un numéro allemand pour 3€ par mois).

Faire rediriger le numéro DID sur le compte SIP crée chez ekiga : sip:user@ekiga.net.

Renommer les fichiers existant de configuration d'Asterisk. mv /etc/asterisk/sip.conf /etc/asterisk/sip.conf.sample mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.sample

Créer le fichier /etc/asterisk/sip.conf, qui contient les informations sur les comptes SIP entrant et sortant

[general]
defaultexpiry=1800 ; necessaire dans le cas d'une connexion SIP vers freephonie
dtmfmode=auto
qualify=yes
language=fr ; pour les messages lus par asterisk

disallow=all
allow=ulaw
allow=alaw
allow=speex

; pour les appels sortants via free
register => 0954xxxxxx:PASSWORD@freephonie.net
; pour les appels sortants via nonoh
register => USERNAME:PASSWORD@sip.nonoh.net
; pour les appels entrant via le DID de chez www.pimpmynumber.co.uk
register => USER:PASS@ekiga.net

[freephonieout] ; on déclare le point d'accès SIP pour les appels sortants
type=peer
host=freephonie.net
username=0954xxxxxx
fromuser=0954xxxxxx
fromdomain=freephonie.net
qualify=yes
secret=PASSWORD
nat=yes

;; freephonie-in desactivé dans la console FREE
;[freephoniein] ; Et pour les appels entrants
;type=peer
;context=freephoniein
;host=freephonie.net

[nonohout] ; on declare le point d acces SIP nonoh pour les appels sortants
type=peer
host=sip.nonoh.net
username=USERNAME
fromuser=USERNAME
fromdomain=sip.nonoh.net
qualify=yes
secret=PASSWORD
nat=yes

[ekigain] ; appels entrant via le DID qui pointe sur ekiga
type=peer
context=ekigain
host=ekiga.net

[moi] ; on déclare un client SIP (par exemple pour connecter un softphone sur le PBX)
type=friend
username=moi
secret=PASSWD
host=dynamic
context=maison
nat=yes ; je peux me connecter sur mon PBX depuis d'autres réseaux "nattés"

Puis créer le fichier /etc/asterisk/extensions.conf, qui contient les sénarios d'appel

[maison] ; on déclare le contexte local qu'on a spécifié dans le sip.conf

; numéros "locaux" ou rapides
exten => 6,1,Dial(SIP/moi) ; quand on compose le 6, le softphone branché sur le lien "moi" sonnera
exten => 1,1,Dial(SIP/nonohout/00336xxxxxxxx) ; portable madame
exten => 2,1,Dial(SIP/freephonieout/03xxxxxxxx) ; parents 

; numéros externes via free
; quand on compose un numero qui commence par 01, on utilise le lien "freephonieout" et on passe le numero au peer en ôtant le premier digit (0) et en ajoutant au debut 0033.
exten => _01.,1,Dial(SIP/freephonieout/0033${EXTEN:1})
exten => _02.,1,Dial(SIP/freephonieout/0033${EXTEN:1})
exten => _03.,1,Dial(SIP/freephonieout/0033${EXTEN:1})
exten => _04.,1,Dial(SIP/freephonieout/0033${EXTEN:1})
exten => _05.,1,Dial(SIP/freephonieout/0033${EXTEN:1})
exten => _06.,1,Dial(SIP/freephonieout/0033${EXTEN:1})
exten => _09.,1,Dial(SIP/freephonieout/0033${EXTEN:1})
exten => _00.,1,Dial(SIP/freephonieout/${EXTEN})

; numero externes via nonoh prefixe 9
; quand on compose un numero qui commence par 91, on utilise le lien "nonohout" et on passe le numero au peer en ôtant le premier digit (9) et en ajoutant au debut 0033.
exten => _91.,1,Dial(SIP/nonohout/0033${EXTEN:1})
exten => _92.,1,Dial(SIP/nonohout/0033${EXTEN:1})
exten => _93.,1,Dial(SIP/nonohout/0033${EXTEN:1})
exten => _94.,1,Dial(SIP/nonohout/0033${EXTEN:1})
exten => _95.,1,Dial(SIP/nonohout/0033${EXTEN:1})
exten => _96.,1,Dial(SIP/nonohout/0033${EXTEN:1})
exten => _99.,1,Dial(SIP/nonohout/0033${EXTEN:1})
exten => _90.,1,Dial(SIP/nonohout/0${EXTEN:1})

[ekigain]
exten => s,1,NoOp(Appel entrant Ekiga)
exten => s,2,NoOp(${CALLERID(num)})
exten => s,3,GotoIf($["${CALLERID(num)}" = "0033662xxxxxx"]?init-callback,s,1)
exten => s,4,Congestion ; refuse l'appel

[init-callback]
exten => s,1,Congestion
exten => s,2,Hangup
exten => h,1,Set(CALLERID(number)=${CALLERID(num)})
exten => h,2,System(echo channel: SIP/nonohout/${CALLERID(num)} > /tmp/${CALLERID(num)})
exten => h,3,System(echo context: callback >> /tmp/${CALLERID(num)})
exten => h,4,System(echo extension: ${CALLERID(num)} >> /tmp/${CALLERID(num)})
exten => h,5,System(echo priority: 1 >> /tmp/${CALLERID(num)})
exten => h,6,Sys!!!tem(echo callerid: ${CALLERID(num)} >> /tmp/${CALLERID(num)}) ;
exten => h,7,System(echo sleep 5 > /tmp/${CALLERID(num)}.2)
exten => h,8,System(echo cp /tmp/${CALLERID(num)} /var/spool/asterisk/outgoing >> /tmp/${CALLERID(num)}.2)
exten => h,9,System(chmod 775 /tmp/${CALLERID(num)}.2)
exten => h,10,System(/tmp/${CALLERID(num)}.2)
exten => h,11,Hangup()

[callback]
exten => s,1,Background(silence/1) ; lecture du fichier silence d'une seconde
exten => s,2,SIPDtmfMode(inband) ; le touches sont lues sur la bande son, et pas sur les metadata SIP
exten => s,3,Set(TIMEOUT(digit)=5) ; timeout entre deux chiffes. si rien n'est tape, fin d'appel
exten => s,4,Set(TIMEOUT(response)=5) ; timeout avant le premier chiffre tape. si rien fin d'appel
exten => s,5,Authenticate(1234) ; demande du mot de passe 1234
exten => s,6,DISA(no-password|maison) ; donner une tonalité sur le contexte maison

Et la cerise sur le gateau : modifier le fichier /etc/asterisk/indications.conf pour que les tonalités (invite et sonnerie) soient comme en France :

[general]
country=fr

Lancer asterisk en mode console via asterisk -vvvvc pour afficher ce qui se passe. Un fois que tout est bon, arrêter le serveur et lancer via /etc/init.d/asterisk start

Cette démarche a été inspirée par ce blog et une aide technique par celui ci, qui utilise Ovh comme fournisseur du numéro d'appel et des services SIP VoIP.

Amélioration

Je suppose qu'il devrai être possible de connecter le numéro DID directement sur Asterisk et se passer du compte SIP chez ekiga, mais je n'ai pas approfondi le sujet.

blog comments powered by Disqus