Weckruf

wrrdlbrrmpft

Mitglied
Mitglied seit
17 Jul 2004
Beiträge
263
Punkte für Reaktionen
0
Punkte
0
[highlight=orange:ab3ef39dd9]EDIT: Das Skript wurde neu überarbeitet. Die aktuellste Version gibt es nun hier zum Download. Der untenstehende Text ist veraltet.[/highlight:ab3ef39dd9]

Hallo,

auf http://www.voip-info.org/tiki-index.php?page=Asterisk tips wake-up gibt es zwar schon sowas. Jedoch komm ich mit dem perl-Skript nicht zurecht. Deshalb hab ich ein eigenes wakeup.agi erstellt. Das run_wakeups Skript kann von obigem Link übernommen werden.

Das Skript wird vom Telefon, über das ich geweckt werden möchte mit 999
angerufen:
Code:
exten => 999,1,agi,wakeup.agi
Für den Weckruf hab ich noch folgenden Context angelegt:
Code:
[weckruf]
exten => ***,1,Answer
exten => ***,2,MP3Player(/var/lib/asterisk/mohmp3/Hahnkraeh.mp3)
exten => ***,3,Hangup
Mein Skript wakeup.agi ist nicht sehr elegant, erfüllt aber seinen Zweck:
Code:
#!/bin/sh
read agi_request
read agi_language
read agi_channel
read agi_type
read agi_uniqueid
read agi_callerid
echo $agi_callerid > /tmp/"callerid.$agi_callerid"
callerid=`sed s/"agi_callerid: "// /tmp/"callerid.$agi_callerid"`
read agi_dnid
read agi_rdnis
read agi_context
read agi_extension
read agi_priority
read agi_enhanced
read agi_accountcode
read emptyline
echo $agi_extension > /tmp/weckzeit.$callerid
echo "GET DATA hours 3000 2" > /dev/stdout
read stunden
echo $stunden > /tmp/stunden.$callerid
hh=`sed s/"200 result="// /tmp/stunden.$callerid`
case $hh in
  00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |\
  13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23)
  ;;
  *)
  echo 'STREAM FILE invalid ""' > /dev/stdout
  read false
  echo 'HANGUP'
  read false
  exit
  ;;
esac
echo "GET DATA minutes 3000 2" > /dev/stdout
read minuten
echo $minuten > /tmp/minuten.$callerid
mm=`sed s/"200 result="// /tmp/minuten.$callerid`
case $mm in
  00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |\
  13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |\
  26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |\
  39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 |\
  52 | 53 | 54 | 55 | 56 | 57 | 58 | 59)
  ;;
  *)
  echo 'STREAM FILE invalid ""' > /dev/stdout
  read false
  echo 'HANGUP'
  read false
  exit
  ;;
esac

echo "Channel: Zap/g1/$callerid" > /tmp/wakeups/$hh$mm.$callerid.call
echo "Callerid: 999" >> /tmp/wakeups/$hh$mm.$callerid.call
echo "MaxRetries: 2" >> /tmp/wakeups/$hh$mm.$callerid.call
echo "RetryTime: 60" >> /tmp/wakeups/$hh$mm.$callerid.call
echo "WaitTime: 60" >> /tmp/wakeups/$hh$mm.$callerid.call
echo "Context: weckruf" >> /tmp/wakeups/$hh$mm.$callerid.call
echo "Extension: ***" >> /tmp/wakeups/$hh$mm.$callerid.call
echo "Priority: 1" >> /tmp/wakeups/$hh$mm.$callerid.call

if [ $hh -lt 10 ]
then hh=`sed s/"200 result=0"// /tmp/stunden.$callerid`
fi
if [ $mm -lt 10 ]
then mm=`sed s/"200 result=0"// /tmp/minuten.$callerid`
fi
echo 'SAY NUMBER '"$hh"' ""' > /dev/stdout
read in
echo 'STREAM FILE oclock ""' > /dev/stdout
read in
echo 'SAY NUMBER '"$mm"' ""' > /dev/stdout
read in
echo 'STREAM FILE vm-goodbye ""' > /dev/stdout
read in
echo 'HANGUP' > /dev/stdout
read in
Bin für Fragen oder Verbesserungsvorschläge jederzeit offen.
Benno
 

Anhänge

schakal2k

Mitglied
Mitglied seit
16 Aug 2004
Beiträge
309
Punkte für Reaktionen
0
Punkte
16
Ich hab da nochmal ne Frage zu:

Wo muss ich die einzelnen Dateien abspeichern?

Die "wakeup.agi" muss wahrscheinlich in /var/lib/asterisk/agi-bin aber wo muss die "run_wakeups" hin?

Sehe ich es richtig, dass ich das Script "run_wakeups" ausführbar machen muss und dann starten muss (nachdem Asterisk gestartet ist)???
 

wrrdlbrrmpft

Mitglied
Mitglied seit
17 Jul 2004
Beiträge
263
Punkte für Reaktionen
0
Punkte
0
Also, run_wakeups muss ausführbar sein. Das Skript wird jede Minute per cron aufgerufen und guckt dann, ob in /tmp/wakeups ein Weckruf-Callfile abgelegt ist. Wenn ja, wird dieses Callfile nach /var/spool/asterisk/outgoing verschoben und leitet damit den Weckruf ein.
Den cronjob richtet man mit "crontab -e" ein:
* * * * * /usr/local/bin/run_wakeups

Wo run_wakeups abgespeichert wird, ist eigentlich Wurscht. In diesem Beispiel ist es unter /usr/local/bin.

Unter /tmp muss auch noch das Verzeichnis wakeups angelegt werden: "mkdir /tmp/wakeups"

Vielleicht will man den Weckruf nicht über die 999 anrufen. Dann muss man die extension halt abändern. Wenn man den Context so übernimmt, wie ich es beschrieben habe, dann braucht man sonst eigentlich nur noch in wakeup.agi nach der Zeile
Code:
echo "Channel: Zap/g1/$callerid" > /tmp/wakeups/$hh$mm.$callerid.call
suchen und den Channel, der zum Wecken angerufen werden soll, anpassen.

Wenn ich nichts übersehen habe, sollte es das eigentlich auch schon gewesen sein.
 

schakal2k

Mitglied
Mitglied seit
16 Aug 2004
Beiträge
309
Punkte für Reaktionen
0
Punkte
16
Bei mir Fehlt die Datei "oclock", daher bricht das Script ab...

Wo bekomme ich die Datei her???

EDIT:

Ich hab die Zeilen einfach raus genommen...
 

wrrdlbrrmpft

Mitglied
Mitglied seit
17 Jul 2004
Beiträge
263
Punkte für Reaktionen
0
Punkte
0
Die Datei ist nur für die Ansage der Uhrzeit relevant. Sie ist bei den deutschen Soundfiles der Stadt Pforzheim dabei. Die Zeilen kann man natürlich rausnehmen, wenn man auf die Ansage verzichten kann.
Die Soundfiles findet man auf www.stadt-pforzheim.de/asterisk.
 

wrrdlbrrmpft

Mitglied
Mitglied seit
17 Jul 2004
Beiträge
263
Punkte für Reaktionen
0
Punkte
0
Schritt für Schritt:

1. Verzeichnis anlegen: "mkdir /tmp/wakeups"

2. Cronjob einrichten (als root): "crontab -e". Im nun aufgerufenen Editor (z. B. vim) gibt man nun folgende Zeile ein und speichert die Datei ab:
* * * * * /usr/local/bin/run_wakeups

3. In extensions.conf legt man eine extension an, die das Skript zum Eingeben des Weckrufs aufruft:
exten => 999,1,agi,wakeup.agi

4. In extensions.conf legt man außerdem einen Context für den weckruf an (Hahnkraeh.mp3 ist durch die Datei zu ersetzen, mit der man geweckt werden möchte):
[weckruf]
exten => ***,1,Answer
exten => ***,2,MP3Player(/var/lib/asterisk/mohmp3/Hahnkraeh.mp3)
exten => ***,3,Hangup

5. Das oben gepostete Skript wakeup.agi wird nach /var/lib/asterisk/agi-bin kopiert und ausführbar gemacht.

6. In wakeup.agi muss unbedingt der Channel angepasst werden, siehe vorige Nachricht.

7. run_wakeups nach /usr/local/bin schieben und ausführbar machen

8. Asterisk neu starten

Angenommen, ich will morgen um 8:13 Uhr geweckt werden. Also geh ich an mein Telefon und wähle die 999.
Dann werde ich aufgefordert Stunden und Minuten einzugeben. Dazu muss ich 08 (nicht die vorangestellte Null vergessen) als Stunden und 13 als Minuten eingeben. Dann bekomme ich noch die Rückmeldung "8 Uhr 13. Auf Wiedersehen!" und lege auf. Am nächsten Morgen klingelt dann mein Telefon. Über "WaitTime", "MaxRetries" und "RetryTime" in wakeup.agi kann man noch festlegen, wie lange das Telefon klingeln soll, wie viele Versuche bei nicht erreichen gestartet werden und wie lange zwischen den einzelnen Versuchen gewartet werden soll.
 

schakal2k

Mitglied
Mitglied seit
16 Aug 2004
Beiträge
309
Punkte für Reaktionen
0
Punkte
16
wrrdlbrrmpft schrieb:
Die Datei ist nur für die Ansage der Uhrzeit relevant. Sie ist bei den deutschen Soundfiles der Stadt Pforzheim dabei. Die Zeilen kann man natürlich rausnehmen, wenn man auf die Ansage verzichten kann.
Die Soundfiles findet man auf www.stadt-pforzheim.de/asterisk.
jap, die hab ich...

Die Datei ist auch da, aber ich bekomme folgende Meldung vom *:

Sep 6 15:53:09 WARNING[-1243075664]: file.c:473 ast_openstream: File does not exist in any format
Sep 6 15:53:09 WARNING[-1243075664]: file.c:761 ast_streamfile: Unable to open (format ULAW): No such file or directory
Sep 6 15:53:09 WARNING[-1243075664]: file.c:473 ast_openstream: File oclock does not exist in any format
Sep 6 15:53:09 WARNING[-1243075664]: res_agi.c:319 handle_streamfile: Unable to open oclock
EDIT:

Allerdings liegt die Datei in "digits"
 

wrrdlbrrmpft

Mitglied
Mitglied seit
17 Jul 2004
Beiträge
263
Punkte für Reaktionen
0
Punkte
0
Wenn die restlichen Ansagen funktionieren, ist vielleicht die Datei fehlerhaft. Vielleicht funktioniert es, wenn du die Datei durch die hier angehängte ersetzt.
 

schakal2k

Mitglied
Mitglied seit
16 Aug 2004
Beiträge
309
Punkte für Reaktionen
0
Punkte
16

schakal2k

Mitglied
Mitglied seit
16 Aug 2004
Beiträge
309
Punkte für Reaktionen
0
Punkte
16

wrrdlbrrmpft

Mitglied
Mitglied seit
17 Jul 2004
Beiträge
263
Punkte für Reaktionen
0
Punkte
0
Ich habe die Originaldateien überschrieben. Deshalb liegt sie bei mir unter /var/lib/asterisk/sounds/oclock.gsm.
Hast du diese Datei ersetzt oder die unter /var/lib/asterisk/sounds/de/oclock.gsm? Du kannst ja mal beide ersetzen, evtl. vorher ein backup von den Originaldateien machen.
 

schakal2k

Mitglied
Mitglied seit
16 Aug 2004
Beiträge
309
Punkte für Reaktionen
0
Punkte
16
wrrdlbrrmpft schrieb:
Ich habe die Originaldateien überschrieben. Deshalb liegt sie bei mir unter /var/lib/asterisk/sounds/oclock.gsm.
Hast du diese Datei ersetzt oder die unter /var/lib/asterisk/sounds/de/oclock.gsm? Du kannst ja mal beide ersetzen, evtl. vorher ein backup von den Originaldateien machen.
bei meinen Originaldateien liegt die oclock.gsm aber auch unter digits...
ich werde sie mal direkt in sounds reinkopieren...

EDIT:

Jetzt gehts...

Wo sucht denn die Funktion "STREAM FILE" ???
 

wrrdlbrrmpft

Mitglied
Mitglied seit
17 Jul 2004
Beiträge
263
Punkte für Reaktionen
0
Punkte
0
Ich vermute, dass "STREAM FILE" in sounds sucht und "SAY NUMBER" in sounds/digits.

P.S.: Ich darf wohl keine Attachments mit der Erweiterung gsm anhängen.
 

allesOK

Mitglied
Mitglied seit
24 Mai 2004
Beiträge
732
Punkte für Reaktionen
0
Punkte
0
Hey, funzt bei mir jetzt auch wunderbar! Vielen Dank!
 

schakal2k

Mitglied
Mitglied seit
16 Aug 2004
Beiträge
309
Punkte für Reaktionen
0
Punkte
16
Noch zwei Sache:

1. Bei mir wird das erste Wort, also "Stunden" irgendwie verschluckt...

2. Kann ich auch sowohl Softphones (SIP) als auch per ISDN/HFC angeschlossene Telefone gleichzeitig (also ohne Änderungen am Script) verwenden?
 

allesOK

Mitglied
Mitglied seit
24 Mai 2004
Beiträge
732
Punkte für Reaktionen
0
Punkte
0
1)
Code:
exten => 999,1,Answer
exten => 999,2,Wait(1)
exten => 999,3,agi,wakeup.agi
2) ja kein Problem
 

ventojetta

Neuer User
Mitglied seit
9 Aug 2004
Beiträge
61
Punkte für Reaktionen
0
Punkte
0
Hallo

Ich wollte bei mir den Weckruf installieren

Leider bekomme ich immer folgenden Fehler beim Anrufen von 999

Code:
*CLI>     -- Executing AGI("SIP/10-a970", "wakeup.agi") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/wakeup.agi
Failed to execute '/var/lib/asterisk/agi-bin/wakeup.agi': Exec format error
    -- AGI Script wakeup.agi completed, returning 0
Leider weis ich nichts damit anzufangen
Und der Weckrup geht leider auch noch nicht (halt ein Anfänger)
 

wrrdlbrrmpft

Mitglied
Mitglied seit
17 Jul 2004
Beiträge
263
Punkte für Reaktionen
0
Punkte
0
Hallo,

das Skript muss nach /var/lib/asterisk/agi-bin/ geschoben werden. Und die Datei muss ausführbar sein.
Gib mal in der Shell ein:
ls -l /var/lib/asterisk/agi-bin/wakeup.agi

Das sollte sowas in der Art liefern:
-rwxr-xr-x 1 root root 2281 Sep 7 23:45 /var/lib/asterisk/agi-bin/wakeup.agi

Die x in -rwxr-xr-x bedeuten, dass die Datei ausführbar ist. Falls nicht:
chmod +x /var/lib/asterisk/agi-bin/wakeup.agi

Eventuell muss das Skript auch noch ein wenig angepasst werden, z. B. wenn du CallerIDs in der Form "Mein Name" <12345> benutzt. Melde dich nochmal, wenn es Probleme gibt. Ich kann dir mit ziemlicher Sicherheit weiterhelfen.

wrrdlbrrmpft
 

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
233,333
Beiträge
2,032,908
Mitglieder
351,898
Neuestes Mitglied
Mariolaf