Aufheben, sofort. Wenn möglich die Funktion ganz sperren.Ich habe jetzt die Rufweiterleitung am Snom D865 getestet. ...
Wenn, dann würde ich eine BLF Taste machen und den Status umstellen. Zumindest bei den Yealink kannst du ja evtl. noch die beiden BLF umbennen (Verfügbar = Umleitung AUS und z.B. Nicht Stören = Umleitung Zentrale). Dann auf dem Telefon selbst eine Taste machen "Rufweiterleitung" und leer lassen und benennen mit: Umleitung Zentrale (rein für die optische Erkennung, dass eine Umleitung aktiv ist).Ich habe jetzt die Rufweiterleitung am Snom D865 getestet. Ich brauche dazu kein Aufwand zu betreiben. Ich kann die Rufumleitung im Apparat nutzen. Die Rufumleitung bleibt auch bestehen, wenn ich den Apparat neu starte. Wie auch die DND-Funktion. Vorteil ich habe eine Meldung im Display.

Ja, das ist so ein bekanntes Problem bei direkten Weiterleitungen.Die Dummy Nebenstelle die den Anruf an die CFA weiterleitet sollten wir durch "session.transferingExtension" oder "session.forwardingExtension" bekommen.
Das scheint allerdings nicht zu funktionieren.
Wenn das so ein einfaches Konstrukt ist, sprich Anruf auf DID, diese DID gehört zu einer Dummy NSt. und diese Dummy NSt. leitet per Ausnahme an die CFA, dann kann man ausgehend vom SIP Trunk die angerufene DID verfolgen und so die NSt. Nummer ermitteln welche an die CFA weiterleitet.Die DID wird auf eine Dummy NSt. weitergeleitet. Durch Ausnahmen wollten wir dann entsprechend einige Mobilfunkrufnummern umleiten auf die CFA ...
string retval = "";
if(myCall.Caller.DN is ExternalLine externalLine && myCall.IsInbound) // work only for external calls
{
string callerID = myCall.Caller.CallerID;
string DID = myCall.Caller.CalledNumber;
DestinationStruct dnretval = new();
string[] range;
foreach (var a in externalLine.RoutingRules)
{
bool match = (a.Conditions.Condition.Type == RuleConditionType.BasedOnCallerID &&
a.Data.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
.Any
(x =>
x == "*"
|| x == callerID
|| x.StartsWith('*') && callerID.EndsWith(x[1..])
|| x.EndsWith('*') && callerID.StartsWith(x[..^1])
|| x.StartsWith('*') && x.EndsWith('*') && callerID.Contains(x[1..^1])
|| ((range = x.Split("-", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)).Length == 2 ?
(range[0].Length == callerID.Length && range[1].Length == callerID.Length) && (range[0].CompareTo(callerID) <= 0 && range[1].CompareTo(callerID) >= 0) : false)
)
)
||
(a.Conditions.Condition.Type == RuleConditionType.BasedOnDID &&
(
a.Data == DID
|| (a.Data.StartsWith('*') && DID.EndsWith(a.Data[1..]))
))
||
(a.Conditions.Condition.Type == RuleConditionType.ForwardAll);
if (match)
{
dnretval.CopyFrom(a.ForwardDestinations.OfficeHoursDestination);
retval = dnretval.Internal.Number;
break;
}
}
}
return retval;
myCall.Error(... ) wenn es an den produktiven Code geht.int slen = 29;
string sformat1 = "{0,-" + slen.ToString() + "} = {1}\n";
string callID = myCall?.Caller["chid"] ?? "Unknown";
string ownname = myCall.DN.GetPropertyValue("CF_APP_NAME");
string audiofolder = Path.Combine(RecordingManager.Instance.AudioFolder, ownname);
string transferext = myCall.ReferredByDN?.Number ?? string.Empty;
string forwardext = myCall.OnBehalfOf?.Number ?? string.Empty;
string strout = "\n************************************************\n";
strout += "\n---- misc. variables ----\n";
strout += String.Format( sformat1, "own number", myCall.DN.Number);
strout += String.Format( sformat1, "own name", ownname);
strout += "\n---- CFD variables ----\n";
strout += String.Format( sformat1, "session.ani", myCall.Caller.CallerID);
strout += String.Format( sformat1, "session.callid", callID);
strout += String.Format( sformat1, "session.dnis", myCall.DN.Number);
strout += String.Format( sformat1, "session.did", myCall.Caller.CalledNumber);
strout += String.Format( sformat1, "session.audioFolder", audiofolder);
strout += String.Format( sformat1, "session.transferingExtension", transferext);
strout += String.Format( sformat1, "session.forwardingExtension", forwardext);
strout += "\n---- Call AttachedData ----\n";
foreach (var entry in myCall.AttachedData) {
strout += String.Format( sformat1, entry.Key, entry.Value);
}
strout += "\n---- Caller AttachedData ----\n";
foreach (var entry in myCall.Caller.AttachedData){
strout += String.Format( sformat1, entry.Key, entry.Value);
}
strout += "\n************************************************\n";
myCall.Error( strout );
return;
myCall in MyCall geändert werden muss.Nein. Diese Funktion gibt es nicht.Frage ist, wenn ich die Taste mit CFD programmiere, setze ich dort auch die Lampe aktiv? Kann man mit einem Druck aktivieren und deaktivieren?
Wenn du mit Taste und Lampe eine BLF Taste an einem IP Telefon meinst, dann nein.Frage ist, wenn ich die Taste mit CFD programmiere, setze ich dort auch die Lampe aktiv?
Die Lampe.Welche? Das die Lampe mit leuchtet oder mit einem Druck aktivieren deaktivieren?
2005 gegründet, als VoIP noch eine aufstrebende Technologie war, hat sich 3CX seither zu einem globalen Marktführer im Bereich der Geschäftskommunikation entwickelt.