amiga

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 19, 2021 License: MIT Imports: 9 Imported by: 0

README

amiga GoDoc

Golang connector for Asterisk Manager Interface (AMI).

Install

go get -u github.com/azzzak/amiga

Usage

package main

import (
	"fmt"

	"github.com/azzzak/amiga"
	"github.com/azzzak/amiga/action"
	"github.com/azzzak/amiga/event"
)

func main() {
	// catch connection event
	onConnect := amiga.OnConnect(func(msg string) {
		fmt.Printf("connect %s\n", msg)
	})

	// catch errors
	errHandler := amiga.OnError(func(resp amiga.ErrResp) {
		fmt.Printf("error %v\n", resp)
	})

	// catch all events
	onEvent := amiga.OnEvent(func(m map[string]string) {
		fmt.Printf("event %v\n", m)
	})

	// new amiga instance, you may omit any handler, the order doesn't matter
	ami := amiga.New(errHandler, onConnect, onEvent)

	// register handler for specific event
	ami.RegisterHandler(event.FullyBooted, func(m map[string]string) {
		fmt.Printf("booted %v\n", m)

		// amiga.Populate helps you get fields of interest
		var status, uptime string
		err := amiga.Populate(m, map[string]*string{
			"Status": &status,
			"Uptime": &uptime,
		})
		if err != nil {
			// error shows some fields are missing
		}
		fmt.Println(status, uptime)
	})

	// connect to asterisk
	err := ami.Connect(amiga.Options{
		Host:     "localhost", // default: "localhost"
		Port:     5038,        // default: 5038
		Username: "guest",
		Secret:   "guest",
	})
	if err != nil {
		fmt.Println("error:", err)
	}

	// send action
	res, err := ami.Action(action.QueueStatus, map[string]string{
		"ActionID": "7a67-b519-09fa",
	})
	if err != nil {
		fmt.Println("error:", err)
	}
	fmt.Println(res)

	ch := make(chan int)
	<-ch

	// send Logoff action, close connection
	ami.Close()
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrNilConn = errors.New("connection has been lost")

ErrNilConn error.

Functions

func OnConnect

func OnConnect(h func(string)) func(ami *Amiga)

OnConnect create handler for catching connection message.

func OnError

func OnError(h func(ErrResp)) func(ami *Amiga)

OnError create handler for catching errors.

func OnEvent

func OnEvent(h handler) func(ami *Amiga)

OnEvent create handler for catching all events.

func Populate

func Populate(m map[string]string, p map[string]*string) error

Populate fills up variables with value of fields of interest.

Types

type Amiga

type Amiga struct {
	sync.Mutex
	// contains filtered or unexported fields
}

Amiga struct.

func New

func New(opts ...func(*Amiga)) *Amiga

New amiga constructor.

func (*Amiga) Action

func (ami *Amiga) Action(a string, cmd map[string]string) (map[string]string, error)

Action execute an AMI action. If action successfully executed, method returns a map with Response fields. Otherwise error contains the Error message.

func (*Amiga) Close

func (ami *Amiga) Close() error

Close connection to AMI. After connection closed internal goroutines are stopped to prevent leaking. If you want to reconnect to AMI you have to create new amiga instance.

func (*Amiga) Connect

func (ami *Amiga) Connect(o Options) error

Connect to AMI.

func (*Amiga) RegisterHandler

func (ami *Amiga) RegisterHandler(event string, f handler)

RegisterHandler for specific event.

func (*Amiga) UnregisterHandler

func (ami *Amiga) UnregisterHandler(event string)

UnregisterHandler for specific event.

type ErrResp

type ErrResp struct {
	ActionID,
	Message string
}

ErrResp struct.

type Options

type Options struct {
	Host     string
	Port     int
	Username string
	Secret   string
}

Options of connection.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL