H.Peters Posted October 23, 2013 Report Share Posted October 23, 2013 Hallo, ich habe folgendes Problem: ich versuche schon seit einiger Zeit CSTA-Kommandos an die SnomOne PBX zu senden. Dazu benutze ich folgendes VB-Programm, wie es hier von Matt Landis als Beispiel codiert ist: Imports System.TextImports System.NetImports System.Net.SocketsPublic Class Form1 Public Sub CSTAPost() Try Dim PBX_Port As Int32 = 80 Dim PBX_IPAddress As IPAddress = IPAddress.Parse("192.168.1.119") Dim TCP_Client As New TcpClient() Dim TCP_Encoder As New UTF8Encoding TCP_Client.Connect(PBX_IPAddress, PBX_Port) Dim TCP_Stream As NetworkStream = TCP_Client.GetStream Dim bytes(TCP_Client.ReceiveBufferSize) As Byte Dim responseData As String Dim message As String = "<?xml version=""1.0"" encoding=""UTF-8""?> <StartApplicationSession xmlns=""http://www.ecma-international.org/standards/ecma-354/appl_session/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""><applicationInfo><applicationID>MyApp</applicationID><applicationSpecificInfo><tns:SessionLoginInfo xmlns:tns=""http://www.pbxnsip.com/schemas/csta/login""><tns:userName>42</tns:userName><tns:password>passwort</tns:password><tns:domain>pbx.company.com</tns:domain><tns:sessionCleanupDelay>60</tns:sessionCleanupDelay></tns:SessionLoginInfo></applicationSpecificInfo></applicationInfo><requestedProtocolVersions><protocolVersion>http://www.ecma-international.org/standards/ecma-323/csta/ed3</protocolVersion><protocolVersion>http://www.ecma-international.org/standards/ecma-323/csta/ed4</protocolVersion><protocolVersion>http://www.ecma-international.org/standards/ecma-323/csta/ed5</protocolVersion></requestedProtocolVersions><requestedSessionDuration>180</requestedSessionDuration></StartApplicationSession>" Dim data As Byte() = TCP_Encoder.GetBytes(message) TCP_Stream.Write(data, 0, data.Length) TCP_Stream.Read(bytes, 0, CInt(TCP_Client.ReceiveBufferSize)) ' Output the data received from the host to the console. responseData = Encoding.ASCII.GetString(bytes) CSTAResponseData.Text = responseData CSTAResponseData.Text = Mid(responseData, InStr(responseData, "<sessionID>"), 45) ' Close everything. TCP_Stream.Close() TCP_Client.Close() Catch e1 As ArgumentNullException 'Console.WriteLine("ArgumentNullException: {0}", e) MsgBox("argument null " & e1.ToString) Catch e1 As SocketException ' Console.WriteLine("SocketException: {0}", e) MsgBox("socket exp" & e1.ToString) End Try End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call CSTAPost() End SubEnd Class aber ich bekomme keinerlei Antwort. Die PBX-Software läuft z.Zt. in einer virtuellen Umgebung, Version ist 5.1.2 (CentOS64). Das Webinterface ist auch erreichbar und konfigurierbar. CSTA Testlizenz ist auch aktiviert, und noch ein paar Tage gültig. Als Basic-Version für den Test habe ich vb-Express 2010 unter Win7 64bit verwendet. Ich habe es auch mit Usernamen und Passwort des Administrators der PBX versucht, und als Damäne versuchsweise die Windows-Domäne, aber es geht einfach nicht. Probeweise auch sämtliche Firewalls außer Bertrieb genommen, auch kein Ergebnis. In der PBX habe ich der IP des aufrufenden PC SOAP-Zugriff gewährt, und in der IP-Zugriffskontrolle den Zugang ebenfalls erlaubt. Aber meine Zugriffsversuche tauchen auch nicht in irgendeinem Log auf. Muss ich in der PBX nocht irgendwas freischalten, wenn ja, wo? Oder muss CSTA noch installiert werden? Werde da aus den Beschreibungen nicht so ganz schlau, da englisch nicht unbedingt meine Sprache ist. Abgesehen davon, dass diese ganze Materie auch Neuland für mich ist. Und noch eine Frage: ist mit dem Passwort im XML-String das SIP-Passwort oder das Web-Passwort des Users gemeint? Sinn und Zweck der Übung soll werden, die Nummer des Anrufenden und die Dauer des Anrufs zeitnah zu ermitteln, und für Abrechnungszwecke zu verwenden. Gruß Hans Quote Link to comment Share on other sites More sharing options...
Vodia PBX Posted October 24, 2013 Report Share Posted October 24, 2013 Ok. Vermutlich ist CSTA eh das falsche Ansatz um an Daten für Abrechnungszwecke zu kommen. CSTA ist auch nicht gerade trivial. Da würde ich mir stattdessen einfach mal das CDR-Kapitel ansehen, http://www.snomone.com/documentation/cdr ist erst neulich auf den neuesten Stand gebracht worden. JSON wird mittlerweile von praktisch allen Frameworks unterstützt und dort werden alle "legs" berichtet. P.S. Da fällt mir am Rande eine interessante Übung für den nächsten Hotelaufenthalt ein: Eine externe Nummer anrufen, den Hörer neben das Telefon legen, Auschecken und sehen ob das Gespräch es noch irgendwie auf die Rechnung schafft! Quote Link to comment Share on other sites More sharing options...
H.Peters Posted November 5, 2013 Author Report Share Posted November 5, 2013 Hallo, CDR ist wohl schon mal von einem Kollegen versucht worden, und als nicht ausreichend verworfen worden. Ich hab dann weiterhin versucht, mit CSTA weiterzukommen, aber immer noch ergebnislos. Was ich dank PCAP-Trace mitlerweile weiß, dass die Pakete zumindest bei der PBX ankommen, und auch quittiert werden, aber mehr passiert nicht. Weiß jetzt nicht weiter. Ist es der falsche Port? Existiert da ein Fehler in der PBX, der den XML-String falsch interpretiert, oder ist der XML-String doch fehlerhaft? Sollte die PBX nicht wenigstens eine irgendeine Meldung zurückgeben? ratlose Grüße Hans Quote Link to comment Share on other sites More sharing options...
Vodia PBX Posted November 5, 2013 Report Share Posted November 5, 2013 CSTA ist nicht trivial. Die XML Pakete müssen in einen speziellen binären Header verpackt werden, sonst tut sich nichts auf der PBX. Ausserdem muss sich der CSTA-Client anmelden und eine Subscrion registrieren. Man kann das alles schön beim CSTA-Browser beobachten, Wireshark sollte auch in der Lage sein, dass sauber darzustellen. Aber wie gesagt glaube ich wäre es 100 x einfacher CDR einfach über ActionURL rauszuschieben. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.