Callfile Problem

Kermit23

Neuer User
Mitglied seit
31 Okt 2004
Beiträge
117
Punkte für Reaktionen
0
Punkte
16
Hallo,
ich möchte gerne über bestimmte Ereignisse informiert werden. Dazu soll mein Telefon automatisch den Ruf annehmen (Intercom-Funktion), eine Ansage abgespielt werde, und wieder aufgelegt.

Das ganze wollte ich mit einem Callfile machen. Aber es ist wohl nicht so einfach, wie ich dachte. Ich möchte mit dem Callfile ja keinen anderen Teilnehmer anrufen. Muss man dazu irgendeine App im Callfile benutzen?

Code:
    phone.sh

    #!/bin/sh
    CALLFILE=/tmp/callfile.call
    echo Channel: Local/4711@callfile > $CALLFILE
    echo Callerid: $1 >> $CALLFILE
    echo MaxRetries: 0 >> $CALLFILE
    echo WaitTime: 30 >> $CALLFILE
    #echo Context: intern >> $CALLFILE
    #echo Extension: 4712 >> $CALLFILE
    echo Priority: 1 >> $CALLFILE
    chmod 666 $CALLFILE
    mv $CALLFILE /var/spool/asterisk/outgoing

Hier meckert Asterisk, dass ihm eine App oder Extension fehlt. Ich möchte mit dem Callfile ja aber nirgendwo anrufen! Brauche ich dann eine App?
NACHTRAG: Ok, mir ist gerade eingefallen: Ich kann ja einfach eine neue Extension im Dialplan anlegen, welche die Ansage macht. Diese Rufe ich dann halt mit dem Callfile an. Ist trotzdem irgendwie unschön.

Code:
    Auszug extensions.conf

    [callfile]
    ;exten => _4711,1,SIPAddHeader(Alert-Info: Bop)
    exten => _4711,1,SIPAddHeader(Call-Info: <sip:192.168.1.1>\;answer-after=3)
    exten => _4711,n,Dial(SIP/4711,60,tT)
    exten => _4711,n,System(echo "Alarm!!! Das ist ein Test!" | mbrola.sh)
    exten => _4711,n,playback(mbrola)
    exten => _4711,n,Playback(demo-thanks)
    exten => _4711,n,Busy
    exten => _4711,n,Hangup
 
Zuletzt bearbeitet:
Hallo,
... Diese Rufe ich dann halt mit dem Callfile an. Ist trotzdem irgendwie unschön...

mit einem "automatischem Annehmen" eines SIP Telefones und einem CALL-File hab ich mir meinen Anrufbeantworter realisiert. Unschön sind Call-Files nicht. Ich finde, diese Dinger sogar sehr sinnvoll.

- Anrufer wird in einen "MeetMe"-Raum gesteckt
- Callfile wird erzeugt (Interkom-Anruf mit der Agenten-Option "nur mithören")
- Text-to-Speech-Ansage wird runtergesabbelt, über den Lautsprecher des SIP-Telefons hört man den Anrufer (der Anrufer kann nicht in den Raum hören) und kann per Tastencode den Anrufer doch noch entgegennehmen (über eine andere Leitung)
 
Danke für Deine Anregung oggy!
Nur eines ist mir nicht ganz klar: Das Callfile verbindet Dein Telefon automatisch mit dem meetme-Raum, wo auch der Anrufer drin ist. Nur wie wird Dein Telefon wieder ausgelöst, wenn der Anrufer aufgelegt hat? Meines würde nun ewig in dem Meetme-Raum verweilen.

Ich stehe jetzt nämlich vor einem ähnlichem Problem: Ich möchte dass die Ansage nicht nur auf einem, sondern auf zwei Telefonen gleichzeitig erfolgt. Ich könnte per Callfile zwar einen Meetme-Raum anwählen, aber wie kriege ich die Telefone wieder daraus. Ich kann den Meetme-Raum nach der Ansage ja nicht einfach "auflegen".
Mein Problem ist vor allem die Methode, wie meine TTS-Datei erzeugt wird.
 
Zuletzt bearbeitet:
Ich stehe jetzt nämlich vor einem ähnlichem Problem: Ich möchte dass die Ansage nicht nur auf einem, sondern auf zwei Telefonen gleichzeitig erfolgt. Ich könnte per Callfile zwar einen Meetme-Raum anwählen, aber wie kriege ich die Telefone wieder daraus. Ich kann den Meetme-Raum nach der Ansage ja nicht einfach "auflegen".

nach dem Auflegen (im "h"-Teil) wird ein Script gestartet, dass die Verbindungen zu diesem Meetme-Raum trennt. Ich schaue nachher mal nach, wie genau ich das gelöst habe.

Mein Problem ist vor allem die Methode, wie meine TTS-Datei erzeugt wird.

psst ... da gibt es einen Thread hier im Unterforum, wie man eine Wettervorhersage einbindet... ;)


[edit]

Auszug aus der extensions.conf
Code:
[callrein]
...
exten => _4711,n,Goto(callrein,voicemail,1)
...

exten => voicemail,1,system(/etc/asterisk/ansage.pl ${CALLERID(num)} ${UNIQUEID})
exten => voicemail,n,Answer
exten => voicemail,n,System(echo "Channel: SIP/13" >/etc/asterisk/outgoing/voicemail.call)
exten => voicemail,n,System(echo "MaxRetries: 0" >>/etc/asterisk/outgoing/voicemail.call)
exten => voicemail,n,System(echo "RetryTime: 20" >>/etc/asterisk/outgoing/voicemail.call)
exten => voicemail,n,System(echo "WaitTime: 30" >>/etc/asterisk/outgoing/voicemail.call)
exten => voicemail,n,System(echo "Context: interkom" >>/etc/asterisk/outgoing/voicemail.call)
exten => voicemail,n,System(echo "Extension: voicemail" >>/etc/asterisk/outgoing/voicemail.call)
exten => voicemail,n,System(echo "Priority: 1" >>/etc/asterisk/outgoing/voicemail.call)
exten => voicemail,n,System(/etc/asterisk/callfile-mailbox.sh)
exten => voicemail,n(interkom),Set(SPYGROUP=90009)
exten => voicemail,n,wait(1)
exten => voicemail,n,Playback(/etc/asterisk/sound/${UNIQUEID})
exten => voicemail,n(mailbox),Set(merkerzeit=0)
exten => voicemail,n,Set(merkerconf=0)
exten => voicemail,n,Set(zaehler=1)
exten => voicemail,n,Set(zeit=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})
exten => voicemail,n,Noop(${CALLERID(num)} ${zeit})
exten => voicemail,n,System(echo ";" >/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "; Message Information file" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo ";" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "[message]" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "origmailbox=4711" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "context=${CONTEXT}" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "macrocontext=" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "exten=${EXTEN}" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "priority=${PRIORITY}" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "callerchan=${UNIQUEID}" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "callerid=${CALLERID(name)} <${CALLERID(num)}>" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "origdate=${STRFTIME(${EPOCH},,%A %b %d %I:%M:%S %p %Z %Y)}" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "origtime=${EPOCH}" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "category=" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,System(echo "duration=2" >>/var/spool/asterisk/monitor/${zeit}-${CALLERID(num)}.txt)
exten => voicemail,n,Monitor(wav49,${zeit}-${CALLERID(num)},m)
exten => voicemail,n,Playback(/var/lib/asterisk/sounds/de/beep)
exten => voicemail,n,while(${zaehler} < 120)
exten => voicemail,n,MeetMeCount(90009,merkerconf)
exten => voicemail,n,GotoIf($[${merkerconf} > 0 ]?abgehoben)
exten => voicemail,n,wait(1)
exten => voicemail,n,set(zaehler=$[${zaehler} + 1])
exten => voicemail,n,EndWhile
exten => voicemail,n,Playback(/var/lib/asterisk/sounds/de/beep)
exten => voicemail,n,StopMonitor();
exten => voicemail,n,Hangup
exten => voicemail,n(abgehoben),System(/etc/asterisk/interkom-hangup.pl)
exten => voicemail,n,StopMonitor()
exten => voicemail,n,MeetMe(90009,qx,1234)
exten => voicemail,n,Hangup

exten => h,1,System(/etc/asterisk/interkom-hangup.pl)
exten => h,2,StopMonitor();
exten => h,3,System(/etc/asterisk/callfile-mailbox-script.sh)
exten => h,4,jabbersend(asterisk,[email protected],${CALLERID(name)} mit Rufnummer ${CALLERID(num)} hat angerufen. Status: ${merker})
exten => h,5,jabbersend(asterisk,[email protected],${CALLERID(name)} mit Rufnummer ${CALLERID(num)} hat angerufen. Status: ${merker})
exten => h,6,GotoIf($[ ${merker} = voicemail ]?callrein,anruflog,1:7)
exten => h,7,GotoIf($[ ${merker} = klingeln ]?callrein,hangupklingeln,1:8)
exten => h,8,GotoIf($[ ${merker} = black ]?callrein,anruflog,1:9)
exten => h,9,GotoIf($[ ${merker} = failed ]?callrein,anruflog,1:10)
exten => h,10,GotoIf($[ ${merker} = ok ]?callrein,anruflog,1:11)
exten => h,11,Noop(nichts)

[interkom]
exten => voicemail,1,Answer
exten => voicemail,n,ChanSpy(,g(90009)q)
exten => voicemail,n,Hangup

interkom-hangup.pl
Code:
#!/usr/bin/perl -w
use strict;
my $session="";
$session=qx(asterisk -rx 'core show channels' | grep SIP/13 | xargs -n1 | grep SIP/13);
chomp($session);
system("asterisk -rx \"hangup request $session\"");
 
Zuletzt bearbeitet:
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.