Home

Awesome

goagi: Golang library to build agi/fastagi applications

Build Status codecov CodeFactor Scrutinizer Code Quality Go Report Card GitHub

Simple library that helps to build AGI scripts or FastAGI servers with Go.

import "github.com/staskobzar/goagi"

API local documentation link is here or go.dev generated documentation.

Usage FastAGI

AGI object is created with New method with three arguments:

Debugger interface is required only for debugging and usually nil. See below for more details.

Reader and Writer are interfaces are any objects that implement Read/Write methods and can be net.Conn, tls.Conn, os.Stdin, os.Stdout or any other, for example from packages strings, bufio, bytes.

New method will read AGI session setup environment variables and provides interface to AGI commands. AGI environment variables and arguments can be accessed with methods Env and EnvArgs. If AGI channel receives HANGUP message, the session will be marked as hungup. Hangup status can be checked by method IsHungup.

Usage example for AGI:

	import (
		"github.com/staskobzar/goagi"
		"os"
	)

	agi, err := goagi.New(os.Stdin, os.Stdout, nil)
	if err != nil {
		panic(err)
	}
	agi.Verbose("Hello World!")

Fast AGI example:

	ln, err := net.Listen("tcp", "127.0.0.1:4573")
	if err != nil {
		panic(err)
	}
	for {
		conn, err := ln.Accept()
		if err != nil {
			panic(err)
		}
		go func(conn net.Conn) {
			agi, err := goagi.New(conn, conn, nil)
			if err != nil {
				panic(err)
			}
			agi.Verbose("Hello World!")
		}(conn)
	}

See working examples in [examples/] folder.

Index of methods that implements AGI commands see here.

Commands Response interface

Every AGI command method return interface Response. This is interface that provides access to AGI response values. Success response example:

200 result=1 (speech) endpos=9834523 results=5

Fail response example:

511 Command Not Permitted on a dead channel or intercept routine

There are success and error responses. Response interface implements following methods:

Debugger

Interface that provides debugging capabilities with configurable output.

Example of usage:

	dbg := logger.New(os.Stdout, "myagi:", log.Lmicroseconds)
	r, w := net.Pipe()
	agi, err := goagi.New(r, w, dbg)