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

Dienst: Ruhe vor dem Telefon?

Dieses Thema im Forum "Asterisk Allgemein" wurde erstellt von thorsten.gehrig, 21 Apr. 2005.

  1. thorsten.gehrig

    thorsten.gehrig Mitglied

    Registriert seit:
    14 Juni 2004
    Beiträge:
    490
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  2. Maik

    Maik Gesperrt

    Registriert seit:
    1 Apr. 2004
    Beiträge:
    1,778
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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.
     
  3. ecco

    ecco Neuer User

    Registriert seit:
    28 Okt. 2004
    Beiträge:
    174
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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.
     
  4. britzelfix

    britzelfix Gesperrt

    Registriert seit:
    28 Mai 2004
    Beiträge:
    1,099
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Braunschweig
    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
     
  5. Maik

    Maik Gesperrt

    Registriert seit:
    1 Apr. 2004
    Beiträge:
    1,778
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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.
     
  6. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    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:
     
  7. thorsten.gehrig

    thorsten.gehrig Mitglied

    Registriert seit:
    14 Juni 2004
    Beiträge:
    490
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  8. ecco

    ecco Neuer User

    Registriert seit:
    28 Okt. 2004
    Beiträge:
    174
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Wie sollte man denn etwas beschädigen???
    Code:
    $ asterisk -rx "database put <family> <key> <value>"
     
  9. Maik

    Maik Gesperrt

    Registriert seit:
    1 Apr. 2004
    Beiträge:
    1,778
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hmm ok damit sollte es gehen. Ich bin davon ausgegangen, dass du direkt auf die DB zugreifen willst ohne ueber Asterisk zu gehen.
     
  10. ecco

    ecco Neuer User

    Registriert seit:
    28 Okt. 2004
    Beiträge:
    174
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    *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).
     
  11. FBI01

    FBI01 Neuer User

    Registriert seit:
    7 März 2005
    Beiträge:
    85
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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 ?
     
  12. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    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ß

    da wird bei Dir irgendwo Deine eigene Nummer unterschlagen. Aber mit ZAP kenne ich mich nicht aus.
     
  13. chaos_

    chaos_ Neuer User

    Registriert seit:
    17 Sep. 2005
    Beiträge:
    9
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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?
     
  14. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Zusammen mit dem Setzen des Status einen Cronjob einplanen, (mit system() ) der nach einer Stunde das ganze automatisch wieder löscht.
     
  15. chaos_

    chaos_ Neuer User

    Registriert seit:
    17 Sep. 2005
    Beiträge:
    9
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  16. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    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:
     
  17. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    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
     
  18. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Du brauchst keinen dummy - du kannst das einfach über LOCAL channel machen :wink:
     
  19. chaos_

    chaos_ Neuer User

    Registriert seit:
    17 Sep. 2005
    Beiträge:
    9
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  20. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Super ! Siehste - haste wieder was dazugelernt - und richtig schwierig war es auch nicht - oder ? :wink: