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

Weck/Erinnerungsanrufe

Dieses Thema im Forum "Asterisk auf FBF" wurde erstellt von lipperreiher, 19 Jan. 2009.

  1. lipperreiher

    lipperreiher Neuer User

    Registriert seit:
    25 Jan. 2005
    Beiträge:
    75
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #1 lipperreiher, 19 Jan. 2009
    Zuletzt bearbeitet: 19 Jan. 2009
    Hallo zusammen,

    ich wollte auf der Fritzbox eine per Telefon programmierbare Weckruf-Funktion basteln, und zwar nach dieser Anleitung von Stefan Wintermeyer:

    http://www.das-asterisk-buch.de/1.0/call-file-weckruf.html

    Offensichtlich beherrscht das "touch-Programm" der busybox den Parameter "-t" nicht, so dass man den Zeitstempel der Datei nicht ändern kann und die Anleitung so nicht umgesetzt werden kann.

    Im folgenden meine Lösung zu diesem Thema, die auf dem Konzept von Stefan Wintermeyer aufbaut.
    Anregungen bzw. Verbesserungen sind gerne willkommen.

    extensions.conf
    Code:
    [weckruf-erstellen]
    exten => _4000XXXXXXXXXXXX,1,Answer()
    exten => _4000XXXXXXXXXXXX,n,Set(Protokoll=${IF($[ ${CALLERID(num):0:1} = 8]?IAX2:SIP)})
    exten => _4000XXXXXXXXXXXX,n,Set(Jahr=${EXTEN:4:4})
    exten => _4000XXXXXXXXXXXX,n,Set(Monat=${EXTEN:8:2})
    exten => _4000XXXXXXXXXXXX,n,Set(Tag=${EXTEN:10:2})
    exten => _4000XXXXXXXXXXXX,n,Set(Stunden=${EXTEN:12:2})
    exten => _4000XXXXXXXXXXXX,n,Set(Minuten=${EXTEN:14:2})
    exten => _4000XXXXXXXXXXXX,n,Set(Filename=${Jahr}${Monat}${Tag}${Stunden}${Minuten}-${CALLERID(num)}.call)
    exten => _4000XXXXXXXXXXXX,n,system,chroot /oldroot echo "Channel: ${Protokoll}/${CALLERID(num)}" > /var/tmp/${Filename}
    exten => _4000XXXXXXXXXXXX,n,system,chroot /oldroot echo "Context: Weckruf" >> /var/tmp/${Filename}
    exten => _4000XXXXXXXXXXXX,n,system,chroot /oldroot echo "Extension: 777" >> /var/tmp/${Filename}
    exten => _4000XXXXXXXXXXXX,n,system,chroot /oldroot echo "Archive: yes" >> /var/tmp/${Filename}
    exten => _4000XXXXXXXXXXXX,n,system,chroot /oldroot echo "CallerID: ${CALLERID(num)}" >> /var/tmp/${Filename}
    exten => _4000XXXXXXXXXXXX,n,Playback(weckruf-aktiviert)
    exten => _4000XXXXXXXXXXXX,n,SayNumber(${Stunden})
    exten => _4000XXXXXXXXXXXX,n,Playback(digits/oclock)
    exten => _4000XXXXXXXXXXXX,n,SayNumber(${Minuten})
    exten => _4000XXXXXXXXXXXX,n,Playback(option-erinnerungstext)
    exten => _4000XXXXXXXXXXXX,n,Wait,2
    exten => _4000XXXXXXXXXXXX,n,system,chroot /oldroot echo "Set: RECORDFILE=${UNIQUEID}-${CALLERID(num)}" >> /var/tmp/${Filename}
    exten => _4000XXXXXXXXXXXX,n,record,/var/lib/asterisk/sounds/${UNIQUEID}-${CALLERID(num)}.gsm|3|60
    exten => _4000XXXXXXXXXXXX,n,Hangup()
    
    
    [weckruf-loeschen]
    exten => 4001,1,Answer()
    exten => 4001,n,Wait,1
    exten => 4001,n,Background(weckauftrag-loeschen-hinweis)
    
    exten => 5,1,Playback(weckauftrag-loeschen-aktiviert)
    exten => 5,n,system,chroot /oldroot /bin/rm -f /var/tmp/2*-${CALLERID(num)}.call
    exten => 5,n,system,chroot /oldroot /bin/rm -f /var/lib/asterisk/sounds/*-${CALLERID(num)}.gsm
    exten => 5,n,Hangup()
    
    [Weckruf]
    exten => 777,1,Answer()
    exten => 777,n,Wait(1)
    exten => 777,n,Wait(1)
    exten => 777,n,GotoIf($[${EXISTS(${RECORDFILE})}]?playanddelete:notdelete)
    exten => 777,n(notdelete),NoOp("Die Variable RECORDFILE ist nicht gefuellt, wir spielen den Standardsound ...")
    exten => 777,n,Playback(weckruf)
    exten => 777,n,Hangup()
    exten => 777,n(playanddelete),Playback(${RECORDFILE})
    exten => 777,n,system,chroot /oldroot /bin/rm -f /var/lib/asterisk/sounds/${RECORDFILE}.gsm
    exten => 777,n,Hangup()
    

    Zur Erklärung:
    Es wird zunächst mal das Protokoll gecheckt: Nebenstellen beginnend mit "8" sind IAX2, alles andere ist SIP.
    Dann werden die per Telefon eingegeben Zahlen den Variablen zugewiesen.
    Man hat die Möglichkeit, einen persönlichen Ansagetext aufzunehmen, der dann bei dem Weck- Erinnerungsruf abgespielt wird. Ansonsten wird ein Standard Sprachbaustein genommen.


    Damit das ganze funktioniert, läuft bei mir permanent ein weiteres Skript, welches alle 40 Sekunden die vorhandenen callfiles in das richtige Verzeichnis verschiebt.
    Wer seine Box gefreetz hat, kann das komfortabel per cronjob machen.
    Ich behelfe mich da mit einer zusätzlichen Zeile in der /var/flash/debug.conf und einer Endlos-Schleife innerhalb des Skriptes.

    Hier das Skript:

    Code:
    #!/bin/sh
    
    ###
    ### Zeit, nach der die Schleife erneut durchlaufen wird
    ###
    SLEEPTIME=40
    
    ###
    ### Pfad, in der die Dateien zu finden sind
    ###
    SOURCE="/var/tmp"
    
    ###
    ### Pfad, wo die Dateien landen sollen
    ###
    TARGET="/var/spool/asterisk/outgoing"
    
    
    
    
    while true
    do
            ###
            ### aktuelles Datum ermitteln
            ###
            DATUM=`date +'%Y%m%d%H%M'`
    
            ###
            ### alle in Frage kommenden Dateien ermitteln
            ###
            FILELIST=`/bin/ls ${SOURCE}/${DATUM}*.call`
    
    
            ###
            ### Dateien verschieben
            ###
            for file in $FILELIST
                do
                    /bin/mv $file $TARGET/
    
                done
             sleep $SLEEPTIME
    done
    

    Ich habe das noch so verfeinert, dass fehlgeschlagene Anrufe (z.Bsp. weil die NST nicht angemeldet ist) per Mail verschickt werden (kann ich bei Interesse auch noch posten).

    HINWEIS:
    Alle Sprachbausteine müssen natürlich angelegt und im Verzeichnis "/var/lib/asterisk/sounds" abgelegt werden!

    So, nun warte ich auf Reaktionen.

    Viele Grüße

    lipperreiher
     
  2. dynamic

    dynamic Aktives Mitglied

    Registriert seit:
    1 Apr. 2006
    Beiträge:
    1,154
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Finde gut, dass Du Dein Know-How und Deine Erfahrungen mit anderen teilst!!
    Wie es scheint nutzt Du jedoch noch eine Asterisk-Installation, die noch auf der chroot Variante beruht. Aus diesem Grund vielleicht ein kurzer Hinweis für evtl. Interessierte:

    Da wir die Asterisk-Installation vor einiger Zeit komplett ohne chroot gestaltet haben sind zwischenzeitlich alle Pfade ( ohne chroot ) relativ zum FBF-Root ( / ) abgelegt und nicht relativ zu oldroot!

    Aus diesem Grund müsstet ihr aus dem obigen Beispiel die "chroot" Anweisungen entsprechend rausnehmen und die Pfade anpassen.

    Gruß
    dynamic
     
  3. waldoo

    waldoo Aktives Mitglied

    Registriert seit:
    28 Jan. 2006
    Beiträge:
    818
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo lipperreiher,

    auch ich danke Dir für die Info hier.
    Hatte vor einiger Zeit mit selbem experimentiert aber dann doch wieder sein lassen.

    Ich hatte zwischenzeitlich einen cronjob in der Fritzbox (mit Freetz) hinterlegt, die zu einer bestimmten Zeit bei mir anrief. Ich poste es mal, vielleicht bringts ja jemanden etwas :)

    15 7 * * 4 echo -e "Channel: SIP/****\nCallerid: ****\nContext: ****\nExtension: ****\nSetVar: CALLERIDNUM=****\nMaxRetries: 2\nRetryTime: 30\nWaitTime: 60\nPriority: 1\n" >> /var/spool/asterisk/outgoing/callfile.txt

    Im zweifellfall bitte HIER nachlesen