Dienst: Ruhe vor dem Telefon?

thorsten.gehrig

Mitglied
Mitglied seit
14 Jun 2004
Beiträge
493
Punkte für Reaktionen
0
Punkte
16
Hallo,

meine Frau wünscht sich die Funktion "Ruhe vor dem Telefon" - am besten noch Zeitgesteuert.
Hintergrund: wenn das Baby endlich mal Mittagsschlaf hält würde meine Frau auch gerne mal ne Stunde ausruhen. Kaum fallen die Augen zu klingelts telefon...

Meine Ideen dazu: entweder per kurzwahl eine alternative extension.conf verwenden (kopieren) und einen reload starten.
Luxus: per "at ...." nach einer definierten Zeit wieder die originale extension.conf zurückkopieren und "reload".

Gibts von euch Ideen oder ansätze dazu ?

Gruß
Thorsten
 
Da gibt's mehrere Moeglichkeiten:

1. Kauf dir ein SIP-Telefone das eine 'do not disturb'-Funtktion hat. Beim Snom 360 braucht man z.B. nur eine Taste druecken um das zu aktivieren.
2. Leg dir ne spezielle extension an, die einfach nur mit DBPut den DND-Status in der Datenbank setzt. Bei einem Anruf kannst du dann den Status per DBGet abfragen und je nach Wert entweder den Anruf durchstellen oder direkt zur VoiceMail weiterleiten oder abweisen oder ... :)
3. Verwende includes mit Zeitbeschraenkung.

Nummer 2 duerfte wohl fuer dich am besten geeignet sein, da du ja schon ein Telefon hast und das ganze auch ein wenig flexibel haben willst. Du kannst dir dann ja z.B. die Extensions zum (de)aktivieren auf Zielwahltasten legen wenn dein Telefon sowas hat.
 
Für eine sture Zeitsteuerung wäre GotoIfTime dein Freund. Beispielsweise kann man dann einfach "hinter" das Dial-Statement springen und zum Anrufbeantworter wechseln.

Wenn es flexibel sein soll, wäre die Interaktion mit der Asterisk-eigenen Datenbank sehr zu empfehlen (der zweite Vorschlag von Maik).

Edit: noch eine Anmerkung am Rande: die Einträge in der Asterisk-Datenbank lassen sich natürlich auch per cron/at-Befehl ändern. Diese Lösung wäre also definitiv vorzuziehen.
 
Wie ginge es denn mit den Built-in Extension Numbers??
http://voip-info.org/tiki-index.php?page=Asterisk ZAP channels

*0 Send hook flash
*67 Disable Caller ID
*69 Say last caller's Caller ID ("call return")
*70 Disable call waiting
*72 Activate "call forward immediate"
*73 Deactivate "call forward immediate"
*78 Enable "Do Not Disturb"
*79 Disable "Do Not Disturb"
*80 Add last caller's caller ID to blacklist
*82 Enable Caller ID (only if disabled with *67)


dann mit *78 Enable "Do Not Disturb" das Telefon
stumm schalten.

Ich habe das mal versucht, aber es will nicht klappen.
Hat das von euch schon jemand benutzt?

Gruß
britzelfix
 
ecco schrieb:
Edit: noch eine Anmerkung am Rande: die Einträge in der Asterisk-Datenbank lassen sich natürlich auch per cron/at-Befehl ändern. Diese Lösung wäre also definitiv vorzuziehen.

Zum Auslesen von Daten kann man das machen. Wenn aber Asterisk laeuft sollte man keine Werte veraendern denn damit koennte man die DB beschaedigen, wenn Asterisk gerade selbst was aendern will.
 
Machen wir es doch mal wie im Kochstudio:

Zitat: Ich hab das schonmal vorbereitet ...
1.) Wir rühren einen Context zusammen. Der macht folgendes:

*90 wird gewählt: Damit wird ein entsprechender Status-Eintrag in der Asterisk-internen Datenbank für die Nebenstelle gelöscht, von der aus man die *90 wählt

*91 - *98 wird gewählt: Damit wird ein Status 1 - 8 für die NEbenstelle in die Asterisk-interne Datenbank geschrieben

*99xxxxx Damit kann ein Umleitungsziel in die Tabelle eingetragen werden.

Code:
[fonestatus]
;*90 Status löschen
exten => _*90,1,DBdel(fonestat/${CALLERIDNUM})
exten => _*90,n,Congestion
exten => _*90,n,Hangup

;*91-98 Status 1-8 setzen
exten => _*9[1-8],1,DBput(fonestat/${CALLERIDNUM}=${EXTEN:2})
exten => _*9[1-8],n,Congestion
exten => _*9[1-8],n,Hangup

;*99 beliebigen Wert setzen
exten => _*99.,1,DBput(fonestat/${CALLERIDNUM}=${EXTEN:3})
exten => _*99.,n,Congestion
exten => _*99.,n,Hangup

2.) Nun müssen wir das ganze auch noch auswerten. Auch das habe ich schonmal vorbereitet (Hier mal für den Fall, daß die Nebenstelle 70 angerufen werden soll)

Zuerst wird die in der Datenbank geschaut, ob für die Nebenstelle irgendein Eintrag existiert. Falls "nein" geht es bei 102 weiter und die 70 wird einfach angewählt.

Falls ein Eintrag 1 - 8 gefunden wird, erfolgt die Verzweigung in die entsprechende Extension 11 21 31 41 51 61 71 81 dort stehen also 10 Zeilen für die entsprechende Abarbeitung zur Verfügung. Als Beispiel habe ich mal den Status 1 (exten 11) als Voicemail mit "nicht erreichbar" und den Status 2 (exten 21) als Voicemail mit "besetzt" definiert. Dient nur zur Veranschaulichung der Logik.

In der exten 91 wird dann ein ggf. vorhandenes Umleitungsziel angewählt. Das ist in der hier angegebenen Fassung nur für interne Ziele möglich, ließe sich aber natürlich auch für externe Ziele ausbauen.

Code:
[teilnehmer70]
exten => 70,1,DBget(status=fonestat/70)
exten => 70,n,GotoIf($[${status} > 8]?91)
exten => 70,n,Goto(${status}1)

exten => 70,11,VoiceMail(u70)
exten => 70,n,Hangup

exten => 70,21,VoiceMail(b70)
exten => 70,n,Hangup

exten => 70,31,NoOp()
exten => 70,n,Hangup

exten => 70,41,NoOp()
exten => 70,n,Hangup

exten => 70,51,NoOp()
exten => 70,n,Hangup

exten => 70,61,NoOp()
exten => 70,n,Hangup

exten => 70,71,NoOp()
exten => 70,n,Hangup

exten => 70,81,NoOp()
exten => 70,n,Hangup

exten => 70,91,Dial(SIP/${STATUS},30,r)
exten => 70,n,Hangup

exten => 70,102,Dial(SIP/70,30,r)
exten => 70,n,Hangup

Anwendungsbeispiel:

nehmen wir mal an, daß das Baby endlich schläft und Deine Frau "Ruhe" haben will:
An der Nebenstelle den Hörer abnehmen und *91 wählen -> ab sofort erhalten Anrufer die Mailbox mit der Ansage "Teilnehmer nicht erreichbar"

Mit *90 wird der Status wieder zurückgesetzt.

### Kommen wir nun zum Dessert: Zeitgesteuerte Anrufkontrolle ###

Dazu muß man einfach sagen, daß der Asterisk das von Haus aus kann:

Code:
exten => s,1,GotoIfTime(2:00-14:00|*|*|*?90)
exten => s,n,Dial(SIP/70,30,r)
exten => s,n,Hangup
exten => s,90,VoiceMail(u70)
exten => s,n,HangUp

In der ersten Zeile wird geprüft, ob die aktuelle Uhrzeit zwischen 2 und 14 Uhr (meine bevorzugte Schlafzeit) liegt. Falls ja, wird nach exten 90 verzweigt und die Mailbox mit "Teilnehmer nicht erreichbar" gestartet. Falls außerhalb dieser Uhrzeit angerufen wird, wird der Anruf zur Nebenstelle 70 durchgestellt.

Natürlich lassen sich in diesem Menü auch die Datenbank-Status-Abfrage und die Zeitsteuerung kombinieren.

Ich wünsche Guten Appetit und viel Erfolg bei der Zubereitung :mrgreen:
 
Hi
danke für die tips. ich denke mit der datenbank werd ich das teil irgendwie basteln.
die idee mit der zeitsteuerung ist nicht auf eine mittagszeit festgelegt, sondern auf "eine stunde nach aktivierung". aber ich denke das krieg ich hin...

Gruß
Thorsten
 
Maik schrieb:
ecco schrieb:
Edit: noch eine Anmerkung am Rande: die Einträge in der Asterisk-Datenbank lassen sich natürlich auch per cron/at-Befehl ändern. Diese Lösung wäre also definitiv vorzuziehen.

Zum Auslesen von Daten kann man das machen. Wenn aber Asterisk laeuft sollte man keine Werte veraendern denn damit koennte man die DB beschaedigen, wenn Asterisk gerade selbst was aendern will.
Wie sollte man denn etwas beschädigen???
Code:
$ asterisk -rx "database put <family> <key> <value>"
 
ecco schrieb:
Wie sollte man denn etwas beschädigen???
Code:
$ asterisk -rx "database put <family> <key> <value>"

Hmm ok damit sollte es gehen. Ich bin davon ausgegangen, dass du direkt auf die DB zugreifen willst ohne ueber Asterisk zu gehen.
 
Maik schrieb:
Ich bin davon ausgegangen, dass du direkt auf die DB zugreifen willst ohne ueber Asterisk zu gehen.
*schauder* das wäre allerdings wirklich keine gute Idee gewesen...
Ich finde dieses Interface zu asterisk sehr praktisch. Zusammen mit der Manager API ist es die perfekte Lösung, den Asterisk-Server fern zu steuern. Mein einziger Wunsch wäre jetzt noch, eine Dokumentation für die System()-Aufrufe aus dem Dialplan zu bekommen (welche shell escapes sind vorhanden, also eher vom Sicherheitsstandpunkt).
 
betateilchen schrieb:
1.) Wir rühren einen Context zusammen. Der macht folgendes: ( ... )
Ich danke auch für den Input ...

Dazu einige Fragen trotzdem:

1. "n" - ab Version 1.2.0 ?
2. die "CALLERIDNUM" wrd bei mir mit "CID withheld" ausgegeben ...
Ich komme per CAPI von einer Tk-Anlage und übermittle die Rufnummer.

Code:
Accepting overlap voice call from '999123' to '<unspecified>' on channel 0/2, span 1
-- Executing DBdel("Zap/2-1", "fonestat/CID withheld") in new stack
-- DBdel: family=fonestat, key=CID withheld

... und daher bekomme ich leider keine Werte in die DB und heraus.
Ist die aktuellste Version von Asterisk notwendig ?
 
1. "n" - ab Version 1.2.0 ?

keine Ahnung - ich nutze das schon länger als es 1.2.0 gibt. Bedeutet einfach "nächste priority" und ist ein Bequemlichkeitswerkzeug weil man nicht so oft umnummerieren muß

2. die "CALLERIDNUM" wrd bei mir mit "CID withheld" ausgegeben ...

da wird bei Dir irgendwo Deine eigene Nummer unterschlagen. Aber mit ZAP kenne ich mich nicht aus.
 
hallo,
dsa war fast genau das was ich suche ( fast der gleiche anwendungsfall).
nur fehlt mir eine lösung um den status nach 1Stunde wieder aus der DB zu löschen. ich habe schon mehrmals vergessen , den status manuell zu löschen ,und war 2 tage nicht erreichbar ;-) .... schön diese ruhe vor den telefon...

gibte es eine solche möglichkeit?
 
Zusammen mit dem Setzen des Status einen Cronjob einplanen, (mit system() ) der nach einer Stunde das ganze automatisch wieder löscht.
 
danke für den tip
nur wie muss das in der extensions.conf aussehen?
wie füge ich per system() ne zeile in der crontab an und woher kriege ich die zeit?
da fehlt mir n bissel das know-how.....
auch muss ich ja den eintrag in der crontab nach na stunde wieder löschen...
bye
chaos
 
Ok - zugegebenermaßen ist cronjob nicht die richtige Lösung - "at" ist dafür besser geeignet, da es einen Job ohnehin nur einmalig ausführt.

Die Syntax von at findest Du in der Linuxfibel, dort findest Du auch die Antwort auf die Frage, wie Du die aktuelle Uhrzeit+1 Stunde angibst (now+1hours)
Du mußt also den Löschbefehl zu diesem Zeitpunkt einplanen. Damit kann z.B. über den remote-Aufruf asterisk -rx "database del blablabla>" der Eintrag in der Asterisk DB gelöscht werden.

So - nun hast Du die Grundlagen, die Du brauchst. Ein bißchen was mußt Du nun auch selber tun, denn damit verstehst Du dann auch, was Du da tust. Ich denke das ist besser, als hier immer fertige "copy&paste" Lösungen zu präsentieren :wink:
 
Eine andere Möglichkeit ist ein callfile zu erstellen welches nach einer Stunde ausgefüht wird und die *90 aufruft; Als channel wäre dann ein dummy erforderlich
 
chaos2000 schrieb:
Eine andere Möglichkeit ist ein callfile zu erstellen welches nach einer Stunde ausgefüht wird und die *90 aufruft; Als channel wäre dann ein dummy erforderlich

Du brauchst keinen dummy - du kannst das einfach über LOCAL channel machen :wink:
 
danke für die hilfe .
ich habe es jetzt mit at gelöst . war nur n bissel tricky mit den backslashes
fürs archiv:

Code:
system(echo "asterisk -rx\ \"database del fonestat 21\\""|at now +1hours)

chaos
 
Super ! Siehste - haste wieder was dazugelernt - und richtig schwierig war es auch nicht - oder ? :wink:
 
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.