Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mendapatkan bilangan panggilan aktif daripada acara antara muka Pengurus Asterisk
Apabila menggunakan sistem komunikasi Asterisk, mengetahui bilangan panggilan aktif adalah sangat penting untuk memantau dan mengurus trafik panggilan. Pelbagai maklumat acara, termasuk bilangan panggilan, boleh diperolehi melalui antara muka Pengurus Asterisk. Artikel ini akan memperkenalkan anda kepada kaedah dan langkah tentang cara menggunakan antara muka Pengurus Asterisk untuk mendapatkan bilangan panggilan aktif. Sama ada anda baru menggunakan Asterisk atau pengguna berpengalaman, artikel ini akan memberikan anda panduan terperinci. Mari lihat!
Saya telah menyambung ke asterisk dan berjaya mendapatkan bilangan rakan sebaya yang aktif dan tidak aktif daripada status rakan sebaya, tetapi kini saya perlu mendapatkan bilangan panggilan dan saluran yang aktif dan memaparkannya. Saya telah cuba mencari channelstatedesc=up tetapi ia tidak berfungsi. Walaupun saya meletakkan log, saya tidak melihat peristiwa itu ditemui. Bagaimanakah saya boleh membetulkannya (mungkin melalui acara coreshowchannelcomplete?) Terima kasih terlebih dahulu
//server.go package server import ( "bufio" "fmt" "net" "strings" "data" ) func connecttoami(address, username, password string) error { conn, err := net.dial("tcp", address) if err != nil { return err } defer conn.close() fmt.fprintf(conn, "action: login\r\nusername: %s\r\nsecret: %s\r\n\r\n", username, password) peerstatus := &data.peerstatus{} callstatus := &data.callstatus{} scanner := bufio.newscanner(conn) for scanner.scan() { line := scanner.text() fmt.println(line) if strings.hasprefix(line, "peerstatus") { data.getpeerstatus(line, peerstatus) fmt.println("active peers:", peerstatus.active) fmt.println("inactive peers:", peerstatus.inactive) } else if strings.hasprefix(line, "coreshowchannel") { data.getchannelstatus(line, callstatus) fmt.println("active peers:", peerstatus.active) fmt.println("inactive peers:", peerstatus.inactive) } } if err := scanner.err(); err != nil { return err } return nil }
//calls.go package data import ( "encoding/json" "fmt" "strings" ) type CallStatus struct { ActiveCalls int `json:"active_calls"` ActiveChannels int `json:"active_channels"` } func (cs *CallStatus) UpdateCallStatus(state string) { fmt.Println("UpdateCallStatus function", state) switch state { case "Up": cs.ActiveCalls++ cs.ActiveChannels = cs.ActiveCalls * 2 case "Down": cs.ActiveCalls-- cs.ActiveChannels=cs.ActiveChannels-2 default: } } func GetChannelStatus(event string, callStatus *CallStatus) { fmt.Println("GetChannelStatus function", event) for _, line := range strings.Split(event, "\r\n") { if strings.HasPrefix(line, "ChannelStateDesc: ") { state := strings.TrimSpace(strings.TrimPrefix(line, "ChannelStateDesc: ")) callStatus.UpdateCallStatus(state) } } }
Saya telah mengetahuinya, kodnya adalah seperti berikut: //server.go
parts := strings.split(line, ": ") if len(parts) == 2 { key := parts[0] value := parts[1] if key == "event" { object.event = value } if key == "channelstate" { object.channelstate = value } if key == "linkedid" { object.linkedid = value } } data.handleevent(object, activecalls)
calls.go
package data import ( "encoding/json" "fmt" ) type Data struct { Event string `json:"Event"` ChannelState string `json:"ChannelState"` Linkedid string `json:"Linkedid"` } type ActiveCalls struct { Count int `json:"active_calls"` } func HandleEvent(data Data, activeCalls *ActiveCalls) { if data.Event == "Newstate" { fmt.Println(data.ChannelState) if data.ChannelState == "6" { activeCalls.Count++ fmt.Println("Newstate count active calls", activeCalls.Count) } } else if data.Event == "Hangup" { fmt.Println(data.ChannelState) activeCalls.Count-- if activeCalls.Count < 0 { activeCalls.Count = 0 } fmt.Println("Newstate count active calls after hangup", activeCalls.Count) } } func ActiveCallsToJSON(activeCalls *ActiveCalls) (string, error) { jsonBytes, err := json.Marshal(activeCalls) if err != nil { return "", err } return string(jsonBytes), nil
}
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan bilangan panggilan aktif daripada acara antara muka Pengurus Asterisk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!