.titleBar { margin-bottom: 5px!important; }

Asterisk Server mit TCP Ansteuern (VB Programmierung)

Dieses Thema im Forum "Asterisk Allgemein" wurde erstellt von 2fast_driver, 13 Okt. 2008.

  1. 2fast_driver

    2fast_driver Neuer User

    Registriert seit:
    8 Aug. 2008
    Beiträge:
    62
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Halllo,

    nach mehrere Tage Programmierung (Visual Basic 2005) habe ich geschafft eine Verbindung mittel TCP zum Asterisk Server herzustellen. Ich kann auch Anmelden (Manager Login) und Call (Originate) durchführen.

    Mein Problem ist, Das Programm sollte bei ankommende anrufe Automatisch per pop up (wie Call Monitor) fenster anzeigen wer bzw. welche nummer anruft. Mit welcher Funktion ist es bei Asterisk möglich?

    Vielen Dank

    MfG
     
  2. thisismyname

    thisismyname Neuer User

    Registriert seit:
    24 Sep. 2008
    Beiträge:
    78
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    Student
    hmmm, naja, da musst du die Manager Events auswerten. Siehe -> http://www.voip-info.org/wiki/view/asterisk+manager+events

    Vielleicht hilft ditr auch noch das:
    http://www.voip-info.org/wiki-Asterisk+manager+API
    und das:
    http://www.voip-info.org/wiki/view/Asterisk+manager+Examples

    Der untere Link wirft die Frage auf warum du das alles selber programmieren willst. ICh habe selbst zb sehr gute Erfahrungen mit der Java API fuer das Manager Interface gemacht. Man braucht das Rad ja nicht 2 mal erfinden.

    greetz myname
     
  3. 2fast_driver

    2fast_driver Neuer User

    Registriert seit:
    8 Aug. 2008
    Beiträge:
    62
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    danke für deine schnelle Antwort.


    JAVA API ---> ja, ich habe auch mehrere Programme gesehen. Bloß es nutzt mir überhaupt nicht, den das Modul den ich programmiere sollte in ein vorhandenes VB System integriert werden.


    "Manager Events auswerten" --> soweit habe ich es auch schon gedacht, aber Asterisk sendet (response) kein End Of Stream (ich denke durch den Setzen des Manager.conf "read = system,call,log,verbose,command,agent,user,config
    " sendet Asterisk immer wieder Aktivitäten und somit gibt es kein End Of Stream). So musst ich jedes Mal einzelne response Zeile von Asterisk auslesen, es geht solange gut wenn Asterisk was schickt, wenn Asterisk nicht schickt stützt das Programm ab.

    Habt ihr einer Idee wie ich das abfangen können?
     
  4. thisismyname

    thisismyname Neuer User

    Registriert seit:
    24 Sep. 2008
    Beiträge:
    78
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    Student
    Naja, asterisk sendet kein EOF aber ein "/r/n" oder? Sollte sich aehnlich auswerten lassen.

    Ansonsten glaub ich gibts auf dem Link auf eine API fuer VB.

    greetz
     
  5. Bayano

    Bayano Neuer User

    Registriert seit:
    18 Sep. 2007
    Beiträge:
    14
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo,

    das was du vorhast interessiert mich auch.
    Könntest du mir deinen Quelltext mal zur Verfüfung stellen?

    MFG
    Bayano
     
  6. 2fast_driver

    2fast_driver Neuer User

    Registriert seit:
    8 Aug. 2008
    Beiträge:
    62
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo,

    hier ist ein Beispiel wie man per TCP einlogt:

    Code:
    
    C# Example 
    
    using System; 
    using System.Net; 
    using System.Net.Sockets; 
    using System.Text.RegularExpressions; 
    using System.Text; 
    
    namespace AsteriskPrototype 
    { 
    class AppConsole 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Quick and Dirty Asterisk Manager Daemon Test:\n"); 
    
      // Connect to the asterisk server. 
      Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
      IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("192.168.0.20"), 5038); 
      clientSocket.Connect(serverEndPoint); 
    
      // Login to the server; manager.conf needs to be setup with matching credentials. 
      clientSocket.Send(Encoding.ASCII.GetBytes("Action: Login\r\nUsername: mark\r\nSecret: mysecret\r\nActionID: 1\r\n\r\n")); 
    
      int bytesRead = 0; 
    
    
      do 
      { 
       byte[] buffer = new byte[1024]; 
       bytesRead = clientSocket.Receive(buffer); 
    
       //Console.WriteLine(bytesRead + " bytes from asterisk server."); 
    
       string response = Encoding.ASCII.GetString(buffer, 0, bytesRead); 
       Console.WriteLine(response); 
    
       if(Regex.Match(response, "Message: Authentication accepted", RegexOptions.IgnoreCase).Success) 
       { 
        // Send a ping request the asterisk server will send back a pong response. 
        clientSocket.Send(Encoding.ASCII.GetBytes("Action: Ping\r\nActionID: 2\r\n\r\n")); 
       } 
      }while(bytesRead != 0); 
    
      Console.WriteLine("Connection to server lost."); 
      Console.ReadLine(); 
     } 
    } 
    } 
    
     
  7. 2fast_driver

    2fast_driver Neuer User

    Registriert seit:
    8 Aug. 2008
    Beiträge:
    62
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    habt was gefunden!

    Hallo,

    ich bin auf app_broadcast gestoßen.

    siehe link: http://psg.com/~begg/projects/

    beschreibung aus:

    http://www.voip-info.org/wiki/view/Asterisk+call+notification

    Code:
    9. app_broadcast (3rd party tool)
    http://psg.com/~begg/projects/
    Broadcast is an Asterisk application which you may use to send a generic message over TCP/IP to any number of computers running software configured to listen for these types of messages. Being written in C, Broadcast will be dynamically loaded onto the Asterisk program on startup, making it a highly reliable and scalable option when compared with other solutions based on the Asterisk Gateway Interface (AGI) system...
    
    You would like a nice window to pop up with say the caller id details of an incoming call. With this same software, you may "selectively" broadcast messages for example, you may only want the sales crew to see information about a given caller and not other groups. For example:
    
     [sales-context]
     exten => s,1,Answer
     exten => s,2,Broadcast(This is a sales call|group=sales)
     exten => s,3,Dial(whatever)
    
    In such a case, you will need to have configured the "sales computers"
    with a group attribute set to sales for example:
    
     [192.168.1.1]
     port = 10296
     group = sales
    
     [192.168.1.2]
     port = 10345
     group = sales
    
     [192.168.1.3]
     port = 19002
     group = technical
    
    In such a case as above, onlye the first two machines (192.168.1.1 and 192.168.1.2) will be notified.
    
    All you need configured on the machines that need to receive these messages is software like YAC ("Yet Another Callerid program") which you may get from http://sunflowerhead.com/software/yac/
    You will only need to configure the broadcast application to connect to the right port.
    
    
    

    hat jemand Broadcast schon eingerichtet?