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:
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?
 
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.
 
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()
 
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
 
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
 
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.
 
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"
 
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;

};
 
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.