CFD: Letzte zwei Stellen DID auslesen / C#

patrickb

Platinum Partner
Advanced Certified
Mitglied seit
6. Februar 2021
Beiträge
928
Entweder bin ich zu doof oder eine meiner Anlagen spielt mir einen Streich. Ich nutzen den CFD und möchte gerne die letzten beiden Zeichen der Varibale "session.did" auslesen. Mit C# will das aber nicht wirklich weil er mir immer den Fehler ( Error CS0122: 'Der Zugriff auf "Strings" ist aufgrund des Schutzgrads nicht möglich." ausgibt, wenn er versucht "dw = Strings.Right(did, 2)" auszuführen. Die variable "session.did" habe ich im Script "did" zugewiesen.

Hat da wer eine Idee oder eine Lösung? Bin kein C# Pro.
 
Hallo,

so viele Fehler in einer Zeile ;)


Ich nehme an, es sollte heissen ...

FALSCH: dw=did.right(2);. <- s.u.,

RICHTIG:
dw=did.Substring(Math.Max(did.Length-2,0),Math.Min(did.Length,2));

Ich nehme dennoch an, die Variable session.did enthält nicht das was du dir vorstellst. Wenn du wissen willst was da drin ist: benutze die Logger Funktion, Level Info, Text CONCATENATE("********* AUSGABE LOGGER: ani: ",session.ani," did:",session.did," dnis:",session.dnis," callid",session.callid," transf.Ext.:",session.transferingExtension), lasse auf der Shell mittels
tail -f /var/lib/3cxpbx/Instance1/Data/Logs/3CXCallFlow.log das Log mitlaufen und schau dort nach. Könnte ja sein, die session.did ist leer ...
 
Zuletzt bearbeitet:
Ha, ich bin auch nicht besser. Bei mir war das vordefiniert (ein Makro). In der 3CX geht das so nicht, da gibt es keine Methode Right der Klasse String. Die darf man sich mit Substring (als Makro oder Funktion oder inplace) nachbauen, daher:

dw=did.Substring(Math.Max(did.Length-2,0),Math.Min(did.Length,2));

besser ...
 
  • Like
Reaktionen: patrickb
Oh man hahah wie gesagt: C# Dummi.:)

Logs auslesen ist mir da zu doof nur um nen Wert abzufragen :) Ich regel das immer über ein Audioprompt mit Text to Speech :D Außer wenn's wirklich detailliert wird. Die DID gibt mir in dem Fall genau den Wert zurück den ich haben möchte.

Zum speziellen Fall:
Ich habe eine MSN die auf einen SIP-Trunk weitergeleitet wird.

Mein Trunk hat z.B. die 1234 123456
Auf diesen Trunk verweist meine MSN 1234 876543

Wenn ich jetzt die MSN anrufe und "erweitere" packt er mir die Zahlen die hinten dran hängen (an der MSN) einfach mit an den Trunk. Heißt ich rufe 1234 876543 - 10 an. Er leitet um an den Trunk und in der 3CX wird dann als DID 1234 123456 - 10 in die Variable session.DID geschrieben (funktioniert wirklich ^^).

Ich könnte jetzt beigehen und mir einzelne MSNs im Trunk anlegen und händisch alle Regeln zum durchrouten (DW = Nebenstelle) basteln (macht aber bei mehr als 10 Nebenstellen auf Dauer keinen Spaß). Leichter ists wenn ich auf einen Callflow verweise der mir eben die letzten 2 Zahlen ausließt und entsprechend derer ein Transfer an die entsprechende Nebenstelle durchführt. Vor allem weil ich mit der im Trunk angelegt Hauptnummer alle Anrufe (auch die der eigentlich gar nicht vorhandenen Erweiterungen) abgreifen kann.

Kann man das halbwegs nachvollziehen?
 
Ha, ich bin auch nicht besser. Bei mir war das vordefiniert (ein Makro). In der 3CX geht das so nicht, da gibt es keine Methode Right der Klasse String. Die darf man sich mit Substring (als Makro oder Funktion oder inplace) nachbauen, daher:

dw=did.Substring(Math.Max(did.Length-2,0),Math.Min(did.Length,2));

besser ...
Das haut gut hin (Siehe Bild). :) Ich danke dir! Ist quasi jetzt ein "Benutzer wie Durchwahl".

1643041093746.png
 
Öööhm - also wenn ich deine C# Funktion so lese: das hätte man auch einfacher haben können. Es gibt im CFD bei den String Funktionen genau so eine benötigte: RIGHT. Die tut genau das was dein C# Schnipsel macht. Wenn das C# Schnipsel nicht noch ausgebaut wird wäre es überflüssig / einfacher ersetzbar.
 
  • Like
Reaktionen: patrickb

Statistik des Forums

Themen
44.414
Beiträge
232.721
Mitglieder
78.331
Neuestes Mitglied
b2daniel