Go library that provides interface to Asteris AMI. The library uses given net.Conn (tcp or tls), login and starts reading AMI messages from connection and parse them into *Message object. Provides simple interface to send messages to AMI. It uses re2c to create very fast protocol parser. Run "make bench" for benchmark tests.
Usage example:
import ( "errors" "fmt" "log" "net" "github.com/staskobzar/goami2" ) func main() { conn, err := net.Dial("tcp", "asterisk.host:5038") if err != nil { log.Fatalln(err) } // login and create client client, err := goami2.NewClient(conn, "admin", "pa55w0rd") if err != nil { log.Fatalln(err) } log.Println("client connected and logged in") // create AMI Action message and send to the asterisk.host msg := goami2.NewAction("CoreStatus") msg.AddActionID() client.Send(msg.Byte()) defer client.Close() // close connections and all channels for { select { case msg := <-client.AllMessages(): log.Printf("Got message: %s\n", msg.JSON()) case err := <-client.Err(): // terminate on network closed if errors.Is(err, goami2.ErrEOF) { log.Fatalf("Connection error: %s", err) } log.Printf("WARNING: AMI client error: %s", err) } } }See documentation at https://pkg.go.dev/github.com/staskobzar/goami2