More info: https://github.com/lordbasex/docker/tree/master/docker-amigo
############################
# 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"]
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 --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
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
[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
Content type
Image
Digest
Size
4.4 MB
Last updated
about 5 years ago
docker pull cnsoluciones/amigo