Sign inSign up

cnsoluciones/amigo

By cnsoluciones

Updated about 5 years ago

Docker Amigo

Image
0

2.9K

cnsoluciones/amigo repository overview

Version

  • Alpine

More info: https://github.com/lordbasex/docker/tree/master/docker-amigo

Dockerfile

############################
# STEP 1 build executable binary
############################
FROM alpine AS builder

LABEL maintainer="Federico Pereira <[email protected]>"
LABEL github="https://github.com/lordbasex/docker/tree/master/docker-amigo"

ENV GO111MODULE=on \
    GOPATH=/home/go \
    PATH=/home/go/bin:$PATH \
    GOBIN=/home/go/bin

RUN apk update && apk add --no-cache git go bash ca-certificates
RUN mkdir -p /home/go/src /home/go/bin /home/go/src/amigo && chmod -R 777 /home/go /home/go/src/amigo && cp -fr /usr/bin/go /home/go/bin/
WORKDIR /home/go/src/amigo
COPY ./amigo.go .

RUN go mod init amigo
RUN go get -v
RUN go build -o /go/bin/amigo

############################
# STEP 2 build a small image
############################
FROM alpine:latest

LABEL maintainer="Federico Pereira <[email protected]>"
LABEL github="https://github.com/lordbasex/docker/tree/master/docker-amigo"

COPY --from=builder /go/bin/amigo /go/bin/amigo

ENV AMI_HOST=localhost \
  AMI_PORT=5038 \
  AMI_USERNAME=admin \
  AMI_PASSWORD=123456

ENTRYPOINT ["/go/bin/amigo"]

amigo.go

package main

import (
	"flag"
	"fmt"
	"os"
	"github.com/ivahaev/amigo"
)

// DeviceStateChangeHandler .
func DeviceStateChangeHandler(m map[string]string) {
	fmt.Printf("DeviceStateChange event received: %v\n", m)
}

// DefaultHandler .
func DefaultHandler(m map[string]string) {
	fmt.Printf("Event received: %v\n", m)
}

func main() {
	flag.Parse()
	fmt.Println("Init Amigo")

	settings := &amigo.Settings{Username: "admin", Password: "password", Host: "127.0.0.1", Port: "5038"}
	if e := os.Getenv("AMI_HOST"); len(e) > 0 {
		settings.Host = e
	}
	if e := os.Getenv("AMI_PORT"); len(e) > 0 {
		settings.Port = e
	}
	if e := os.Getenv("AMI_USERNAME"); len(e) > 0 {
		settings.Username = e
	}
	if e := os.Getenv("AMI_PASSWORD"); len(e) > 0 {
		settings.Password = e
	}

	a := amigo.New(settings)

	a.Connect()

	a.On("connect", func(message string) {
		fmt.Println("Connected", message)
	})
	a.On("error", func(message string) {
		fmt.Println("Connection error:", message)
	})

	a.RegisterHandler("DeviceStateChange", DeviceStateChangeHandler)
	a.RegisterDefaultHandler(DefaultHandler)
	c := make(chan map[string]string, 100)
	a.SetEventChannel(c)

	if a.Connected() {
		result, err := a.Action(map[string]string{"Action": "QueueSummary", "ActionID": "Init"})
		fmt.Println(result, err)
	}

	ch := make(chan bool)
	<-ch
}

docker run

docker run --net=host --name amigo --rm  -it --env AMI_HOST=127.0.0.1 --env AMI_PORT=5038 --env AMI_USERNAME=admin --env AMI_PASSWORD=1234 cnsoluciones/amigo:latest

docker-compose.yml

version: '3.0'
services:

  amigo:
    container_name: amigo
    image: cnsoluciones/amigo:latest
    environment:
        - AMI_HOST
        - AMI_PORT
        - AMI_USERNAME
        - AMI_PASSWORD
    restart: always
    network_mode: host

manager.conf

[admin]
secret = 1234
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.255.255.0
read = all
write = all
writetimeout = 1000
eventfilter=!Event: RTCP*
eventfilter=!Event: VarSet
eventfilter=!Event: Cdr
eventfilter=!Event: DTMF
eventfilter=!Event: AGIExec
eventfilter=!Event: ExtensionStatus
eventfilter=!Event: ChannelUpdate
eventfilter=!Event: ChallengeSent
eventfilter=!Event: SuccessfulAuth
eventfilter=!Event: DeviceStateChange
eventfilter=!Event: RequestBadFormat
eventfilter=!Event: MusicOnHoldStart
eventfilter=!Event: MusicOnHoldStop
eventfilter=!Event: NewAccountCode
eventfilter=!Event: DeviceStateChange

Tag summary

Content type

Image

Digest

Size

4.4 MB

Last updated

about 5 years ago

docker pull cnsoluciones/amigo