我已经连接到星号,并设法从事件PeerStatus获得活动和非活动对等体的数量,但现在我需要获得活动呼叫和通道的数量,并显示它们。我已经尝试了方法来寻找ChannelStateDesc=Up,但它不起作用。即使当我把日志我没有看到该事件被发现。我该如何修复它(也许与事件CoreShowChannelsComplete?)Thanks in advance
//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)
}
}
}
1条答案
按热度按时间kuuvgm7e1#
您应该发出操作类型“COMMAND”并读取结果。
命令可以是
1.这张图显示了通道总数
核心显示通道计数
1.这张图以人类可读的格式显示通道
核心节目频道
1.这一个显示在机器/可解析
核心显示通道简洁
请注意,这可能不是很可靠的方式。您必须自己计数或使用一些拨号计划拦截器,如功能组/组计数,使可靠的结果。
您可以使用UserEvent dialplan命令从拨号计划发送自定义事件。
是的,星号是PBX,没有状态机知识(拨号方案)是无法管理的。至少不可靠。