Präfix vor Telefonbucheintrag setzen

TechSFS

Customer
Mitglied seit
20. Januar 2022
Beiträge
8
Gibt es eine Möglichkeit vor eine im Telefonbuch gespeicherte Nummer einen Präfix einzugeben?

Wir verwenden ausgehende Regeln um über verschiedene Trunks zu telefonieren.
Zur Zeit verwenden wir "3CXPhone for Windows" und nur damit hab ich eine Lösung geschafft.
Es sieht so aus, dass wir auf unseren Yealink T46S den Hörer abheben und "99" wählen. Anschließend wird über die "3CXPhone for Windows" die Telefonnummer aus dem Firmentelefonbuch gewählt. Durch die ausgehende Regel wird nun der Anruf mit dem richtigen Trunk gewählt.

Mit der Web-Anwendung oder der Desktop-APP klappt das nicht, da die bereits gewählte "99" quasi überschrieben/gelöscht wird.

Jetzt brauchen wir aber die Web-Anwendung um beispielsweiße den Status anderer umzustellen, da dies nicht in der "3CXPhone for Windows" klappt.

Die Bedienung ist in der Web-Anwendung und auf der Desktop-APP wesentlich angenehmer.
Daher bin ich auf der Suche nach einer Möglichkeit, mithilfe der Web-Anwendung bzw der Desktop-APP einen Präfix vor eine gespeicherte Nummer im Telefonbuch zu setzen, oder alternativ durch eine einfache andere Möglichkeit den Ausgangs-Trunk auszuwählen.
Bedingung ist, dass es ähnlich schnell und einfach geht wie die aktuelle Lösung. Eine neue Nebenstelle oder der gleichen ist keine Lösung.

Hoffentlich kann mir da jemand helfen.
 
Hallo,

Es sieht so aus, dass wir auf unseren Yealink T46S den Hörer abheben und "99" wählen. Anschließend wird über die "3CXPhone for Windows" die Telefonnummer aus dem Firmentelefonbuch gewählt. Durch die ausgehende Regel wird nun der Anruf mit dem richtigen Trunk gewählt.
Eine nette Lösung diese Kombination.

Gibt es eine Möglichkeit vor eine im Telefonbuch gespeicherte Nummer einen Präfix einzugeben?
Leider nein.

Fragen dazu:

a) Ist es möglich mit Gruppen in den ausgehenden Regeln zu arbeiten oder werden Gruppen bereits anderweitig dort verwendet?

b) Um wie viele SIP Trunks und damit Wahlpräfixe (oder evtl. eben Gruppen) geht es in diesem Fall?
 
Danke für die Antwort

a) Ist es möglich mit Gruppen in den ausgehenden Regeln zu arbeiten oder werden Gruppen bereits anderweitig dort verwendet?
Gruppen werden bereits für die ausgehenden Regeln verwendet. Für eben genau den beschriebenen Fall.
Thema ist dabei, dass einige Mitarbeiter die Nummer A als Standard haben und einige Mitarbeiter die Nummer B. Diese Standardnummer ist mit den Gruppen geregelt.
Wollen die Mitarbeiter nun die alternative Nummer, so müssen sie die "99" vorwählen.
Außerdem haben nicht alle Mitarbeiter bzw. Nebenstellen die Berechtigung den Präfix zu verwenden. Was mit den Ausgangsregeln eingestellt ist.

b) Um wie viele SIP Trunks und damit Wahlpräfixe (oder evtl. eben Gruppen) geht es in diesem Fall?
Es sind zwei SIP-Trunks und zwei Gruppen, aber nur ein Wahlpräfix.
Jede Nebenstelle ist einer Gruppe zugeordnet und durch diese Gruppe und der Ausgangsregel eine Standardnummer.
Durch den Wahlpräfix wird die Standardnummer zur alternativen Nummer (anderer SIP-Trunk/Ausgangsroute) gewechselt.

Nebenstelle in Gruppe A -> ohne Präfix -> Standardnummer A
Nebenstelle in Gruppe B -> ohne Präfix -> Standardnummer B
Nebenstelle in Gruppe A -> "99"+Nummer -> Nummer B
Nebenstelle in Gruppe B -> "99"+Nummer -> Nummer A

Ich hoffe ich habs verständlich dargestellt :)
 
Ja, das ist doch mal eine qualifizierte Antwort auf konkrete Fragen. Ich könnte es nicht besser.

Die Aufgabe lässt sich lösen. Pro SIP Trunk wird je eine Gruppe (genau so wie sie bereits vorhanden sind) und je eine CFA benötigt. Die vorhanden ausgehenden Regeln würden man leicht modifizieren. Die vereinfachen sich vmtl. gar.

Bei Anruf einer NSt. an diese CFA wechselt die Gruppenzugehörigkeit der anrufenden NSt.. Man kann den Zugang zur Nutzung dieser CFA begrenzen indem man eine Liste oder eine weitere Gruppe (ausschließlich dafür) pflegt. Diese CFAs kann man auf BLF Tasten legen und damit unkompliziert an einem Tischtelefon oder der 3CX Windows Desktop App nutzen: eine kurze Anwahl reicht und es wird umgeschalten. Die Smartphone Apps bieten leider keine BLF Tasten Nutzung. Von denen aus müsste die Nummer der CFA direkt angerufen werden. Das muss man deren Benutzern erklären.

Der Gruppenwechsel erfolgt permanent und überlebt auch einen 3CX Neustart. Damit die zum Wechsel berechtigten NSt. wissen, mit welchem SIP Trunk sie heraus rufen, gäbe es die zusätzliche Möglichkeit diesen Status je auf einer (nur für diese NSt. zuständige) Dummy NSt. anzuzeigen. Die Dummy NSt. wechselt je nach Gruppenzugehörigkeit / Trunk Nutzung den Namen. Ideal ist, wennn diese Dummy NSt. wieder auf eine BLF Taste gelegt wird. Dann sieht man das direkt am Namen. Für die Smartphone App Benutzer besteht immerhin die Möglichkeit sich den akt. Status per Anruf an ihre eigene Dummy NSt. ansagen zu lassen.

Wäre das eine Lösung?
 
Zuletzt bearbeitet:
Die optimale Lösung wäre allerdings, wenn jede NSt. einer Standardgruppe zugeordnet ist und man mit den CFA die Gruppenzugehörigkeit nur je für deren direkt nächsten Anruf umschaltet. Das scheitert im Moment noch daran, dass es mir nicht unkompliziert möglich ist:
- den Start des nächsten Anruf dieser NSt. zu erkennen,
- das definitive Ende des nächsten Anruf dieser NSt. zu erkennen,
- danach einen Prozess zu starten, der diese NSt. wieder auf ihre Standardgruppe zurücksetzt.

So eine Detektierung und freien Prozessstart suche ich schon seit langer Zeit. Mir sind bisher nur sehr krude Lösungen eingefallen von denen ich auch noch keine umgesetzt habe. Mit dem CFD v18 wäre evtl. ein durchgehend paralleler Lauf einer einzelnen CFA möglich, welche das dann im Hintergrund permanent abfragt und ggf. ändert. Aber deren Umsetzung ist auch nicht ohne, erfordert die Nutzung einer Menge global verfügbarer Variablen oder gar die Nutzung der / einer Datenbank. Diese CFA muss auch einen 3CX Neustart überleben und automatisch bei Erstnutzung wohldefiniert wieder anlaufen. Alles nicht ganz einfach.
 
Zuletzt bearbeitet:
Ja, das ist doch mal eine qualifizierte Antwort auf konkrete Fragen. Ich könnte es nicht besser.

Die Aufgabe lässt sich lösen. Pro SIP Trunk wird je eine Gruppe (genau so wie sie bereits vorhanden sind) und je eine CFA benötigt. Die vorhanden ausgehenden Regeln würden man leicht modifizieren............


.....................Für die Smartphone App Benutzer besteht immerhin die Möglichkeit sich den akt. Status per Anruf an ihre eigene Dummy NSt. ansagen zu lassen.

Wäre das eine Lösung?
Die Idee hört sich gut an.
Das wäre definitiv eine gute Lösung für uns.
Danke dafür. Mit CFA bin ich noch nicht so bewandert, hab aber tatsächlich schon versucht es damit zu Lösen leider ohne Erfolg. Mit diesem Imput wird es definitiv klappen :)

Die optimale Lösung wäre allerdings, wenn jede NSt. einer Standardgruppe zugeordnet ist und man mit den CFA die Gruppenzugehörigkeit nur je für deren direkt nächsten Anruf umschaltet.
Genau so ist es. Ich hoffe hier wird es in Zukunft noch gute Lösungen geben. Es scheint ja so, als wären wir nicht die Einzigen mit diesem Problem.
 
Das Problem lässt sich nicht mehr auf eine einfache Art und Weise mit den Standardbausteinen des CFD lösen. Das geht nur mit C# Programmierung - aber auch das ist kein Hexenwerk. Wenn du dich mit dem CFD ein klein wenig auskennst dann ist das schon sehr viel wert. Ich werde bei Gelegenheit mal C# Codeschnipsel zum Löschen und zum Zuordnen einer NSt. aus bzw. in eine Gruppe hier reinschreiben.

Hier mal ein Anfang zum Thema 'Wie ändere ich den Namen einer Nebenstelle' (weil ich das grad noch im Kopf hab):
C#:
var extension = PhoneSystem.Root.GetDNByNumber(extNumber) as Extension;
extension.FirstName = paramFirstname;
extension.LastName = paramLastname;
extension.Save();
Das Schnipsel kommt in einen CFD Block vom Typ Execute C# Code rein, extNumber, paramFirstname und paramFirstname sind jeweils Parameter vom Typ String. Da muss ich nicht viel dazu erklären.

Beispiel: ersetze extNumber mit session.ani, ersetze paramFirstname mit 'Ich hab ', ersetze paramLastname mit 'Ahnung', baue die CFA, spiele die CFA in die 3CX ein, ruf die CFA an.
 
So, ich musste etwas in den Backups suchen, aber hier das Codeschnipsel zum Einfügen einer NSt. in eine (bestehende) Gruppe:

C#:
Group grp = PhoneSystem.Root.GetGroupByName(paramGruppe);

var existingMembers = grp?.GroupMembers.ToDictionary(x => x.DNRef.ID); //we use it to build "group members update below"

var test_transaction = PhoneSystem.Root.CreateBatch("TestTransaction");
var thedn = PhoneSystem.Root.GetDNByNumber(paramNSt);

existingMembers.TryGetValue(thedn.ID, out var member);
// insert, has to followed by update
if (member == null)  {//needs insert
    member = grp.CreateGroupMember(thedn);
}
// update
member.RoleTag = "user";
grp.AttachOnSave(member);
test_transaction.AppendUpdate(member);
grp.Save();

und hier das Codeschnipsel zum Löschen einer NSt. aus einer Gruppe:
C#:
Group grp = PhoneSystem.Root.GetGroupByName(paramGruppe);

var existingMembers = grp?.GroupMembers.ToDictionary(x => x.DNRef.ID);

var test_transaction = PhoneSystem.Root.CreateBatch("TestTransaction");
var thedn = PhoneSystem.Root.GetDNByNumber(paramNSt);

existingMembers.TryGetValue(thedn.ID, out var member);

// delete
grp.DeleteOnSave(member);
test_transaction.AppendDelete(member);
grp.Save();

Das Schnipsel kommt je in einen CFD Block vom Typ Execute C# Code rein, paramGruppe und paramNSt sind jeweils Parameter vom Typ String.

Richte dir für jeden SIP Trunk eine (leere) Gruppe ein (habt ihr evtl. schon). Nimm alle Rechte bei dieser Gruppe raus. Bau dir für jedes SIP Trunk je eine CFA. Diese CFA löscht dann jeweils den Anrufenden aus allen Gruppen in welcher der nicht mehr enthalten sein soll und fügt den Benutzer zu der einen Gruppe hinzu zu welcher der nun gehören soll. Richte entsprechende ausgehende Regeln ein: wenn NSt. aus Gruppe xyz dann benutze SIP Trunk A udn ausgehende DID B usw. (aber das habt ihr glaub schon).

Mit dem Aufruf so einer CFA ändert der Anrufer so die Zugehörigkeit zu diesen Gruppen, ab da greifen für ihn andere ausgehende Regeln und er nutzt ausgehend einen anderen SIP Trunk.

Optional: Richte für jede solche Nebenstelle, welche einen SIP Trunk Wechsel durchführen darf, eine Dummy NSt. ein und füge diese Dummy NSt. als BLF Taste dieser NSt. hinzu. Praktisch wird das, wenn die realen Nebenstellen und die Dummy Nebenstellen einen festen Offset (z.B. +100) haben. Ändere in der aufgerufenen CFA pro SIP Trunk dann entsprechend der anrufenden NSt. den Namen der zugehörigen Dummy NSt. (z.B. auf 'ausg. -42'). Damit sieht man am Telefon, Webclient oder der 3CX Desktop App auf Grund des angezeigten Namen immer mit welcher Nummer diese NSt. aktuell rausruft (in diesem Beispiel mit der Nummer -42).

Diese Einstellungen behalten auch nach Neustart der 3CX ihre Gültigkeit.

Diese Änderungen sind in jedem Backup enthalten. Diese Anpassungen überleben auch ein 3CX Update und (irgendwann in weiter Ferne) sehr wahrscheinlich auch ein 3CX Software Upgrade auf eine v19, v20 usw..
 
Zuletzt bearbeitet:
  • Like
Reaktionen: telefon
Hallo fxbastler

Danke für die sehr ausführliche beschreibung. Ich hatte noch keine Zeit das zu testen. Ich bin aber davon überzeugt, mit dieser Hilfe das zum laufen zu bringen. Es erscheint mal alles logisch und ich kann dem gut folgen.

Danke dafür!
Unsere Mitarbeiter werden es dir bestimmt danken :)
 
Hallo fxbastler

Danke für die Super Idee.
Nach dem Ändern des Namen der Dummy-Nst ist diese aber nicht auf den BLF der Nebenstelle aktualisiert, erst nach neuer Provisionierung.
Gibt es dafür noch eine Möglichkeit die Aktualisierung/Änderung auszulösen?
 
Hallo fxbastler

Danke für die Super Idee.
Nach dem Ändern des Namen der Dummy-Nst ist diese aber nicht auf den BLF der Nebenstelle aktualisiert, erst nach neuer Provisionierung.
Gibt es dafür noch eine Möglichkeit die Aktualisierung/Änderung auszulösen?

Am Telefon in die Einstellungen gehen und "Konfiguration aktualisieren" auswählen. Alternativ: Stecker ziehen. Beim Reboot fragt er immer die aktuelle Config an.
 
Nach dem Ändern des Namen der Dummy-Nst ist diese aber nicht auf den BLF der Nebenstelle aktualisiert, erst nach neuer Provisionierung.
Da habe ich mich etwas unglücklich oder gar falsch ausgedrückt. Die Bezeichnung einer BLF Taste an phys. Endgeräten wird bei so einer Änderung nicht in Echtzeit aktualisiert. Das geht dort nur über eine Reprovisionierung während das Gerät nicht benutzt wird.
 
So, ich musste etwas in den Backups suchen, aber hier das Codeschnipsel zum Einfügen einer NSt. in eine (bestehende) Gruppe:

C#:
Group grp = PhoneSystem.Root.GetGroupByName(paramGruppe);

var existingMembers = grp?.GroupMembers.ToDictionary(x => x.DNRef.ID); //we use it to build "group members update below"

var test_transaction = PhoneSystem.Root.CreateBatch("TestTransaction");
var thedn = PhoneSystem.Root.GetDNByNumber(paramNSt);

existingMembers.TryGetValue(thedn.ID, out var member);
// insert, has to followed by update
if (member == null)  {//needs insert
    member = grp.CreateGroupMember(thedn);
}
// update
member.RoleTag = "user";
grp.AttachOnSave(member);
test_transaction.AppendUpdate(member);
grp.Save();

und hier das Codeschnipsel zum Löschen einer NSt. aus einer Gruppe:
C#:
Group grp = PhoneSystem.Root.GetGroupByName(paramGruppe);

var existingMembers = grp?.GroupMembers.ToDictionary(x => x.DNRef.ID);

var test_transaction = PhoneSystem.Root.CreateBatch("TestTransaction");
var thedn = PhoneSystem.Root.GetDNByNumber(paramNSt);

existingMembers.TryGetValue(thedn.ID, out var member);

// delete
grp.DeleteOnSave(member);
test_transaction.AppendDelete(member);
grp.Save();

Das Schnipsel kommt je in einen CFD Block vom Typ Execute C# Code rein, paramGruppe und paramNSt sind jeweils Parameter vom Typ String.
Hallo,
Ich habe diesen Code in einen Call-Flow eingebaut der den Anrufer von einer Gruppe entfernt und in die andere Gruppe einträgt. Ausserdem wird der Status des Anrufers in einer Warteschleife auf LoggedOut und in der anderen auf LoggedIn gesetzt (mit dem Baustein vom CFD) - sonst macht der Call-Flow nichts weiteres.
Das funktioniert auch wie gewünscht.
Nur: wenn ich den Benutzer über das Web-Interface bearbeiten will, kommt ein Server-Error 500 mit der Meldung "There is an error in XML document (1, 1)."
Läßt sich das reparieren? (Ja -> Benutzer aus der Gruppe übers Web-Interface löschen und wieder einfügen)
Grüße,

PS:
In der XML vom Backup sind bei betroffenen (nicht editierbaren) Usern jetzt die Rechte mit aufgelistet (bei den anderen Usern steht hier nur nur die Rolle <role name="users" />):
Code:
                        <Member DN="100" IsPrimary="false">
                            <role name="users">
  <allowToManageCompanyBook>false</allowToManageCompanyBook>
  <allowToChangePresence>false</allowToChangePresence>
  <canSeeGroupMembers>false</canSeeGroupMembers>
  <canSeeGroupCalls>false</canSeeGroupCalls>
  <showMyPresence>false</showMyPresence>
  <showMyPresenceOutside>false</showMyPresenceOutside>
  <showMyCalls>false</showMyCalls>
  <performOperations>false</performOperations>
  <canBargeIn>false</canBargeIn>
  <canIntercom>false</canIntercom>
  <allowParking>false</allowParking>
  <allowIVR>false</allowIVR>
  <assignClearOperations>false</assignClearOperations>
  <canSeeGroupRecordings>false</canSeeGroupRecordings>
</role>
                        </Member>
 
Zuletzt bearbeitet:
Läßt sich das reparieren? (Ja -> Benutzer aus der Gruppe übers Web-Interface löschen und wieder einfügen)
Grüße,

PS:
In der XML vom Backup sind bei betroffenen (nicht editierbaren) Usern jetzt die Rechte mit aufgelistet (bei den anderen Usern steht hier nur nur die Rolle <role name="users" />):
Ja, diese Notwendigkeit kam vmtl. mit dem Rechteupgrade der 3CX 18v6 oder später. Das gab es damals noch nicht. Ich schaue mir das noch einmal in Ruhe an. Das geht sicher auch jetzt noch wenn man die Rechte mitnimmt o.ä..
 
  • Like
Reaktionen: telefon und Gmark
Ja, diese Notwendigkeit kam vmtl. mit dem Rechteupgrade der 3CX 18v6 oder später. Das gab es damals noch nicht. Ich schaue mir das noch einmal in Ruhe an. Das geht sicher auch jetzt noch wenn man die Rechte mitnimmt o.ä..
Hallo fxbastler,

dein Code-Schnipsel gefällt mir sehr gut, der ist genau das was mein Kunde benötigt. Wenn sich ein Benutzer über die CFA in eine Gruppe einwählt bekommt dieser bei der PWA App in den einstellungen den Fehler 500 und kann nichts einstellen. Hast du bereits eine Lösung wie der Code umgeschrieben werden muss, damit der Fehler nicht kommt?

Besten Dank vorab.
 
Im Codeschnipsel beim Einfügen einer NSt. in eine Gruppe weiter oben ist folgende Änderung nötig:
C#:
member.RoleTag = thedn.GroupMembership[0].Overrides.ToString();

... oder gleich den überarbeiteten Code von hier benutzen.
 

Statistik des Forums

Themen
44.413
Beiträge
232.713
Mitglieder
78.328
Neuestes Mitglied
as7h