OVH Community, votre nouvel espace communautaire.

Cmd System() asterisk


baltho60
21/08/2012, 18h49
Bonjour,
Je sais que le sujet initial date un peu.. mais en pleine recherche de la solution, j'ai enfin trouvé.
Je partage : https://wiki.asterisk.org/wiki/displ...Function_SHELL

A bientôt

paloute
24/07/2008, 10h50
Héhéhé no pb, Have FUN

Emerics
24/07/2008, 09h41
J'ai fais les modifications, la seule chose qui changeai dans le sip.conf c'était :
language=fr
disallow=all
allow=ulaw
allow=allaw

Pour extensions.conf, je n'ai pas de problème avec screen où avec sip-ovh, quand j'appel avec mon portable, il me rappel bien.
J'ai tenté de mettre ça dans extensions.conf à la place de [callback-ctx]:
Code:
[callback-ctx]
exten => s,1,Background(silence/2)
exten => s,2,SIPDtmfMode(inband))
exten => s,3,Background(asterisk-friend)
exten => s,4,Authenticate(1234)
exten => s,5,DISA(no-password|callback-out)

[callback-out]
exten => _X.,1,Dial(SIP/forfait-ovh/${EXTEN},240,T)

Avec ça, ça marche !!!!!!! (il faut surtout bien mettre exten => s,2,SIPDtmfMode(inband))!!!)

Va savoir pourquoi :/. En gros, avant je ne devais pas avoir la tonalité pour composer ... est ce que ça vient du 240,T en option du Dial ?

Merci pour tout, tu as été très sympa de répondre chaque fois aussi rapidement, j'espère que ça pourra servir à d'autres personnes.

paloute
24/07/2008, 09h20
sip.conf :

Code:
[general]
language=fr
context=forfait-ovh
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
register => 003397994XXXX:PASS@sip.ovh.net
disallow=all
allow=ulaw
allow=alaw


[210]
type=friend
username=210
secret=******
callerid="Login" <003397994XXXX>
host=dynamic
context=appel-sortant
language=fr
insecure=port
nat=yes
canreinvite=no
dtmfmode=auto
video=no
restrictcid=no
amaflags=default
mailbox=mail@mail.com

[220]
type=friend
username=220
secret=********
callerid="220" <003397994XXXX>
host=dynamic
context=appel-sortant
language=fr
insecure=port
nat=yes
canreinvite=no
dtmfmode=auto
video=no
restrictcid=no
amaflags=default
mailbox=mail@mail.com

[forfait-ovh]
type=peer
host=sip.ovh.net
context=ovh-sip
language=fr
insecure=very
username=003397994XXXX
secret=PASS
nat=yes
canreinvite=no
dtmfmode=auto
video=no
restrictcid=no
amaflags=default
extensions.conf :

Code:
[general]
static=yes
writeprotect=no
autofallthrough=yes
clearglobalvars=no
priorityjumping=no

[globals]
CONSOLE=Console/dsp
IAXINFO=guest
TRUNK=Zap/g2
TRUNKMSD=1


[ovh-sip] ; nom du plan
exten => s,1,Ringing()
exten => s,2,system(screen -dmS callback sh /etc/asterisk/callbackmobile.sh)
exten => s,4,Wait(2)
exten => s,5,HangUp()

;call in normal :
exten => s,1,Ringing(1) ; Attendre une seconde en faisant retentir la sonnerie du telephone de l'apellant
exten => s,2,Answer ; Repond a l'appel
exten => s,3,Dial(SIP/220,30,tm) ; L'appel est transfere sur le poste 220. Sans reponse apres 30 secondes il passe a l'etape suivante
exten => s,3,Dial(SIP/210,30,tm) ; L'appel est transfere sur le poste 210. Sans reponse apres 30 secondes il passe a l'etape suivante
exten => s,4,Hangup(16) ; La communication est termine

[appel-sortant]
; Cette partie gere les appels sortants
exten => _X.,1,Dial(SIP/${EXTEN}@forfait-ovh) ; Sur cette ligne allons appeler en passant par la section [forfait-ovh] du fichier sip.conf


[callback-ctx]
exten => s,1,answer()
exten => s,2,SIPDtmfMode(inband)
exten => s,3,WaitExten()
exten => _XX.,1,Dial(SIP/${EXTEN}@forfait-ovh)
Puis deux fichiers :

Code:
//script qui sera lancé en screen il est sous "/etc/asterisk/callbackmobile.sh"


#!/bin/bash

sleep 7;
cp /var/spool/asterisk/callbackmobile.call /var/spool/asterisk/outgoing
chmod 777 /var/spool/asterisk/outgoing/callbackmobile.call
exit 0;
Et le fichier d'appel sous "/var/spool/asterisk/callbackmobile.call"

Code:
Channel: SIP/06YYYYYYYY@forfait-ovh
Context: callback-ctx
Extension: s
MaxRetries: 2
RetryTime: 1
Test ça.

De plus vérifie que la commande Screen est reconnu par ton système. Car sinon ça ne risque pas de fonctionner

Emerics
24/07/2008, 09h05
Oki :
sip.conf :

Code:
context=forfait-ovh
register => 003397994XXXX:PASS@sip.ovh.net

[210]
type=friend
username=210
secret=******
callerid="Login" <003397994XXXX>
host=dynamic
context=appel-sortant
language=fr
insecure=port
nat=yes
canreinvite=no
dtmfmode=auto
video=no
restrictcid=no
amaflags=default
mailbox=mail@mail.com

[220]
type=friend
username=220
secret=********
callerid="220" <003397994XXXX>
host=dynamic
context=appel-sortant
language=fr
insecure=port
nat=yes
canreinvite=no
dtmfmode=auto
video=no
restrictcid=no
amaflags=default
mailbox=mail@mail.com

[forfait-ovh]
type=peer
host=sip.ovh.net
context=ovh-sip
language=fr
insecure=very
username=003397994XXXX
secret=PASS
nat=yes
canreinvite=no
dtmfmode=auto
video=no
restrictcid=no
amaflags=default
extensions.conf :

Code:
[ovh-sip] ; nom du plan
;callback sur 06YYYYYYYY
exten => s/YYYYYYYYYY,1,system(screen -dmS callback sh /etc/asterisk/callbackmobile.sh)
exten => s/06YYYYYYYY,2,Congestion
exten => s/06YYYYYYYY,3,Hangup

;call in normal :
exten => s,1,Ringing(1) ; Attendre une seconde en faisant retentir la sonnerie du telephone de l'apellant
exten => s,2,Answer ; Repond a l'appel
exten => s,3,Dial(SIP/220,30,tm) ; L'appel est transfere sur le poste 220. Sans reponse apres 30 secondes il passe a l'etape suivante
exten => s,3,Dial(SIP/210,30,tm) ; L'appel est transfere sur le poste 210. Sans reponse apres 30 secondes il passe a l'etape suivante
exten => s,4,Hangup(16) ; La communication est termine

[appel-sortant]
; Cette partie gere les appels sortants
exten => _X.,1,Dial(SIP/${EXTEN}@forfait-ovh) ; Sur cette ligne allons appeler en passant par la section [forfait-ovh] du fichier sip.conf


[callback-ctx]
; Beep et ensuite attente du numéro
exten => s,1,answer()
exten => s,2,SIPDtmfMode(inband)
exten => s,3,Playback(vm-enter-num-to-call)
exten => s,4,WaitExten()
exten => _X.,2,Dial(SIP/${EXTEN}@forfait-ovh)

Puis deux fichiers :

Code:
//script qui sera lancé en screen il est sous "/etc/asterisk/callbackmobile.sh"


#!/bin/bash

sleep 7;
cp /var/spool/asterisk/callbackmobile.call /var/spool/asterisk/outgoing
chmod 777 /var/spool/asterisk/outgoing/callbackmobile.call
exit 0;
Et le fichier d'appel sous "/var/spool/asterisk/callbackmobile.call"

Code:
Channel: SIP/06YYYYYYYY@forfait-ovh
Context: callback-ctx
Extension: s
MaxRetries: 2
RetryTime: 1
Je suis ouvert à toute proposition

paloute
23/07/2008, 22h37
Ecrit moi ici, le contenue du fichier /etc/asterisk/extensions.conf et /etc/asterisk/sip.conf, je te dirai ce qui ne va pas, et que faire pour faire fonctionner correctement ce que tu veux faire.

PS : prend garde à remplacer les password par des *** avant de poster

Emerics
23/07/2008, 20h13
Bon je tente sur une 1.4.
J'ai enfin réussi à l'installer proprement en virant celle mise par apt-get (apt-get remove --purge asterisk
et en faisant un make uninstall-all de l'autre version installée à partir des sources (puis en virant ce qui se promenait dans /etc/init.d et /etc/default).

Bref, j'ai un asterisk 1.4 dernière version qui tourne.

Mais j'ai toujours des problèmes de script :'(
En fait ce que je fais exactement c'est de copier un fichier call dans le dossier d'appel d'asterisk, ce qui marche quand je n'ai pas de problèmes de droits d'accès au fichier.
Il me rappel bien, et rentre dans le contexte callback-ctx.
Mais là j'ai toujours ce problème de touche mal prise en compte !!!

Bon en plus avec la version 1.4, je ne peux plus utiliser cette technique pour me rappeler. Et quand je me rappel en manuel, il me raccroche quand même au nez !!
Est ce que tu aurais un bon script fonctionnel pour faire le callback ? (je commence à désespérer)
Merci d'avance

paloute
23/07/2008, 17h38
1.2.* = deprecated

Derniere version = 1.4.21.2

Emerics
23/07/2008, 17h15
Je viens de tester avec une version 1.2.16 tout fraichement installé sur une distribution ubuntu toute propre.
Après avoir eu des problèmes de droits sur les fichiers, il se passe la même chose :

Code:
Jul 23 18:34:28 WARNING[12891]: pbx.c:2424 __ast_pbx_run: Invalid extension '0', but no rule 'i' in context 'callback-ctx'
Ce n'est pas un problème de version :'( où alors il faut une 1.4

Une autre idée ?

Merci d'avance

paloute
23/07/2008, 16h08
Citation Envoyé par Emerics
Merci de ta réponse rapide.
J'ai tenté de virer l'ancienne version avec apt (apt-get remove asterisk).
Puis j'ai installé la nouvelle ./configure make et make install.
Ca n'a pas remplacémes fichiers de configuration ... et ça me met warning warning warning à la fin de l'installation me disant que des modules présent dans un des dossier n'était pas mis par défaut avec cette version d'asterisk.
Je pense avoir un conflit :'(
Quand je fais un asterisk -r :
Unable to connect to remote asterisk (does /var/run/asterisk.ctl exist?)


Argggggggg :'(:'(:'(

Tu est sous quel distribution ?

Edit : Ubuntu j'avais pas vue

Mon conseil pour eviter de perdre du temps et s'arracher les cheveux, repar sur une installation propre de debian ou ubuntu.

Emerics
23/07/2008, 14h49
Merci de ta réponse rapide.
J'ai tenté de virer l'ancienne version avec apt (apt-get remove asterisk).
Puis j'ai installé la nouvelle ./configure make et make install.
Ca n'a pas remplacémes fichiers de configuration ... et ça me met warning warning warning à la fin de l'installation me disant que des modules présent dans un des dossier n'était pas mis par défaut avec cette version d'asterisk.
Je pense avoir un conflit :'(
Quand je fais un asterisk -r :
Unable to connect to remote asterisk (does /var/run/asterisk.ctl exist?)


Argggggggg :'(:'(:'(

paloute
23/07/2008, 14h42
Pour mettre a jour ton asterisk : http://www.asterisk.org/

tu DL la derniere version, et tu la compile

Après, ça fonctionnera :

exten => s,1,answer()
exten => s,2,SIPDtmfMode(inband)
exten => s,3,Playback(vm-enter-num-to-call)
exten => s,4,WaitExten()
exten => _X.,2,Dial(SIP/${EXTEN}@forfait-ovh)

Emerics
23/07/2008, 14h33
A prioris j'ai une 1.2.7.1 :
Code:
Connected to Asterisk 1.2.7.1 currently running
Je ne sais pas comment la mettre à jour sur ubuntu, apt me dit que le paquet est à jour :/

J'avais déja tenté de mettre un temps en seconde dans waitexten :
exten => s,4,WaitExten(25)
Je tourne avec ça en ce moment mais sans succès :/

Il plante toujours, j'ai tenté de mettre autofallthrough à no (je l'avais sur yes). Je ne sais pas lequel des deux est préférable.

Le debug quand je tape 8 sur le clavier :

Code:
Jul 23 18:33:11 WARNING[7128]: pbx.c:2401 __ast_pbx_run: Invalid extension '8', but no rule 'i' in context 'callback-ctx'
set_destination: Parsing  for address/port to send to
set_destination: set destination to 91.121.129.17, port 5060
Reliably Transmitting (NAT) to 91.121.129.17:5060:
BYE sip:91.121.129.17:5060 SIP/2.0
Via: SIP/2.0/UDP IPDUDEDIE:5060;branch=z9hG4bK30b0bb4c;rport
From: "asterisk" ;tag=as01769814
To: ;tag=00-08182-000ded93-4c4392a10
Contact: 
Call-ID: 530e3b6a324322cf664f654f19c37f62@IPDUDEDIE
CSeq: 104 BYE
User-Agent: Asterisk PBX
Max-Forwards: 70
Proxy-Authorization: Digest username="003397994XXXX", realm="sip.ovh.net", algorithm=MD5, uri="sip:91.121.129.17:5060", nonce="000ded8d21fc006143deb57215bcddfb", response="08ef66280872df0d9b1b95f70e20a144", opaque="000db854775c91e"
Content-Length: 0
Merci d'avance de ton aide.

paloute
23/07/2008, 09h34
Bon je m'en suis sortie avec des AGI et tout un tas de GotoIf, Goto etc ...

Citation Envoyé par Emerics
Bonjour,
Sinon une question, j'ai testé ça :
Code:
exten => s,1,answer()
exten => s,2,SIPDtmfMode(inband)
exten => s,3,Playback(vm-enter-num-to-call)
exten => s,4,WaitExten()
exten => _X.,2,Dial(SIP/${EXTEN}@forfait-ovh)
Asterisk me rappel, effectue la routine ci-dessus, me donne le message vocal de taper le numéro, mais quand je commence à le taper, ça raccroche. Une idée de l'origine du problème ?
Merci beaucoup
Quel version d'asterisk utilise tu ? si tu utilise une version antérieur a la 1.4.20, pass une variable à ton WaitExten qui correspondra au nombre de seconde à attendre.

Une aide ici : http://www.voip-info.org/wiki-Asterisk+cmd+WaitExten

Emerics
22/07/2008, 22h25
Bonjour,
Est ce que tu as vu ce tuto : http://toorop.fr/asterisk-callback-t...-votre-mobile/
Dedan ils font comme ça :
Code:
[init-callback]
exten => 0979911111,1,Congestion
exten => 0979911111,2,Hangup
exten => h,1,SetCIDNum(${CALLERIDNUM})
exten => h,2,System(echo channel: SIP/ovh-out/${CALLERIDNUM} > /tmp/${CALLERIDNUM})
exten => h,3,System(echo context: callback >> /tmp/${CALLERIDNUM})
exten => h,4,System(echo extension: ${CALLERIDNUM} >> /tmp/${CALLERIDNUM})
exten => h,5,System(echo priority: 1 >> /tmp/${CALLERIDNUM})
exten => h,6,System(echo callerid: ${CALLERIDNUM} >> /tmp/${CALLERIDNUM}) ;
exten => h,7,System(echo sleep 5 > /tmp/${CALLERIDNUM}.2)
exten => h,8,System(echo cp /tmp/${CALLERIDNUM} /var/spool/asterisk/outgoing >> /tmp/${CALLERIDNUM}.2)
exten => h,9,System(chmod 775 /tmp/${CALLERIDNUM}.2)
exten => h,10,System(/tmp/${CALLERIDNUM}.2)
exten => h,11,Hangup()
Ca peut peut être t'aider en passant tout par un fichier temporaire non ?

Sinon une question, j'ai testé ça :
Code:
exten => s,1,answer()
exten => s,2,SIPDtmfMode(inband)
exten => s,3,Playback(vm-enter-num-to-call)
exten => s,4,WaitExten()
exten => _X.,2,Dial(SIP/${EXTEN}@forfait-ovh)
Asterisk me rappel, effectue la routine ci-dessus, me donne le message vocal de taper le numéro, mais quand je commence à le taper, ça raccroche. Une idée de l'origine du problème ?
Merci beaucoup

paloute
22/07/2008, 18h37
up ?

paloute
21/07/2008, 21h19
Re:

Je vais reformuler mon problème en détaillant plus, peu être aurai-je plus d'aide :

Je suis lors d'un callback. Je ne cherche pas d'aide relative à la mise en place d'un callback, mais une aide à un problème précis :

Une personne "bipe" le serveur, celui-ci le rappelle.
Voici le context lors de ce "rappelle" :

[callback]
exten => s,1,answer()
exten => s,2,SIPDtmfMode(inband)
exten => s,3,Playback(vm-enter-num-to-call)
exten => s,4,Read(DigitNum||10)
exten => s,5,system(/etc/asterisk/dialnum.sh "${DigitNum}")

L'utilisateur entre les 10 numéros de la personne puis le script dialnum.sh est appelé avec pour paramètre le numéro de l'interlocuteur à contacter.

J’aurai très bien pue écrire cela :

exten => s,1,answer()
exten => s,2,SIPDtmfMode(inband)
exten => s,3,Playback(vm-enter-num-to-call)
exten => s,4,WaitExten()
exten => _X.,2,Dial(SIP/${EXTEN}@forfait-ovh)

La le callback fonctionne parfaitement, mais il est impératif que je passe par "dialnum.sh" pour différentes raisons perso.

Bref, le shell est appelé, dedans je récupère bien le numéro passé en paramètre. J'effectue différentes tâches, et je souhaiterai que ce shell lance ensuite un autre context "[dial-num]" qui appellerai le contact à joindre, et qui mettrai ce contact en relation avec la personne du début.

Mais c'est là que je coince. Comment faire ?

J'avais pensé à un truc du genre (${Tel} = au param passé au shell, le numéro de la personne à contacter) :

echo "Channel: SIP/${Tel}@forfait-ovh" > out
echo "Context: ???" >> out
echo "Extension: ???" >> out
echo "MaxRetries: 2" >> out
echo "RetryTime: 1" >> out
cp out /var/spool/asterisk/outgoing

Comme vous le voyez je ne sais pas quel Context et Extension mettre, et surtout comment faire la liaison entre les 2 personnes.

J'ai fait beaucoup de recherches, apprit plein de choses, mais rien pour régler mon problème.

Donc comment mettre en place ce procédé :

1. une personne (A) appelle le serveur
2. le serveur rappelle A
3. A entre les 10 chiffres du numéro de la personne a joindre (B)
4. le numéro tapé par A est envoyé à dialnum.sh pour différents traitement
5. après les traitements, le numéro de B doit être composé
6. A et B sont mis en relation et papote de la pluie et du beau temps.

J'espère avoir été le plus précis possible. J'attend avec impatience vos précieuses aides

paloute
21/07/2008, 12h38
Bonjour,

Est-il possible d'affecter le retour d'un shell à une variable dans un context.

Je détails :

j'ai test.sh :

#!/bin/bash
echo "0101010101"

et j'ai mon context :

[c-test]
exten => s,1,answer()
exten => ...
exten => s,6,system(/home/test.sh)

Je souhaiterai savoir commet pourrai-je affecter le numéro retourné par test.sh à une variable dans mon context du type

exten => s,7,Set(Variable=system(/home/test.sh)) [Cela ne fonctionne pas bien sur ]

Est-ce possible ? J'ai effectuer de multiples recherches sans trouver le moindre indice.