项目作者: bit4bit

项目描述 :
GO - Asterisk AMI Interface
高级语言: Go
项目地址: git://github.com/bit4bit/gami.git
创建时间: 2014-05-14T16:11:37Z
项目社区:https://github.com/bit4bit/gami

开源协议:MIT License

下载


GAMI

GO - Asterisk AMI Interface

communicate with the Asterisk AMI, Actions and Events.

Example connecting to Asterisk and Send Action get Events.

  1. package main
  2. import (
  3. "log"
  4. "github.com/bit4bit/gami"
  5. "github.com/bit4bit/gami/event"
  6. "time"
  7. )
  8. func main() {
  9. ami, err := gami.Dial("127.0.0.1:5038")
  10. if err != nil {
  11. log.Fatal(err)
  12. }
  13. ami.Run()
  14. defer ami.Close()
  15. //install manager
  16. go func() {
  17. for {
  18. select {
  19. //handle network errors
  20. case err := <-ami.NetError:
  21. log.Println("Network Error:", err)
  22. //try new connection every second
  23. <-time.After(time.Second)
  24. if err := ami.Reconnect(); err == nil {
  25. //call start actions
  26. ami.Action("Events", gami.Params{"EventMask": "on"})
  27. }
  28. case err := <-ami.Error:
  29. log.Println("error:", err)
  30. //wait events and process
  31. case ev := <-ami.Events:
  32. log.Println("Event Detect: %v", *ev)
  33. //if want type of events
  34. log.Println("EventType:", event.New(ev))
  35. }
  36. }
  37. }()
  38. if err := ami.Login("admin", "root"); err != nil {
  39. log.Fatal(err)
  40. }
  41. if _, errPing := ami.Action("Ping", nil); errPing != nil {
  42. log.Fatal(errPing)
  43. }
  44. //async actions
  45. rsPing, rsErr := ami.AsyncAction("Ping", gami.Params{"ActionID": "pingo"})
  46. if rsErr != nil {
  47. log.Fatal(rsErr)
  48. }
  49. if _, err := ami.Action("Events", gami.Params{"EventMask":"on"}); err != nil {
  50. log.Fatal(err)
  51. }
  52. log.Println("ping:", <-rsPing)
  53. }

TLS SUPPORT

In order to use TLS connection to manager interface you could Dial with additional parameters

  1. //without TLS
  2. ami, err := gami.Dial("127.0.0.1:5038")
  3. //if certificate is trusted
  4. ami, err := gami.Dial("127.0.0.1:5039", gami.UseTLS)
  5. //if self signed certificate
  6. ami, err := gami.Dial("127.0.0.1:5039", gami.UseTLS, gami.UnsecureTLS)
  7. //if custom tls configuration
  8. ami, err := gami.Dial("127.0.0.1:5039", gami.UseTLSConfig(&tls.Config{}))

WARNING:
Only Asterisk >=1.6 supports TLS connection to AMI and
it needs additional configuration(follow the Asterisk AMI configuration documentation)

CURRENT EVENT TYPES

The events use documentation and struct from PAMI.

use bit4bit/gami/event.New() for get this struct from raw event

EVENT ID TYPE TEST
Newchannel YES
Newexten YES
Newstate YES
Dial YES
ExtensionStatus YES
Hangup YES
PeerStatus YES
PeerEntry YES
VarSet YES
AgentLogin YES
Agents YES
AgentLogoff YES
AgentConnect YES
RTPReceiverStats YES
RTPSenderStats YES
Bridge YES