PDA

Voir la version complète : Commande SYSTEM



Ptityan
05/12/2011, 14h48
Bonjour,

Je suis en train de mettre un système de réveil sur Asterisk. Pour cela j'utilise les fichiers .call.

Dans mon Extensions.conf, j'ai mis :



[reveil]
exten => _*77*XXXXXXXXXXXX,1,Answer()
exten => _*77*XXXXXXXXXXXX,n,Set(year=${EXTEN:4:4})
exten => _*77*XXXXXXXXXXXX,n,Set(month=${EXTEN:8:2})
exten => _*77*XXXXXXXXXXXX,n,Set(day=${EXTEN:10:2})
exten => _*77*XXXXXXXXXXXX,n,Set(hours=${EXTEN:12:2})
exten => _*77*XXXXXXXXXXXX,n,Set(minutes=${EXTEN:14:2})
exten => _*77*XXXXXXXXXXXX,n,NoOp(Wake-up call scheduled for ${CALLERID(num)} at ${hours}:${minutes} on ${day}.${month}.${year}.)
exten => _*77*XXXXXXXXXXXX,n,System(echo -e "Channel: SIP/${CALLERID(num)}\\nContext: wake-up\\nExtension: 23" > /tmp/${UNIQUEID}.call)
exten => _*77*XXXXXXXXXXXX,n,System(touch -t ${year}${month}${day}${hours}${minutes} /tmp/${UNIQUEID}.call)
exten => _*77*XXXXXXXXXXXX,n,System(mv /tmp/${UNIQUEID}.call /var/spool/asterisk/outgoing/)
exten => _*77*XXXXXXXXXXXX,n,Playback(rqsted-wakeup-for)
exten => _*77*XXXXXXXXXXXX,n,SayNumber(${hours})
exten => _*77*XXXXXXXXXXXX,n,SayNumber(${minutes})
exten => _*77*XXXXXXXXXXXX,n,Hangup()

[wake-up]
exten => 23,1,Answer()
exten => 23,n,Wait(1)
exten => 23,n,Playback(this-is-yr-wakeup-call)
exten => 23,n,Wait(1)
exten => 23,n,Hangup()


Lorsque je défini un réveil sur mon téléphone, j'ai bien la création de mon fichier .call. Le soucis vient de la commande SYSTEM :


exten => _*77*XXXXXXXXXXXX,n,System(echo -e "Channel: SIP/${CALLERID(num)}\\nContext: wake-up\\nExtension: 23" > /tmp/${UNIQUEID}.call)

Le écho -e est mal interprété et me donne cela :



Channel: SIP/captainnContext: wake-upnExtension: 23

au lieu de :



Channel: SIP/captain
Context: wake-up
Extension: 23


Lorsque j'exécute la commande echo -e dans un terminal, cela se fait bien comme il faut.

Une idée?

Yann

jean
05/12/2011, 15h03
ci joint un copier coller de chez moi qui marche

exten => h,n(NoCall),System(echo -e -n "\n${STRFTIME(${EPOCH},GMT+4,%C%y-%m-%d %H:%M:%S)}, Tentative appel ${CDR(dst)} " >> /var/www/html/machin.log)

cedricscha
05/12/2011, 16h01
au cas ou (http://www.asterisk-france.org/content.php/26-Cr%C3%A9er-votre-service-de-r%C3%A9veil-avec-votre-Asterisk)

Ptityan
05/12/2011, 16h42
@Jean : J'ai le même soucis avec ta syntaxe.

@Cédric : J'ai bien vu ce tuto, mais le projet me demande de faire ça en fichier .call, dommage d'ailleurs :)

cedricscha
05/12/2011, 17h01
Euh, le tuto, c'est sur la base d'un .call :


.... oici donc le code de l'AGI et le bout de dialplan :

A coller dans le fichier /var/lib/asterisk/agi-bin/reveil.agi :
Code:

#!/bin/bash

# Numéro à rappeler pour le réveil
NUMERO=$1

# Jour configuré pour le réveil
JOUR=$2

# Mois configuré pour le réveil
MOIS=$3

# Annee configurée pour le réveil
ANNEE=$4

# Heure configurée pour le réveil
HEURE=$5

# Minute configurée pour le réveil
MINUTE=$6

TIMESTAMP=$ANNEE$MOIS$JOUR$HEURE$MINUTE

FICHIER=$NUMERO$TIMESTAMP.call

#echo "Channel: SIP/$NUMERO \nAccount: $NUMERO \nMaxRetries: 3\nRetryTime: 10\nWaitTime: 10\nContext: reveil\nExtension: reveil" >> /var/spool/asterisk/tmp/test.call
echo "Channel: SIP/$NUMERO" >> /var/spool/asterisk/tmp/$FICHIER
echo "Account: $NUMERO" >> /var/spool/asterisk/tmp/$FICHIER
echo "CallerID: Reveil <955>" >> /var/spool/asterisk/tmp/$FICHIER
echo "MaxRetries: 3" >> /var/spool/asterisk/tmp/$FICHIER
echo "RetryTime: 10" >> /var/spool/asterisk/tmp/$FICHIER
echo "WaitTime: 10" >> /var/spool/asterisk/tmp/$FICHIER
echo "Context: reveil" >> /var/spool/asterisk/tmp/$FICHIER
echo "Extension: reveil" >> /var/spool/asterisk/tmp/$FICHIER.....

Ptityan
05/12/2011, 17h09
En effet, Lundi :sleep:

Et bien je vais tester tout ça et vous redis!

Merci

jean
05/12/2011, 17h28
@Jean : J'ai le même soucis avec ta syntaxe.



tu me vois perplexe - ca marche sur 1.6 et 1.8

attention, simple \ et double quotes

Ptityan
05/12/2011, 18h07
Je suis sur un IPBX, comportant une 1.4.

http://www.rowetel.com/blog/?page_id=440

Et réponse suite à la demande de passer en 1.6 du constructeur :


I don't have an Asterisk 1.6 ipkg, although it's possible some of the
other distributions for the IP0X (switchfin etc) may support it.

La distrib' est µClinux Blackfin.

Et bien fait attention au simple \ et doubles quotes.

La je suis parti sur la version de Cédric, je génère bien le .call, mais je ne récupère pas le numéro à rappeler. Donc je regarde d'ou ça peut venir.

cedricscha
06/12/2011, 09h28
Tu peux controler via l'ajout de la ligne suivante dans ton extensions.conf :


[reveil]
exten => _977XXXXXXXXXXXX,1,Answer()
exten => _977XXXXXXXXXXXX,n,NoOp(${CDR(accountcode)})
exten => _977XXXXXXXXXXXX,n,Set(ACCOUNTCDE=${CDR(accountcod e)})
exten => _977XXXXXXXXXXXX,n,Wait(1)
exten => _977XXXXXXXXXXXX,n,Playback(hello-world)
exten => _977XXXXXXXXXXXX,n,Playback(date)
exten => _977XXXXXXXXXXXX,n,Saynumber(${EXTEN:3:2})
exten => _977XXXXXXXXXXXX,n,Playback(dot)
exten => _977XXXXXXXXXXXX,n,Saynumber(${EXTEN:5:2})
exten => _977XXXXXXXXXXXX,n,Playback(dot)
exten => _977XXXXXXXXXXXX,n,Saynumber(${EXTEN:7:4})
exten => _977XXXXXXXXXXXX,n,Wait(1)
exten => _977XXXXXXXXXXXX,n,Saynumber(${EXTEN:11:2})
exten => _977XXXXXXXXXXXX,n,Playback(hours)
exten => _977XXXXXXXXXXXX,n,Playback(and)
exten => _977XXXXXXXXXXXX,n,Saynumber(${EXTEN:13:2})
exten => _977XXXXXXXXXXXX,n,Playback(minutes)
exten => _977XXXXXXXXXXXX,n,AGI(reveil.agi,${ACCOUNTCDE},${ EXTEN:3:2},${EXTEN:5:2},${EXTEN:7:4},${EXTEN:11:2} ,${EXTEN:13:2})
exten => _977XXXXXXXXXXXX,n,Hangup()


exten => reveil,1,Answer()
exten => reveil,n,Wait(1)
exten => reveil,n,PlayBack(hello-world)
exten => reveil,n,Wait(1)
exten => reveil,n,SayUnixTime(,CET,kMbdY)
exten => reveil,n,Hangup()

Tu auras ainsi une ligne dans ta cli durant un appel qui t'indique l'accountcode recupéré.

Ptityan
06/12/2011, 11h53
Yes c'est ça que j'ai changé, du coup je récupère bien tout. Je l'ai passe ce {CDR(accountcode)} à {CALLERID(num)}.

Voilà ma fonctionnalité de réveil fonctionne.

Merci à vous pour vos réponses :)

Bonne journée,
Yann

cedricscha
06/12/2011, 11h55
Oublie pas de synchroniser l'heure de ton serveur.

Pour ne pas rater un réveil :)

Ptityan
06/12/2011, 12h18
C'est sur, chose que j'avais oublié au début! :wink: