返回顶部
首页 > 资讯 > 精选 >如何从 Asterisk Manager 接口事件获取活动呼叫数量
  • 771
分享到

如何从 Asterisk Manager 接口事件获取活动呼叫数量

2024-02-09 11:02:07 771人浏览 安东尼
摘要

在使用Asterisk通信系统时,了解活动呼叫数量对于监控和管理呼叫流量非常重要。而通过Asterisk Manager接口可以获取到各种事件信息,包括呼叫数量。本文将向您介绍如何使用

在使用Asterisk通信系统时,了解活动呼叫数量对于监控和管理呼叫流量非常重要。而通过Asterisk Manager接口可以获取到各种事件信息,包括呼叫数量。本文将向您介绍如何使用Asterisk Manager接口来获取活动呼叫数量的方法和步骤。无论您是Asterisk的新手还是有经验的用户,本文都会为您提供详细的指导。让我们一起来看看吧!

问题内容

我已经连接到星号,并设法从事件 peerstatus 中获取活动和非活动对等点的数量,但现在我需要获取活动呼叫和通道的数量并显示它们。我尝试过寻找 channelstatedesc=up 的方法,但它不起作用。即使我放置日志,我也看不到该事件被发现。我该如何修复它(也许通过事件 coreshowchannelscomplete?)提前致谢

//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)
        }
    }
}

解决方法

我已经弄清楚了,代码如下: //服务器.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

}

以上就是如何从 Asterisk Manager 接口事件获取活动呼叫数量的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 如何从 Asterisk Manager 接口事件获取活动呼叫数量

本文链接: https://www.lsjlt.com/news/562453.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何从 Asterisk Manager 接口事件获取活动呼叫数量
    在使用Asterisk通信系统时,了解活动呼叫数量对于监控和管理呼叫流量非常重要。而通过Asterisk Manager接口可以获取到各种事件信息,包括呼叫数量。本文将向您介绍如何使用...
    99+
    2024-02-09
  • jQuery如何获取窗口滚动事件?
    这篇文章将为大家详细讲解有关jQuery如何获取窗口滚动事件?,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何使用 jQuery 获取窗口滚动事件 简介 窗口滚动事件是在窗口滚动时触发的事件。jQuer...
    99+
    2024-04-02
  • web中如何从事件对象里获取事件数据
    这篇文章将为大家详细讲解有关web中如何从事件对象里获取事件数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。事件对象:它是由JavaScript和DOM自动创建产生,它...
    99+
    2024-04-02
  • vue中如何使用echarts实现动态数据绑定及获取后端接口数据
    本篇内容主要讲解“vue中如何使用echarts实现动态数据绑定及获取后端接口数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue中如何使用echarts实现动态数据绑定及获取后端接口数据”...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作