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

  • wakeup-0.04.tar.gz
    849 Bytes · Aufrufe: 215
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)???
 
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.
 
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...
 
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.
 
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.
 
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"
 
Wenn die restlichen Ansagen funktionieren, ist vielleicht die Datei fehlerhaft. Vielleicht funktioniert es, wenn du die Datei durch die hier angehängte ersetzt.
 
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.
 
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" ???
 
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.
 
Hey, funzt bei mir jetzt auch wunderbar! Vielen Dank!
 
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?
 
1)
Code:
exten => 999,1,Answer
exten => 999,2,Wait(1)
exten => 999,3,agi,wakeup.agi

2) ja kein Problem
 
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)
 
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
 

Statistik des Forums

Themen
244,695
Beiträge
2,216,692
Mitglieder
371,315
Neuestes Mitglied
jack-mack
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.