.titleBar { margin-bottom: 5px!important; }

Weckruf

Dieses Thema im Forum "Asterisk Skripte" wurde erstellt von wrrdlbrrmpft, 6 Sep. 2004.

  1. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    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:

  2. schakal2k

    schakal2k Mitglied

    Registriert seit:
    16 Aug. 2004
    Beiträge:
    309
    Zustimmungen:
    0
    Punkte für Erfolge:
    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)???
     
  3. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    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.
     
  4. schakal2k

    schakal2k Mitglied

    Registriert seit:
    16 Aug. 2004
    Beiträge:
    309
    Zustimmungen:
    0
    Punkte für Erfolge:
    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...
     
  5. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    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.
     
  6. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    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.
     
  7. schakal2k

    schakal2k Mitglied

    Registriert seit:
    16 Aug. 2004
    Beiträge:
    309
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    jap, die hab ich...

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

    EDIT:

    Allerdings liegt die Datei in "digits"
     
  8. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Wenn die restlichen Ansagen funktionieren, ist vielleicht die Datei fehlerhaft. Vielleicht funktioniert es, wenn du die Datei durch die hier angehängte ersetzt.
     
  9. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hat das mit dem Anhang funktioniert?
     
  10. schakal2k

    schakal2k Mitglied

    Registriert seit:
    16 Aug. 2004
    Beiträge:
    309
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Nein, ich sehe keinen Anhang...
     
  11. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
  12. schakal2k

    schakal2k Mitglied

    Registriert seit:
    16 Aug. 2004
    Beiträge:
    309
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Immernoch die gleiche Meldung...

    Wo liegt bei dir die datei "oclock" ???
     
  13. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    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.
     
  14. schakal2k

    schakal2k Mitglied

    Registriert seit:
    16 Aug. 2004
    Beiträge:
    309
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    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" ???
     
  15. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    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.
     
  16. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hey, funzt bei mir jetzt auch wunderbar! Vielen Dank!
     
  17. schakal2k

    schakal2k Mitglied

    Registriert seit:
    16 Aug. 2004
    Beiträge:
    309
    Zustimmungen:
    0
    Punkte für Erfolge:
    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?
     
  18. allesOK

    allesOK Mitglied

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

    ventojetta Neuer User

    Registriert seit:
    9 Aug. 2004
    Beiträge:
    61
    Zustimmungen:
    0
    Punkte für Erfolge:
    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)
     
  20. wrrdlbrrmpft

    wrrdlbrrmpft Mitglied

    Registriert seit:
    17 Juli 2004
    Beiträge:
    263
    Zustimmungen:
    0
    Punkte für Erfolge:
    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