PDA

Voir la version complète : [newbie] Dialplan et GOTOif



wana
12/03/2012, 11h44
J'essaye de me faire un mini svi et mes fonctions gotoif ne marchent pas comme je veux (ne marchent même pas du tout). Je dois passer à coté de quelque chose d'évident, vu le temps que j'ai déjà passé dessus je m'en remet à vous.

La touche 2 me renvoie vers l'extension 2
La touche 1 vers l'extension 1

Dans l'extension 2 (celle qui me permet d'enregistrer un fichier) je voudrais que les gotoif me dirigent vers des priorités (enregistrer, annuler,valider)


[forfait-sip]
exten => s,1,Ringing(20)
exten => s,n,Answer()
exten => s,n,Read(choix,messages/intro,1)
exten => s,n,Gotoif($["${choix}"="1"]?1,1)
exten => s,n,Gotoif($["${choix}"="2"]?2,1:s,1)

;###### LIGNE DIRECTE ######
exten => 1,1,Playback(messages/lignedirecte)
same => n,Dial(SIP/210,30)
same => n,Hangup()

;###### ENREGISTRER #######
exten => 2,1,Wait(2)
same => n(enregistrer),Playback(messages/enregistrer)
same => n,record(OUTPUT.wav)
same => n,Playback(messages/voici_message_repondeur)
same => n,Playback(OUTPUT)
same => n,background(messages/gestion_message)
same => n,Read(touchetel,,1)
same => n,Gotoif($["${touchetel}"="1"]?valider);Valider
same => n,Gotoif($["${touchetel}"="2"]?enregistrer);modifier
same => n,Gotoif($["${touchetel}"="3"]?annnuler);annuler
same => n(annuler),System(/bin/echo action ${OUTPUT}.wav)
same => n,Playback(messages/pas_diffuser)
same => n,Wait(2)
same => n,Hangup
same => n(valider),System(/bin/echo action valider le fichier)
same => n,Playback(messages/merci)


[localphones]
;Appels entre les différents postes interne
exten => 200,1,Goto(forfait-sip,s,1)
exten => 210,1,Dial(SIP/210)
exten => 220,1,Dial(SIP/220)


Merci d'avance pour vos réponses, qui j'espère me débloqueront.

stevan
12/03/2012, 12h19
Bonjour,

Je pense qu'un simple Background à la place du Read suivi d'un wait(10) et un Goto(forfait-sip,s,1) devrait fonctionner ;)

cedricscha
12/03/2012, 13h13
Essaie comme ceci :


[forfait-sip]
exten => s,1,Ringing(20)
exten => s,n,Answer()
exten => s,n(debut),Read(choix,messages/intro,1)
exten => s,n,Gotoif($["${choix}"="1"]?lignea)
exten => s,n,Gotoif($["${choix}"="2"]?ligneb:debut)

;###### LIGNE DIRECTE ######
exten => 1,1(lignea),Playback(messages/lignedirecte)
exten = 1,n,Dial(SIP/210,30)
exten = 1,n,Hangup()

;###### ENREGISTRER #######
exten = 2,1(ligneb),Wait(2)
exten = 2,n(enregistrer),Playback(messages/enregistrer)
exten = 2,n,record(OUTPUT.wav)
exten = 2,n,Playback(messages/voici_message_repondeur)
exten = 2,n,Playback(OUTPUT)
exten = 2,n,background(messages/gestion_message)
exten = 2,n,Read(touchetel,,1)
exten = 2,n,Gotoif($["${touchetel}"="1"]?valider);Valider
exten = 2,n,Gotoif($["${touchetel}"="2"]?enregistrer);modifier
exten = 2,n,Gotoif($["${touchetel}"="3"]?annnuler);annuler
exten = 2,n(annuler),System(/bin/echo action ${OUTPUT}.wav)
exten = 2,n,Playback(messages/pas_diffuser)
exten = 2,n,Wait(2)
exten = 2,n,Hangup
exten = 2,n(valider),System(/bin/echo action valider le fichier)
exten = 2,n,Playback(messages/merci)


[localphones]
;Appels entre les différents postes interne
exten => 200,1,Goto(forfait-sip,s,1)
exten => 210,1,Dial(SIP/210)
exten => 220,1,Dial(SIP/220)

Et colle ici les Traces dans la CLI lorsque tu as un problème, c'est plus facile pour voir ce qu'il se passe.

cedricscha
12/03/2012, 13h21
Tu peux autrement faire comme ceci, ce sera peut etre plus clair :





[forfait-sip]
exten = s,1,Ringing(20)
exten = s,n,Answer()
exten = s,n(debut),BackGround(messages/intro)
exten = s,n,Wait(2)
exten = s,n,Goto(debut)

;###### LIGNE DIRECTE ######
exten => 1,1(lignea),Playback(messages/lignedirecte)
exten = 1,n,Dial(SIP/210,30)
exten = 1,n,Hangup()

;###### ENREGISTRER #######
exten = 2,1(ligneb),Wait(2)

exten = 2,n(enregistrer),Playback(messages/enregistrer)
exten = 2,n,record(OUTPUT.wav)
exten = 2,n,Playback(messages/voici_message_repondeur)
exten = 2,n,Playback(OUTPUT)

exten = 2,n,background(messages/gestion_message)
exten = 2,n,Read(touchetel,,1)
exten = 2,n,Gotoif($["${touchetel}"="1"]?valider);Valider
exten = 2,n,Gotoif($["${touchetel}"="2"]?enregistrer);modifier
exten = 2,n,Gotoif($["${touchetel}"="3"]?annnuler);annuler

exten = 2,n(annuler),System(/bin/echo action ${OUTPUT}.wav)
exten = 2,n,Playback(messages/pas_diffuser)
exten = 2,n,Hangup

exten = 2,n(valider),System(/bin/echo action valider le fichier)
exten = 2,n,Playback(messages/merci)


[localphones]
;Appels entre les différents postes interne
exten = 200,1,Goto(forfait-sip,s,1)

exten = 210,1,Dial(SIP/210)

exten = 220,1,Dial(SIP/220)

wana
13/03/2012, 11h23
Merci pour la mise en forme du dialplan qui est beaucoup plus claire que la mienne.

J'ai le même problème, j'ai essayé de différentes manières, mon souci ne viens peut être pas du gotoif.

Voici une partie de mes logs :
(Le fichier son s'enregistre et quand je tape 1 ça me renvoie vers la ligne directe)


-- Executing [2@forfait-sip:3] Record("SIP/220-00000008", "OUTPUT.wav") in new stack
-- <SIP/220-00000008> Playing 'beep.ulaw' (language 'fr')
DTMF begin '#' received on SIP/220-00000008
DTMF begin passthrough '#' on SIP/220-00000008
DTMF end '#' received on SIP/220-00000008, duration 240 ms
DTMF end accepted with begin '#' on SIP/220-00000008
DTMF end passthrough '#' on SIP/220-00000008
-- Executing [2@forfait-sip:4] Playback("SIP/220-00000008", "messages/voici_message_repondeur") in new stack
-- <SIP/220-00000008> Playing 'messages/voici_message_repondeur.slin' (language 'fr')
-- Executing [2@forfait-sip:5] Playback("SIP/220-00000008", "OUTPUT") in new stack
-- <SIP/220-00000008> Playing 'OUTPUT.slin' (language 'fr')
-- Executing [2@forfait-sip:6] BackGround("SIP/220-00000008", "messages/gestion_message") in new stack
-- <SIP/220-00000008> Playing 'messages/gestion_message.slin' (language 'fr')
DTMF begin '1' received on SIP/220-00000008
DTMF begin ignored '1' on SIP/220-00000008
DTMF end '1' received on SIP/220-00000008, duration 280 ms
DTMF end passthrough '1' on SIP/220-00000008
-- Executing [1@forfait-sip:1] Playback("SIP/220-00000008", "messages/lignedirecte") in new stack
-- <SIP/220-00000008> Playing 'messages/lignedirecte.slin' (language 'fr')
Agent policy for SIP/220-00000008 is 'never'. CC not possible
-- Executing [1@forfait-sip:2] Dial("SIP/220-00000008", "SIP/210,30") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/210
-- SIP/210-00000009 is ringing
-- SIP/210-00000009 answered SIP/220-00000008
-- Locally bridging SIP/220-00000008 and SIP/210-00000009
== Spawn extension (forfait-sip, 1, 2) exited non-zero on 'SIP/220-00000008'


Quand je tape 2 ça me permet de réenregistrer le message mais c'est parce-que ça me renvoi vers le début de l'extension 2 et pas vers 2,n(enregistrer), quand je tape 3 ça coupe.


Executing [2@forfait-sip:4] Playback("SIP/220-0000000a", "messages/voici_message_repondeur") in new stack
-- <SIP/220-0000000a> Playing 'messages/voici_message_repondeur.slin' (language 'fr')
-- Executing [2@forfait-sip:5] Playback("SIP/220-0000000a", "OUTPUT") in new stack
-- <SIP/220-0000000a> Playing 'OUTPUT.slin' (language 'fr')
-- Executing [2@forfait-sip:6] BackGround("SIP/220-0000000a", "messages/gestion_message") in new stack
-- <SIP/220-0000000a> Playing 'messages/gestion_message.slin' (language 'fr')
DTMF begin '3' received on SIP/220-0000000a
DTMF begin ignored '3' on SIP/220-0000000a
DTMF end '3' received on SIP/220-0000000a, duration 260 ms
DTMF end passthrough '3' on SIP/220-0000000a
Invalid extension '3', but no rule 'i' or 'e' in context 'forfait-sip'




Voici un bout de mon sip.conf ça peut servir

[general]
context=forfait-sip
;bindport=5060
;bindaddr=192.168.2.54
udpbindaddr=0.0.0.0
;tcpenable=no
srvlookup=yes
register => 00XXXX:XXXX@XXXXX
canreinvite=no

[210]
type=friend
username=210
secret=XXXX
callerid="210" <210>
host=dynamic
context=localphones
language=fr
nat=yes
disallow=all
allow=ulaw
allow=alaw

;insecure=port
;canreinvite=no
;dtmfmode=auto
;video=no
;restrictcid=no
;amaflags=default
;mailbox=210@XXX.com

wana
13/03/2012, 16h18
sip reload


Reloading SIP
== Parsing '/etc/asterisk/sip.conf': No valid transports available, falling back to 'udp'.
== Found
== Using SIP CoS mark 4
Unable to open Asterisk database '/var/lib/asterisk/astdb': Permission denied
Unable to open Asterisk database '/var/lib/asterisk/astdb': Permission denied

cedricscha
13/03/2012, 17h15
As tu changer tpn dialan ou tu utilises celui du debut?

wana
13/03/2012, 18h12
J'ai changé le dialplan et fait d'autres essais, le log est avec ton dialplan

cedricscha
14/03/2012, 09h21
Essaie comme cela :


[forfait-sip]
exten = s,1,Ringing(20)
exten = s,n,Answer()
exten = s,n(debut),BackGround(messages/intro)
exten = s,n,Wait(2)
exten = s,n,Goto(debut)

;###### LIGNE DIRECTE ######
exten => 1,1(lignea),Playback(messages/lignedirecte)
exten = 1,n,Dial(SIP/210,30)
exten = 1,n,Hangup()

;###### ENREGISTRER #######

exten = 2,1(ligneb),Goto(GesRepondeur,s,1)

[GesRepondeur]
;Décroche la ligne
exten = s,1,Answer()
exten = s,n,NoOp(### Configuration Message Repondeur ###)
exten = s,n,wait(1)

;Lecture du Fichier Son Repondeur Actuel
exten = s,n,GoSub(GesRepondeurEcoute,s,1)

;Lecture du son Gestion Repondeur
exten = s,n(MenuVocal),NoOp(### Lecture du Fichier de Gestion du Repondeur ###)
exten = s,n,background(messages/gestion_message)
exten = s,n,wait(2)
exten = s,n,NoOp(### Retour au debut ###)
exten = s,n,Goto(MenuVocal)

;Selectionne 1 et valide le message
exten = 1,1,GoSub(GesRepondeurValide,s,1)
exten = 1,n,Hangup()

;Selectionne 2 et enregistre le message
exten = 2,1,Gosub(GesRepondeurEnrg,s,1)
exten = 2,n,Goto(s,MenuVocal)

;Selectionne 3 et annule le message
exten = 3,1,GoSub(GesRepondeurAnnule,s,1)
exten = 3,n,Hangup()

; Sélectionne 4 et écoute le message
exten = 4,1,GoSub(GesRepondeurEcoute,s,1)
exten = 4,n,Goto(s,MenuVocal)


[GesRepondeurValide]
exten = s,1,System(/bin/echo action valider le fichier)
exten = s,n,NoOp(### Validation du Message ###)
exten = s,n,Playback(messages/merci)
exten = s,n,Return()


[GesRepondeurEnrg]
exten = s,1,Playback(messages/enregistrer)
exten = s,n,NoOp(### Enregistrement du Message ###)
exten = s,n,record(OUTPUT.wav)
exten = s,n,Playback(messages/voici_message_repondeur)
exten = s,n,Playback(OUTPUT)
exten = s,n,Return()

[GesRepondeurAnnule]
exten = s,1,System(/bin/echo action ${OUTPUT}.wav)
exten = s,n,NoOp(### Annulation du Message ###)
exten = s,n,Playback(messages/pas_diffuser)
exten = s,n,Return()

[GesRepondeurEcoute]
exten = s,1,wait(1)
exten = s,n,NoOp(### Ecoute du message Actuel)
exten = s,n,Playback(messages/voici_message_repondeur)
exten = s,n,Playback(OUTPUT)
exten = s,n,Return()

[localphones]
;Appels entre les differents postes interne
exten = 200,1,Goto(forfait-sip,s,1)

exten = 210,1,Dial(SIP/210)

exten = 220,1,Dial(SIP/220)

Cela devrait correspondre à ton besoin

wana
14/03/2012, 10h22
ça marche !!!!!
Je vais pouvoir faire ce que je veux.

Merci encore.
Erwan