PDA

Voir la version complète : Plusieurs sip sur meme serveur



Headstorm
03/12/2017, 15h23
Bonjour,

J'ai actuellement une installation Asterisk fonctionnelle sur une debian jessie, mon installation est de ce type:

1 numéro SIP dont le register est OVH
10 utilisateurs internes avec boites de messageries + envoi de mail
Appels externes limités a certains numéros
IVR avec choix multiples et conditions horaires
salles de conférences
transfert d'appel etc...

je souhaiterais utiliser ce même serveur Asterisk pour ajouter un autre numéro SIP qui aurait son propre dialplan et ses propres règles, totalement indépendant du premier.

j’aimerais donc savoir si cela est possible et comment le mettre en oeuvre.

Merci de votre aide.

slemoal
04/12/2017, 11h30
Tout est possible avec asterisk ;)

Que je comprenne bien...

Quand tu parles de numéro supplémentaire, tu parles de SDA, d'un nouveau trunk sur un autre registrar, ou afficher le 2eme numéro lors d'appel sortant?

Tu utilises Asterisk directement ou une distrib type wazo, xivo, issabel, elastix, freepbx....

Headstorm
04/12/2017, 17h40
Bonjour slemoal,

merci d'avoir pris le temps de me lire et de me répondre.

Pour être plus précis, je suis sur une installation non packagée d'Asterisk, les serveurs servent à d'autres applications (mail, web, ftp...), donc asterisk à été compilé et installé a la main.

Je cherche à héberger un deuxième compte sip (trunk) sur le même serveur, c'est à dire que chaque compte sip possède son numéro d'appel et appartient a une société différente, les 2 ne se connaissent pas et sont totalement différentes, elles ne peuvent en aucun cas utiliser le même dialplan, ni le même compte, ni les mêmes règles...

donc ma problématique serait de faire cohabiter les 2 scenarios sur le même serveur sans être obligé de faire une installation virtuelle d'un nouveau serveur Asterisk pour héberger le second compte... j'ai cherché un peu partout mais personne n'en parle, la seule chose qui est détaillée c'est la connexions multisite mais dans le sens partage de règles et dialplan entre plusieurs sites distants, et c'est pas ce que je cherche.

Merci en tous les cas.

slemoal
04/12/2017, 18h09
La chose importante est de bien comprendre la notion de contexte sous asterisk.

Pour faire simple, sans décrire tout les autres context...
Tu as 3 context principaux (les noms peuvent être différent en fonction de comment tu as fais ta conf):
1) [from-extern] dans lequel tu créer des routes vers tes postes, groupes etc... c'est ce context que tu donnes a ton trunk.
ce context n'est inclus nul part.

2) [default] Tes utilisateurs sont dans ce context.

3) [to-extern] c'est ici que tu mets ton dialplan de sortie vers ton trunk.

To extern est inclus dans défaut, de cette manière quand tu appelles, asterisk regarde déjà dans [Default] si le num existe, et si ce n'est pas le cas il regarde dans le context inclus.


Dans ton cas:

Imagine remplacer:
[from-extern] par [from-extern-societeA]
[default] par [default-societeA]
[to-extern] par [to-extern-societeA]

Tu inclues [to-extern-societeA] dans [default-societeA].

Rien ne t’empêche de créer:
[from-extern-societeB] que tu affecteras a ton trunk B
[default-societeB] dans lequels tu mettras tes extension de la société B
[to-extern-societeB] ou tu recrées tes routes de sorties vers ton trunk B.

Headstorm
04/12/2017, 19h56
Tout simplement! :eek2:

En fait il suffit de déclarer le trunk, de renseigner les utilisateurs, de leur attribuer un context, de faire leur dialplan et ensuite de déclarer les routes.

Je sais pas pourquoi je cherchais des config exotiques :doh: alors que la solution est assez logique au final.

Merci

slemoal
05/12/2017, 09h33
Il y a surement moyen de de faire un truc ultra complex pour faire baver ceux qui liront ton dialplan à base de condition, créer 1 base de donnée et router l'appel en fonction du nom de la société etc...

mais cette méthode fonctionne très bien, et par la suite est adaptable facilement.

tu pourrais par exemple créer un context [default-commun]
dans lequels tu inclurais les autres default A et B, pour avoir une standardiste commune au 2entreprises.

ou

vu que chaque dialplan a un context tu pourrais inclure des features (conférence, voicemail...) à certaine entreprise et pas à d'autre

j'ai appris que plus c'est simple, mieux ça fonctionne :)

Headstorm
25/04/2018, 11h00
J'avais laissé cette tache de coté et m'y suis finalement mis hier (et cette nuit....) et je m'en sors pas!!

j'ai un problème, je pense que ma configuration n'est pas bonne, mais je n'arrive pas a trouver ce qui ne va pas.

Voici mes fichiers:

sip.conf


[general]

permit=192.168.1.0/24
deny=0.0.0.0/0.0.0.0
context=public
allowguest=no
allowoverlap=no
udpbindaddr=192.168.1.0/24
tcpenable=no
tcpbindaddr=192.168.1.0/24
transport=udp
srvlookup=yes
language=fr
allowexternaldomains=no

[societe1]

register => 00xxxxxxxx:@xxxxxxxxxx@sip3.ovh.fr

[societe2]

register => 00xxxxxxxx:@xxxxxxxxxx@sip3.ovh.fr

users.conf


[general]

hasvoicemail = yes
hassip = yes
hasiax = yes
callwaiting = yes
threewaycalling = yes
callwaitingcallerid = yes
nat = yes ;On force l’utilisation du port NAT


;TRUNKS

[societe1]

defaultexpiry = 3600
externeaddr=xx.xx.xx.xx
localnet=192.168.1.140/255.255.255.0
register => 00xxxxxxxxxx:xxxxxxxxxx@sip3.ovh.fr

[societe2]

defaultexpiry = 3600
externeaddr=xx.xx.xx.xx
localnet=192.168.1.140/255.255.255.0
register => 00xxxxxxxxxx:xxxxxxxxxx@sip3.ovh.fr

;TEMPLATES

[societe1](!)

type=friend
host=dynamic
dtmfmode=rfc2833
disallow = all
allow = ulaw
context = Bureau_Interne_societe1

[societe2](!)

;type=friend
;host=dynamic
;dtfmode=rfc2833
;disallow = all
;allow = ulaw
;context = Bureau_Interne_societe2


;UTILISATEURS

;societe1

[101](societe1)

callerid = « xxxxxxxx » <101>
secret = xxxxxxx
mailbox = xxxxxxx@xxxxxxxx
dtmfmode=rfc2833

;societe2

[101](societe2)

callerid ="xxxxxxxx" <101>
secret = xxxxxx
mailbox = xxxxxxx@xxxxxxx
dtmfmode=rfc2833

[Vers_Bureau_Interne_societe1]

type=friend
host=sip3.ovh.fr
context=Bureau_Entrant_societe1
nat=yes
qualify=yes
canreinvite=nonat
directmedia=nonat
insecure=invite
dtmfmode=auto

[Bureau_Externe_societe1]

type=peer
host=sip3.ovh.fr
fromdomain=sip3.ovh.fr
qualify=yes
nat=yes
context=Bureau_Sortant_societe1
canreinvite=nonat
directmedia=nonat
username=00xxxxxxxxx
fromuser=00xxxxxxxxx
secret=xxxxxxxxxx
disallow=all
allow=alaw
dtmfmode=auto833

[Vers_Bureau_Interne_societe2]
type=friend
host=sip3.ovh.fr
context=Bureau_Entrant
nat=yes
qualify=yes
canreinvite=nonat
directmedia=nonat
insecure=invite
dtmfmode=auto

[Bureau_Externe_societe2]

type=peer
host=sip3.ovh.fr
fromdomain=sip3.ovh.fr
qualify=yes
nat=yes
context=Bureau_Sortant_societe2
canreinvite=nonat
directmedia=nonat
username=00xxxxxxxxx
fromuser=00xxxxxxxxx
secret=xxxxxxxxxx
disallow=all
allow=alaw
dtmfmode=auto833


extensions.conf


[general]

static = yes
writeprotect = no
clearglobalvars = no

[globals]

CONSOLE = Console/dsp
IAXINFO = guest
TRUNK = DAHDI/G2
TRUNKMSD = 1
FEATURES =
DIALOPTIONS =
RINGTIME = 20
FOLLOWMEOPTIONS =
PAGING_HEADER = Intercom

[Bureau_Interne_societe1]

Exten => _1XX,1,Dial(SIP/${EXTEN},tT,20)
Exten => _1XX,2,VoiceMail(${EXTEN}@Bureau_Interne_societe1)

exten => 90, 1, VoiceMailMain(${CALLERID(num)}@Bureau_Interne_soci ete1)

exten => 300,1,ConfBridge(Salle_1,Salle_1,Utilisateur_Stand ard)
exten => 301,1,ConfBridge(Salle_2,Salle_2,Utilisateur_Stand ard)
exten => 8001,1,Goto(IVR_FR_societe1,${EXTEN},1)

exten => 9001,1,PauseQueueMember(,SIP/${CALLERID(num)})
exten => 9001,2,agi(googletts.agi,"Vous pouvez maintenant partir en pause.",fr,any,1.3)
exten => 9001,3,Hangup()

exten => 9002,1,UnPauseQueueMember(,SIP/${CALLERID(num)})
exten => 9002,2,agi(googletts.agi,"Vous venez de reprendre le travail.",fr,any,1.3)
exten => 9002,3,Hangup()

exten => _0ZXXXXXXXX,1,Goto(Bureau_Sortant_societe1,${EXTEN },1)

[IVR_FR_societe1]

exten => 8001,1,Answer()

exten => 8001,2,GotoIfTime(8:00-12:30,mon-fri?IVR_FR_societe1,8001,4:IVR_FR_societe1,8001,3)
exten => 8001,3,GotoIfTime(14:00-19:00,mon-fri?IVR_FR_societe1,8001,4:IVR_FR_societe1,8001,16 )

exten => 8001,4,Set(TIMEOUT(response)=15)
exten => 8001,5,agi(googletts.agi,"societe1, bonjour.",fr,any,1.2)
exten => 8001,6,agi(googletts.agi,"Pour joindre le service commercial.",fr,any,1.3)
exten => 8001,7,agi(googletts.agi,"Appuyez sur un.",fr,any,1.2)
exten => 8001,8,agi(googletts.agi,"Pour joindre le service contrats.",fr,any,1.3)
exten => 8001,9,agi(googletts.agi,"Appuyez sur deux.",fr,any,1.2)
exten => 8001,10,agi(googletts.agi,"Pour toutes autres demandes.",fr,any,1.3)
exten => 8001,11,agi(googletts.agi,"Appuyez sur trois.",fr,any,1.2)
exten => 8001,12,agi(googletts.agi,"Appuyez sur dièse si vous souhaitez entendre ce message à nouveau.",fr,any,1.3)
exten => 8001,13,Playback(beep)
exten => 8001,14,WaitExten()

exten => 8001,15,Goto(8001,4)

exten => 8001,16,agi(googletts.agi,"societe1, bonjour.",fr,any,1.2)
exten => 8001,17,agi(googletts.agi,"Nos bureaux sont ouverts de huit heures à douze heures trente",fr,any,1.3)
exten => 8001,18,agi(googletts.agi,"Et de quatorze heures à dix neuf heures.",fr,any,1.3)
exten => 8001,19,agi(googletts.agi,"Merci de votre compréhension.",fr,any,1.3)
exten => 8001,20,Voicemail(101@Bureau_Interne_societe1)

exten => 1,1,Goto(File_Attente_societe1,910,1)
exten => 2,1,Goto(File_Attente_societe1,920,1)
exten => 3,1,Goto(File_Attente_societe1,930,1)
exten => _[4-9#],1,Goto(8001,3)
exten => t,1,Goto(8001,3)

[File_Attente_societe1]

exten => 910,1,Answer()
exten => 910,2,agi(googletts.agi,"Merci de bien vouloir patienter.",fr,any,1.3)
exten => 910,3,agi(googletts.agi,"Nous allons prendre votre appel",fr,any,1.3)
exten => 910,4,Queue(Gestion,t)
exten => 910,5,VoiceMail(101@Bureau_Interne_societe1)

;exten => 920,1,Answer()
;exten => 920,2,agi(googletts.agi,"Merci de bien vouloir patienter.",fr,any,1.3)
;exten => 920,3,agi(googletts.agi,"Nous allons prendre votre appel",fr,any,1.3)
;exten => 920,4,Queue(Technique,t)
;exten => 920,5,VoiceMail(102@Bureau_Interne_societe1)

;exten => 930,1,Answer()
;exten => 930,2,agi(googletts.agi,"Merci de bien vouloir patienter.",fr,any,1.3)
;exten => 930,3,agi(googletts.agi,"Nous allons prendre votre appel",fr,any,1.3)
;exten => 930,4,Queue(Autres_Infos,t)
;exten => 930,5,VoiceMail(102@Bureau_Interne_societe1)

[Bureau_Sortant_societe1]

exten => _0[1-5]XXXXXXXX,1,DIAL(SIP/Bureau_Externe_societe1/${EXTEN})
exten => _09XXXXXXXX,2,DIAL(SIP/Bureau_Externe_societe1/${EXTEN})

[Bureau_Entrant_societe1]

exten => s,1,Goto(IVR_FR_societe1,8001,1)

;SOCIETE2

[Bureau_Interne_societe2]

Exten => _1XX,1,Dial(SIP/${EXTEN},tT,20)
Exten => _1XX,2,VoiceMail(${EXTEN}@Bureau_Interne_societe2)

exten => 90, 1, VoiceMailMain(${CALLERID(num)}@Bureau_Interne_soci ete2)

exten => 8001,1,Goto(IVR_FR_societe2,${EXTEN},1)

exten => 9001,1,PauseQueueMember(,SIP/${CALLERID(num)})
exten => 9001,2,agi(googletts.agi,"Vous pouvez maintenant partir en pause.",fr,any,1.3)
exten => 9001,3,Hangup()

exten => 9002,1,UnPauseQueueMember(,SIP/${CALLERID(num)})
exten => 9002,2,agi(googletts.agi,"Vous venez de reprendre le travail.",fr,any,1.3)
exten => 9002,3,Hangup()

exten => _0ZXXXXXXXX,1,Goto(Bureau_Sortant_societe2,${EXTEN },1)

[IVR_FR_societe2]

exten => 8001,1,Answer()
exten => 8001,2,GotoIfTime(8:00-12:30,mon-fri?IVR_FR_societe2,8001,4:IVR_FR_societe2,8001,3)
exten => 8001,3,GotoIfTime(14:00-19:00,mon-fri?IVR_FR_societe2,8001,4:IVR_FR_societe2,8001,16 )

exten => 8001,4,Set(TIMEOUT(response)=15)
exten => 8001,5,agi(googletts.agi,"societe2, bonjour.",fr,any,1.2)
exten => 8001,6,agi(googletts.agi,"Pour joindre le service commercial.",fr,any,1.3)
exten => 8001,7,agi(googletts.agi,"Appuyez sur un.",fr,any,1.2)
exten => 8001,8,agi(googletts.agi,"Pour joindre le service contrats.",fr,any,1.3)
exten => 8001,9,agi(googletts.agi,"Appuyez sur deux.",fr,any,1.2)
exten => 8001,10,agi(googletts.agi,"Pour toutes autres demandes.",fr,any,1.3)
exten => 8001,11,agi(googletts.agi,"Appuyez sur trois.",fr,any,1.2)
exten => 8001,12,agi(googletts.agi,"Appuyez sur dièse si vous souhaitez entendre ce message à nouveau.",fr,any,1.3)
exten => 8001,13,Playback(beep)
exten => 8001,14,WaitExten()

exten => 8001,15,Goto(8001,4)

exten => 8001,16,agi(googletts.agi,"societe2, bonjour.",fr,any,1.2)
exten => 8001,17,agi(googletts.agi,"Nos bureaux sont ouverts de huit heures à douze heures trente",fr,any,1.3)
exten => 8001,18,agi(googletts.agi,"Et de quatorze heures à dix neuf heures.",fr,any,1.3)
exten => 8001,19,agi(googletts.agi,"Merci de votre compréhension.",fr,any,1.3)
exten => 8001,20,Voicemail(101@Bureau_Interne_societe2)

exten => 1,1,Goto(File_Attente_societe2,910,1)
exten => 2,1,Goto(File_Attente_societe2,910,1)
exten => 3,1,Goto(File_Attente_societe2,910,1)
exten => _[4-9#],1,Goto(8001,3)

exten => t,1,Goto(8001,3)

[File_Attente_societe2]

exten => 910,1,Answer()
exten => 910,2,agi(googletts.agi,"Merci de bien vouloir patienter.",fr,any,1.3)
exten => 910,3,agi(googletts.agi,"Nous allons prendre votre appel",fr,any,1.3)
exten => 910,4,Queue(Gestion,t)
exten => 910,5,VoiceMail(101@Bureau_Interne_societe2)

[Bureau_Sortant_societe2]

exten => _0[1-5]XXXXXXXX,1,DIAL(SIP/Bureau_Externe_societe2/${EXTEN})
exten => _09XXXXXXXX,2,DIAL(SIP/Bureau_Externe_societe2/${EXTEN})

[Bureau_Entrant_societe2]

exten => s,1,Goto(IVR_FR_societe2,8001,1)

merci de vos retours et suggestions.

olppp
25/04/2018, 15h09
les "register" sont censés être dans la section [general] soit de sip.conf

Headstorm
25/04/2018, 16h38
les "register" sont censés être dans la section [general] soit de sip.conf

Bonjour et merci de la réponse,

j'ai mis les trunks dans le sip.conf et je peux appeler en interne et en externe, par contre lorsque j'appelle le numéro de la societe 2 depuis l'exterieur, je tombe dans le contexte de la société 1.

je ne comprends pas pourquoi.

voici mes fichiers modifiés

sip.conf


[general]

permit=192.168.1.0/24
deny=0.0.0.0/0.0.0.0
context=societe1 societe2
allowguest=no
allowoverlap=no
udpbindaddr=192.168.1.0/24
tcpenable=no
tcpbindaddr=192.168.1.0/24
transport=udp
srvlookup=yes
language=fr
allowexternaldomains=no

register => 00xxxxxxxxxx:xxxxxxxxxx@sip3.ovh.fr ;societe1
register => 00xxxxxxxxxx:xxxxxxxxxx@sip3.ovh.fr ;societe2

[societe1]

defaultexpiry = 3600
externeaddr=xx.xx.xx.xx
localnet=192.168.1.140/255.255.255.0
register => 00xxxxxxxxxx:xxxxxxxxxx@sip3.ovh.fr
context = Bureau_Entrant_societe1

[societe2]
defaultexpiry = 3600
externeaddr=xx.xx.xx.xx ;Adresse ip public
localnet=192.168.1.140/255.255.255.0
register => 00xxxxxxxxxx:xxxxxxxxxx@sip3.ovh.fr
context = Bureau_Entrant_societe2

et mon users.conf



[general]

hasvoicemail = yes
hassip = yes
hasiax = yes
callwaiting = yes
threewaycalling = yes
callwaitingcallerid = yes
nat = yes

;TEMPLATES

[societe1](!)

type=friend
host=dynamic
dtmfmode=rfc2833
disallow = all
allow = ulaw
context = Bureau_Interne_societe1

[societe2](!)

;type=friend
;host=dynamic
;dtfmode=rfc2833
;disallow = all
;allow = ulaw
;context = Bureau_Interne_societe2


;UTILISATEURS

;societe1

[101](societe1)

callerid = « xxxxxxxx » <101>
secret = xxxxxxx
mailbox = xxxxxxx@xxxxxxxx
dtmfmode=rfc2833

;societe2

[101](societe2)

callerid ="xxxxxxxx" <101>
secret = xxxxxx
mailbox = xxxxxxx@xxxxxxx
dtmfmode=rfc2833

[Vers_Bureau_Interne_societe1]

type=friend
host=sip3.ovh.fr
context=Bureau_Entrant_societe1
nat=yes
qualify=yes
canreinvite=nonat
directmedia=nonat
insecure=invite
dtmfmode=auto

[Bureau_Externe_societe1]

type=peer
host=sip3.ovh.fr
fromdomain=sip3.ovh.fr
qualify=yes
nat=yes
context=Bureau_Sortant_societe1
canreinvite=nonat
directmedia=nonat
username=00xxxxxxxxx
fromuser=00xxxxxxxxx
secret=xxxxxxxxxx
disallow=all
allow=alaw
dtmfmode=auto833

[Vers_Bureau_Interne_societe2]
type=friend
host=sip3.ovh.fr
context=Bureau_Entrant
nat=yes
qualify=yes
canreinvite=nonat
directmedia=nonat
insecure=invite
dtmfmode=auto

[Bureau_Externe_societe2]

type=peer
host=sip3.ovh.fr
fromdomain=sip3.ovh.fr
qualify=yes
nat=yes
context=Bureau_Sortant_societe2
canreinvite=nonat
directmedia=nonat
username=00xxxxxxxxx
fromuser=00xxxxxxxxx
secret=xxxxxxxxxx
disallow=all
allow=alaw
dtmfmode=auto833

merci de votre aide en tout cas.

olppp
26/04/2018, 11h30
[general]

context=societe1 societe2
allowguest=no



Le context, un seul permit, dans [general] est le context par défaut utilisé pour des appels sans authentification.




[societe1]
register => 00xxxxxxxxxx:xxxxxxxxxx@sip3.ovh.fr ; votre numéro sip et le mot de passe
context = Bureau_Entrant_societe1

[societe2]
register => 00xxxxxxxxxx:xxxxxxxxxx@sip3.ovh.fr ; votre numéro sip et le mot de passe
context = Bureau_Entrant_societe2

supprime les registers dans le compte de chaque société
et mets toute la config. des comptes OVH dans sip.conf avec un type peer. users.conf est plutôt destiné à gérer les utilisateurs internes type friend.
Avec OVH tu devras séparer les appels entrants dans ton dialplan, ils arriverons toujours dans le même context du au insecure=invite => pas d'authentification entrante, et les appels viennent du même serveur.
Relis le post de http://www.asterisk-france.org/members/6585-slemoal plus haut. Utilise un seul context entrant pour tes comptes OVH.

Headstorm
27/04/2018, 00h32
Merci

Voici ce que j'ai fait, cela pourra peut être servir à quelqu'un d'autre :)

J'ai regroupé toute ma config et n'ai laissé qu'un seul point d'entrée dans le fichier sip.conf, les utiliateurs internes sont restés dans le users.conf

Dans le fichier extension.conf, j'ai ensuite essayé de filtrer mes appels entrants en fonction de leur CALLERID mais ça ne fonctionnait pas alors je les ai filtré en fonction de leurs entêtes et ça fonctionne à merveille!
j'en ai aussi profité pour éclater les dialplan dans des fichiers séparés, en fonction de chaque societé via des #include, c'est beaucoup plus clair.

voici mon extentions.conf


[Bureau_Entrant]

exten => s,1,Set(thedid=${SIP_HEADER(To)})
exten => s,2,Set(thedid=${CUT(thedid,@,1)})
exten => s,3,Set(thedid=${CUT(thedid,:,2)})
exten => s,4,GotoIf($[ ${thedid} = 0xxxxxxxxx ]?Bureau_Entrant_societe1,s,1:5)
exten => s,5,GotoIf($[ ${thedid} = 0xxxxxxxxx ]?Bureau_Entrant_societe1,s,1:6)
exten => s,6,GotoIf($[ ${thedid} = 0xxxxxxxxx ]?Bureau_Entrant_societe2,s,1:7)
exten => s,7,hangup

[Bureau_Entrant_societe1]

exten => s,1,Goto(IVR_FR_societe1,8001,1)

[Bureau_Entrant_societe2]

exten => s,1,Goto(IVR_FR_societe2,8001,1)

Asterisk est enfin configuré pour gérer plusieurs trunks sur le même serveur.

Vos conseils m'ont aidé à solutionner mon problème, merci encore.