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