goami2: Simple Asterisk Manager Interface (AMI) library

July 24, 2026 ยท View on GitHub

Build Status GitHub go.mod Go version of a Go module GitHub release Go Reference

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)
  }
 }
}

Docs

See documentation at https://pkg.go.dev/github.com/staskobzar/goami2