Weck/Erinnerungsanrufe

lipperreiher

Neuer User
Mitglied seit
25 Jan 2005
Beiträge
75
Punkte für Reaktionen
0
Punkte
0
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
 
Zuletzt bearbeitet:
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
 
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
 
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.