PDA

Voir la version complète : Question de mise en place de dialplan



exaju
09/05/2014, 23h12
Bonjour à tous,

Ceci est ma première implémentation d'un réseau TOIP et je tâtonne un peu (beaucoup). J'ai pour l'instant réalisé les appels entrants/sortants via notre provider et je continue par mon dialplan.

Petite présentation du projet: j'ai besoin de créer 3 Groupes d'appels pour 3 entités avec une gestion différenciée de ces groupes.

Voici l'implémentation faite à ce jour:

#########################---------------------------------------------------------------#############################
/etc/asterisk/extensions.conf
;Contexte des appels entrants
[incoming]
;Pour l'exemple le numéro XXXXXXXXXX sera dirigé vers la macro "mamacro"
exten => XXXXXXXXXX,1,Macro(mamacro,14,SIP/14,20)

;Contexte appliqué aux utilisateurs
[work]
exten => _1X,1,Macro(std,${EXTEN},SIP/${EXTEN},30)

include => parkedcalls
include => recording-context
include => voicemail-context
include => test-context

;En sortie Anonyme
exten => _9.,1,Set(CALLERID(all)="Anonymous" <Anonymous>)
exten => _9.,2,Dial(SIP/provider-out/${EXTEN:1})


;En sortie normale
exten => _0.,1,GotoIf($["${CALLERID(num)}" = "11"]?dial11)
exten => _0.,n(dial11),Set(CALLERID(num)="04XXXXXXXX")
exten => _0.,n,Set(CALLERID(name)="${CALLERID(name)}")
exten => _0.,n,Dial(SIP/provider-out/${EXTEN:1})
exten => _0.,n,Hangup()


--------------------------------------------------------------------------------------------------------------------------------
;Une des macros utilisée pour un des trois groupes. Il y a deux autres macro similaires pour les autres groupes
[macro-mamacro]
;On joue la presentation et on attends l'utilisateur
exten => s,1,Answer
exten => s,2,Background(/var/lib/asterisk/sounds/admin/accueil)
exten => s,3,WaitExten()

;Le problème est bien visible là: si j'appuie sur 1 ou 2 cela ne renvoi pas vers "s-pepi1" ou "s-pepi1" mais pars dans le contexte [work]
;pbx.c:6693 __ast_pbx_run: Invalid extension '1', but no rule 'i' or 'e' in context 'work'

exten => 1,4,1,GoTo(mamacro,s-pepi1,1)
exten => 2,4,1,GoTo(mamacro,s-pepi2,1)
exten => s,5,Hangup


exten => s-pepi1,1,Dial(SIP/11,tTx,30)
exten => s-pepi1,2,VoiceMail(11@main-voicemail,u)
exten => s-pepi1,3,Hangup


exten => s-pepi2,1,Dial(SIP/11,tTx,30)
exten => s-pepi2,2,VoiceMail(12@main-voicemail,u)
exten => s-pepi2,3,Hangup

exten => s,n,Goto(s-${DIALSTATUS},1)

exten => a,1,VoicemailMain(${ARG1}) ; Si * alors renvoi sur la boite vocale

exten => s-NOANSWER,1,Voicemail(${ARG1}@main-voicemail,u)
exten => s-NOANSWER,n,Playback(vm-goodbye)
exten => s-NOANSWER,n,Hangup()

exten => s-CHANUNAVAIL,1,Voicemail(${ARG1}@main-voicemail,b)
exten => s-CHANUNAVAIL,n,Playback(vm-goodbye)
exten => s-CHANUNAVAIL,n,Hangup()

exten => s-BUSY,1,Voicemail(${ARG1}@main-voicemail,b)
exten => s-BUSY,n,Playback(vm-goodbye)
exten => s-BUSY,n,Hangup()


--------------------------------------------------------------------------------------------------------------------------------
; Un autre contexte utilisé par tous qui a les extensions # et 2 pour valider l'enregistrement
[recording-context]
exten => 100,1,Set(CHANNEL(musicclass)=mp3files)
exten => 100,2,Set(CHANNEL(language)=fr)
exten => 100,3,Playback(/var/lib/asterisk/sounds/admin/message-closed-accueil)
exten => 100,4,Record(/var/lib/asterisk/sounds/admin/message-closed:ulaw)
exten => 100,5,Wait(1)
exten => 100,6,Playback(/var/lib/asterisk/sounds/admin/message-closed)
exten => 100,7,Background(/var/lib/asterisk/sounds/admin/validation_attente)
exten => 100,8,WaitExten(2)
exten => #,1,GoTo(s-finish-accueil,1)
exten => 2,1,GoTo(100,3)

exten => s-finish-accueil,1,Playback(/var/lib/asterisk/sounds/admin/message_enregistre) ; message recorded !
exten => s-finish-accueil,2,Hangup

;la deuxième extension utilise aussi "#" et "2" :-(
exten => 111,1,Set(CHANNEL(musicclass)=mp3files)
exten => 111,2,Set(CHANNEL(language)=fr)
exten => 111,3,Playback(/var/lib/asterisk/sounds/admin/pepi1_accueil)
exten => 111,4,Record(/var/lib/asterisk/sounds/admin/pepi1:ulaw)
exten => 111,5,Wait(1)
exten => 111,6,Playback(/var/lib/asterisk/sounds/admin/pepi1)
exten => 111,7,Background(/var/lib/asterisk/sounds/admin/validation_attente)
exten => 111,8,WaitExten(2)
exten => #,1,GoTo(s-finish-pepi1,1)
exten => 2,1,GoTo(111,3)

exten => s-finish-pepi1,1,Playback(/var/lib/asterisk/sounds/admin/message_enregistre) ; message recorded !
exten => s-finish-pepi1,2,Hangup
--------------------------------------------------------------------------------------------------------------------------------
/etc/asterisk/users.conf
;Les users crés le sont à partir de cette base:
[template1](!)
type=friend
host=dynamic
dtmfmode=Auto
disallow=all
allow=ulaw
allow=alaw
context=work
language=fr
callgroup=1
pickupgroup=1

[template2](!)
type=friend
host=dynamic
dtmfmode=Auto
disallow=all
allow=ulaw
allow=alaw
context=work
language=fr
callgroup=2
pickupgroup=2


[template3](!)
type=friend
host=dynamic
dtmfmode=Auto
disallow=all
allow=ulaw
allow=alaw
context=work
language=fr
callgroup=3
pickupgroup=3
#########################---------------------------------------------------------------#############################

Mon plus gros problème est de trouver comment avoir des extensions similaires utilisées dans plusieurs macro/contextes. En effet par exemple l'extension "#" est utilisée pour valider un enregistrement de message mais est aussi utilisée par plusieurs extensions dans [recording-context] donc je me retrouve avec ceci pour les suivants:
[May 1 04:22:10] WARNING[13044]: pbx.c:9869 add_priority: Unable to register extension '#' priority 1 in 'recording-context', already in use
[May 1 04:22:10] WARNING[13044]: pbx.c:9869 add_priority: Unable to register extension '2' priority 1 in 'recording-context', already in use

Par exemple lors de l'utilisation de ceci:
exten => 1,4,1,GoTo(mamacro,s-pepi1,1)

au lieu d'être redirigé vers l'extension suivante:
exten => s-pepi1,1,Dial(SIP/11,tTx,30)
exten => s-pepi1,2,VoiceMail(11@main-voicemail,u)
exten => s-pepi1,3,Hangup

Cela retourne dans le contexte work ce que je ne veux pas:
pbx.c:6693 __ast_pbx_run: Invalid extension '1', but no rule 'i' or 'e' in context 'work'
pbx.c:6693 __ast_pbx_run: Invalid extension '4', but no rule 'i' or 'e' in context 'work'

De plus si je déclare par exemple ceci:
exten => #,4,1,GoTo(mamacro,s-pepi2,1)

Le # renverra vers la première extensions déclarée (celle concernant la validation d'un enregistrement) et pas vers l'extension "s-pepi2".

Le truc c'est que j'ai des messages d'accueil du type "taper 1 pour..., taper 2 pour..." sur plusieurs macro, donc comment avoir ces extensions (1,2) à différents endroits sans que ça pose problème ?

Bref, j'espère que j'ai été assez clair, et sûrement que je n'utilise pas la bonne "technique" pour arriver à mes fins. Toute aide sera donc grandement appréciée !!!

Merci de m'avoir lu, Bon codage à tous, Cordialement.

[EDIT] SI j'ajoute ceci dans le contexte utilisateur [work] je suis bien redirigé correctement mais comment utiliser les mêmes numéros (1,2,3,4) pour d'autres fonctions/Numéros SIP ?
exten => 1,1,Dial(SIP/11)
exten => 2,1,Dial(SIP/12)

En fait on pourrait résumer ma question: comment passer de
exten => 1,4,GoTo(mamacro,s-pepi1,1)
à
exten => s-pepi1,1,Dial(SIP/11,tTx,30)
en appuyant sur "1" sans passer par le contexte [work] mais en restant dans la macro...

exaju
11/05/2014, 15h54
Bon après plusieurs recherches j'ai finalement utilisé trois "contextes" différents pour mes trois entités. Ceci permet d'avoir les mêmes extensions (par exemple 100,101,102 pour les trois entités) avec des comportements différents sur ces extensions; juste ce que je voulais.

Je pense que c'était un problème de conception et qu'il faut utiliser les fonctions données par Asterisk au lieu d'essayer de le faire à sa manière...

Merci de m'avoir lu, Cordialement...