Chef-Sekretär Funktion realisieren

Hooch

Neuer User
Mitglied seit
25 Aug 2008
Beiträge
9
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich benötige in meiner Telefonanlage eine Chef-Sekretär Funktion.
Der Chef muss die Möglichkeit haben eine Weiterleitung auf seine
Sekretärin zu legen. Das Sekretariat sollte die Anrufe dann ausfiltern
und bei Bedarf zum Chef durchstellen können.
Wenn das Sekretariat nicht besetzt ist muss die Möglichkiet bestehen,
die Weiterleitung wieder zu entfernen.

Wie kann ich diese Funktin in der Anlage hinterlegen?

Eine Beispiel wäre toll.

Gruß
 
Zuletzt bearbeitet:

Hooch

Neuer User
Mitglied seit
25 Aug 2008
Beiträge
9
Punkte für Reaktionen
0
Punkte
0
vielen Dank für die Antwort.

Wo ist denn in dem Beispiel die Ausnahme-Situation, dass
wenn umgeleitet wurde ein bestimmte Nummer trotzdem durchstellen darf?

(Beispiel 20 hat direkt umgeleitet auf die 21, die 21 möchte aber
nun ein wichtiges Telefonat auf die 20 durch geben)

natürlich ohne delayed redirect. Eine verzögerte Weiterleitung sollte nicht
die Lösung sein.

oder habe ich da was übersehen?
 

fme

Neuer User
Mitglied seit
13 Jan 2007
Beiträge
24
Punkte für Reaktionen
0
Punkte
0
Du kannst ja einfach mit GotoIf prüfen ob die 21 anruft,wenn ja, dann "überspringst" du die Weiterleitung.

Man kann sowas auf einigen Wegen realisieren, Asterisk bietet ja genug Möglichkeiten zum abfragen, springen usw.
 

emanon

Neuer User
Mitglied seit
30 Sep 2005
Beiträge
65
Punkte für Reaktionen
0
Punkte
0
Hi,

ich musste das selbe hier implementieren. Ich hab es mittels SNOM und einem Perl Script geregelt.

Die Ausgangssituation war bei mir so.

Chef wollte Umleiten auf Sekretärin, diese sollte zurück stellen können .. aber auch nur Sie !!
Es sollte über das SNOM einstellbar sein. Bei Bedarf muss auch jede andere Nebenstelle diese Funktion erhalten !

Dazu hab ich folgendes gemacht

Die SNOM Funktion "Weiterleiten nach Zeit" umfunktioniert. Und die Zeit auf 20sek gestellt.
Dann unter Aktion URLS das perl Script eingebunden.
Wenn man die Sprachdatei (XML) vom SNOM noch editiert, kann man auf Umleitung nach Zeit z.B. noch Umleitung Intern machen !

Für ein
http://asterisk/cgi-bin/umleitung.pl?type=$redirect_event&umleitung=ein&username=$user_name1&dest=$redirect_time_number
Für aus
http://asterisk/cgi-bin/umleitung.pl?type=$redirect_event&umleitung=aus&username=$user_name1&dest=$redirect_time_number

Edit foschi: bitte code-Tags benutzen!

Code:
Perl Script !
-----------------
#!/usr/bin/perl
$|=1;
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
$bufferget=$buffer;
$bufferget = $ENV{QUERY_STRING};
@pairsget = split(/&/, $bufferget);
foreach $pairget (@pairsget) {
    ($nameget, $valueget) = split(/=/, $pairget);
     $valueget =~ tr/+/ /;
     $valueget =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
     $nameget =~ tr/+/ /;
     $nameget =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $GET{$nameget} = $valueget;

};

$type="$GET{type}";
chomp $type;
$username="$GET{username}";
chomp $username;
$dest="$GET{dest}";
chomp $dest;
$was="aha";

if ((($type eq "time") and ($username ne "") and ($dest ne "")))  {
system `/usr/sbin/asterisk -rx "database put $username Umleitung ein"`;
system `/usr/sbin/asterisk -rx "database put $username Umleitungziel $dest"`;
}
if ($type eq "none") {
system `/usr/sbin/asterisk -rx "database put $username Umleitung aus"`;
};

if (($type eq "time") and ($dest eq "")) {
print "
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<SnomIPPhoneText>
<Title>ERROR</Title>
<Prompt>Prompt Text</Prompt>
<Text>ACHTUNG: Kein Ziel</Text>
</SnomIPPhoneText>";
};

if ($type eq "all") {
system `asterisk -rx "database put $username Umleitung aus"`;
};

--------------------------

Und dann einfach in die extensions.conf


exten => s, 1,NoOp(${ARG1} hat ansage)
exten => s, n,GotoIf($["${DB(${ARG1}/Umleitung)}" = "ein"]?3:4)
exten => s, n,GotoIf($["${DB(${ARG1}/Umleitungziel)}" = "${ARG2}"]?4:200)
exten => s, n, Dial(SIP/${ARG1},90,Ttor)
exten => s, n, GoToIf($[(${DIALSTATUS})=BUSY]?150)
exten => s, n, Set(LANGUAGE()=de)
exten => s, n, Hangup
exten => s, 150, Busy(5)
exten => s, 151, Hangup()
exten => s, 200, Set(CALLERID(name)="Uml. von ${ARG1}")
exten => s, 201, Dial(SIP/${DB(${ARG1}/Umleitungziel})
exten => s, 202, Busy(5)
exten => s, 203, Hangup()
 

Hooch

Neuer User
Mitglied seit
25 Aug 2008
Beiträge
9
Punkte für Reaktionen
0
Punkte
0
wo genau muss ich den Abschnitt in der extension.conf einbinden?

Muss ich noch Veränderungen im .pl Script vornhemen?

Leider funktioniert das Beispiel bei mir noch nicht
 

emanon

Neuer User
Mitglied seit
30 Sep 2005
Beiträge
65
Punkte für Reaktionen
0
Punkte
0
Ein paar Details wären besser.
Bekommst du einen Fehler ? Log aus apache ?
Steht etwas in der Datenbank vom asterisk drin ? ( CLI: database show)
Ggf. muss du dem Webserver zugriff auf die CLI bzw. dem Asterisk geben.

Bei mir ist es in einem Macro drin.

z.B.

[macro-incoming]
exten => s, 1,NoOp(${ARG1} hat ansage)
exten => s, n,GotoIf($["${DB(${ARG1}/Umleitung)}" = "ein"]?3:4)
exten => s, n,GotoIf($["${DB(${ARG1}/Umleitungziel)}" = "${ARG2}"]?4:200)
exten => s, n, Dial(SIP/${ARG1},90,Ttor)
exten => s, n, GoToIf($[(${DIALSTATUS})=BUSY]?150)
exten => s, n, Set(LANGUAGE()=de)
exten => s, n, Hangup
exten => s, 150, Busy(5)
exten => s, 151, Hangup()
exten => s, 200, Set(CALLERID(name)="Uml. von ${ARG1}")
exten => s, 201, Dial(SIP/${DB(${ARG1}/Umleitungziel})
exten => s, 202, Busy(5)
exten => s, 203, Hangup()


nun nur noch für eingehende Anrufe ( auch interne )

exten => 34,1,Macro(incoming,${EXTEN},${CALLERID(num)})


Der Link für Snom ist Fehlerhaft

nicht
&us ername
sondern
&username
 

Hooch

Neuer User
Mitglied seit
25 Aug 2008
Beiträge
9
Punkte für Reaktionen
0
Punkte
0
Es wird kein Error ausgegeben, es greift die manuell eingerichtete Weiterleitung im Snom.
Unter database shown gibt es nur Registry Einträge der Telefone.
Ich habe die umleitung.pl direkt in den cgi Ordner vom Asterisk gelegt und den Pfad auf
http://IPVOMASTERISK/cgi-bin/..... gesetzt

macro-incoming und die Zeile für die Durchwahl habe ich jetzt ebenfalls gesetzt.
 

emanon

Neuer User
Mitglied seit
30 Sep 2005
Beiträge
65
Punkte für Reaktionen
0
Punkte
0
Mhmmm,

schau mal ob das SNOM auf den apache zugreift. (access.log)
Und .... Das Script geht nur an wenn SNOM " Weiterleitung bei Timeout" nutzt.

Hier mal das Script mit INFO anzeige auf SNOM !!!

Edit foschi: das mit den code-Tags ist doch nicht so schwer....

Code:
#!/usr/bin/perl
$|=1;
eval {require "stdin_new.pl"};

$type="$GET{type}";
chomp $type;
$username="$GET{username}";
chomp $username;
$dest="$GET{dest}";
chomp $dest;
$was="aha";

if ((($type eq "time") and ($username ne "") and ($dest ne "")))  {
system `/usr/sbin/asterisk -rx "database put $username Umleitung ein"`;
system `/usr/sbin/asterisk -rx "database put $username Umleitungziel $dest"`;
print "
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<SnomIPPhoneText>
<Title>DEBUG</Title>
<Prompt>Prompt Text</Prompt>
<Text>Umleitung $username ein</Text>
</SnomIPPhoneText>";
};
if ($type eq "none") {
system `/usr/sbin/asterisk -rx "database put $username Umleitung aus"`;
print "
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<SnomIPPhoneText>
<Title>DEBUG</Title>
<Prompt>Prompt Text</Prompt>
<Text>Umleitung $username aus</Text>
</SnomIPPhoneText>";
};
if (($type eq "time") and ($dest eq "")) {
print "
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<SnomIPPhoneText>
<Title>ERROR</Title>
<Prompt>Prompt Text</Prompt>
<Text>ACHTUNG: Kein Ziel</Text>
</SnomIPPhoneText>";
};
if ($type eq "all") {
system `asterisk -rx "database put $username Umleitung aus"`;
print "
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<SnomIPPhoneText>
<Title>DEBUG</Title>
<Prompt>Prompt Text</Prompt>
<Text>Umleitung all an</Text>
</SnomIPPhoneText>";
};

ggf. kannst du noch unter
$was

manuell mal den username und die destionation eingeben
$username=34
chomp $username;
$dest=32
chomp $dest;


Und evtl. auch mal manuell testen !

/usr/sbin/asterisk -rx "database put 34 Umleitung ein"
/usr/sbin/asterisk -rx "database put 34 Umleitungziel 32"
 

emanon

Neuer User
Mitglied seit
30 Sep 2005
Beiträge
65
Punkte für Reaktionen
0
Punkte
0
Fehler gefunden.

Der asterisk konnte nicht mit

exten => s, n

umgehen. Daher musste per Hand
exten => s, 3 etc

eingefügt werden.

Anbei noch mein stdin_new.pl

Code:
#!/usr/bin/perl
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
$bufferget=$buffer;
$bufferget = $ENV{QUERY_STRING};
$bufferpost=$buffer;
@pairspost = split(/&/, $bufferpost);
@pairsget = split(/&/, $bufferget);
foreach $pairpost (@pairspost) {
    ($namepost, $valuepost) = split(/=/, $pairpost);
     $valuepost =~ tr/+/ /;
     $valuepost =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
     $namepost =~ tr/+/ /;
     $namepost =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $POST{$namepost} = $valuepost;

};

foreach $pairget (@pairsget) {
    ($nameget, $valueget) = split(/=/, $pairget);
     $valueget =~ tr/+/ /;
     $valueget =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
     $nameget =~ tr/+/ /;
     $nameget =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $GET{$nameget} = $valueget;

};
 
Erhalten Sie 3CX für 1 Jahr kostenlos!

Gehostet, in Ihrer privaten Cloud oder on-Premise! Ganz ohne Haken. Geben Sie Ihren Namen und Ihre E-Mail an und los geht´s:

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.
oder via