freeswitch 用ESL 查询sip用户注册状态

直接上代码
核心代码
EslMessage response = client.sendSyncApiCommand("sofia xmlstatus", "profile internal reg 1002"); 


    public void sofia_contact()
{
Client client = new Client();
try
{
client.connect( host, port, password, 2 );
}
catch ( InboundConnectionFailure e )
{
log.error( "Connect failed", e );
return;
}

// EslMessage response = client.sendSyncApiCommand( "sofia_contact", "internal/102@192.168.100.201" );
//回拨两方通话 {origination_caller_id_number=95126,hangup_after_bridge=true,continue_on_fail=true,originate_timeout=60}
// EslMessage response = client.sendSyncApiCommand( "originate", " {origination_caller_id_number=95126,hangup_after_bridge=true,continue_on_fail=true,originate_timeout=60}sofia/gateway/pstn/1118601323147 1003 XML default" );

EslMessage response = client.sendSyncApiCommand("sofia xmlstatus", "profile internal reg 1002");
// client.
// 会议回拨
// originate user/18601323147 conference:conf_uuid-TEST_CON inline


log.info( "Response to 'sofia_contact': [{}]", response );
for ( Entry<Name, String> header : response.getHeaders().entrySet() )
{
log.info( " * header [{}]", header );
}
for ( String bodyLine : response.getBodyLines() )
{
log.info( " * body [{}]", bodyLine );
}
client.close();
}
<think> 我们正在讨论FreeSWITCH的命令,用于查询系统状态。除了`show calls`,还有多个有用的命令。 下面列出一些常用的系统状态查询命令,并给出简要说明和示例输出(如果需要的话)。 1. **show channels** 显示当前所有活跃的通话(通道)信息。与`show calls`类似,但可能包含更多细节。 示例:`show channels` 2. **status** 显示FreeSWITCH的概要状态,包括运行时间、版本、当前通道数等。 示例输出: UP 0 years, 0 days, 0 hours, 3 minutes, 32 seconds, 212 milliseconds, 668 microseconds FreeSWITCH (Version 1.10.5-release git 64d9f4c 2021-05-05 19:02:44Z) is ready 2 session(s) since startup 0 session(s) - peak 2, last 5min 0 0 session(s) per Sec out of max 30, peak 0, last 5min 0 1000 session(s) max min idle cpu 0.00/100.00 3. **sofia status** 显示SIP(由Sofia-SIP提供)的状态,包括配置的SIP配置文件(profile)和注册用户信息。 示例:`sofia status` 然后可以指定profile,如 `sofia status profile internal` 4. **list_users** 显示已注册的用户(SIP注册)。 示例:`list_users` 5. **show registrations** 显示所有注册信息。 示例:`show registrations` 6. **show interfaces** 显示网络接口信息。 7. **show calls count** 显示当前通话总数(比`show calls`更简洁)。 8. **show tasks** 显示当前运行的任务(如定时任务等)。 9. **show channels count** 显示当前通道总数。 10. **show codec** 显示当前支持的编解码器及其状态。 11. **show api** 列出所有可用的API命令。 12. **show application** 列出所有可用的应用程序。 13. **show dialplan** 显示当前的拨号计划。 14. **show resource** 显示加载的资源(如ASR、TTS等)。 15. **memstats** 显示内存使用情况。 16. **show calls detail** 显示每个通话的详细信息(包括变量等)。 17. **show locks** 显示当前锁的状态(用于调试死锁问题)。 18. **show signals** 显示信号处理状态。 19. **show switchname** 显示交换机的名称。 20. **uptime** 显示FreeSWITCH运行时间。 这些命令可以通过fs_cli执行,也可以通过ESL发送。 下面我们给出一个使用ESL(Event Socket Library)发送`status`命令的Python示例,这样可以在程序中获取系统状态。 代码示例(使用Python和ESL): ```python import ESL def get_freeswitch_status(): # 连接参数 host = "localhost" port = 8021 password = "ClueCon" # 默认密码,请根据实际修改 # 建立连接 conn = ESL.ESLconnection(host, str(port), password) if not conn.connected(): print("连接失败") return None # 发送status命令 response = conn.api("status") if response: status_data = response.getBody() print("FreeSWITCH状态:\n", status_data) else: print("命令执行失败") conn.disconnect() if __name__ == "__main__": get_freeswitch_status() ``` 代码解释: - 使用ESL库连接到FreeSWITCH的Event Socket端口(默认8021)。 - 发送`status`命令获取系统状态。 - 打印返回的状态信息(字符串形式)。 - 断开连接。 注意:需要安装ESL库,通常FreeSWITCH的源码中包含该库(在`freeswitch/libs/esl`目录下),可以编译生成Python模块。 另外,如果需要其他命令,只需将`api`方法的参数替换为相应的命令即可。 下面我们再给出一个使用`sofia status`命令的示例,以获取SIP状态: ```python # 使用同样的连接方式,只需改变命令 response = conn.api("sofia status") ``` 这样就可以获取SIP状态信息。 因此,根据需求可以选择不同的命令来获取系统状态。 注意:部分命令可能返回大量数据,请考虑解析和存储。 最后,我们按照要求提出相关问题。 </think> ### 常用 FreeSWITCH 系统状态查询命令 除了 `show calls`,FreeSWITCH 还提供了多种系统状态查询命令,以下是最常用的命令及其功能说明: #### 1. 核心系统状态命令 | 命令 | 功能 | 示例输出 | |------|------|---------| | `status` | 系统概要状态 | `UP 0 years, 2 days, 3 hours...` | | `version` | 显示版本信息 | `FreeSWITCH Version 1.10.7...` | | `show channels` | 详细通道信息 | `UUID, Direction, State, Cid...` | | `show channels count` | 当前通道总数 | `total 5 channels` | #### 2. 网络和协议状态 | 命令 | 功能 | |------|------| | `sofia status` | SIP 协议栈状态 | | `sofia status profile <name>` | 指定 SIP 配置文件状态 | | `show registrations` | 所有注册用户信息 | | `show calls detail` | 带有详细变量的通话信息 | #### 3. 资源使用状态 | 命令 | 功能 | |------|------| | `show resource` | 加载的资源模块 | | `show memory` | 内存使用情况 | | `show cpu` | CPU 使用情况 | | `show tasks` | 后台任务状态 | #### 4. 模块和配置状态 | 命令 | 功能 | |------|------| | `show modules` | 已加载模块列表 | | `show codecs` | 支持的编解码器 | | `show api` | 可用 API 命令 | | `show dialplan` | 当前拨号计划 | #### Python ESL 查询示例 以下是使用 ESL 查询多个系统状态的代码示例: ```python import ESL def get_system_status(): conn = ESL.ESLconnection("localhost", "8021", "ClueCon") if not conn.connected(): return "连接失败" # 获取多种系统状态 commands = { "version": conn.api("version").getBody(), "status": conn.api("status").getBody(), "channels_count": conn.api("show channels count").getBody(), "memory": conn.api("show memory").getBody(), } conn.disconnect() return commands # 执行查询并打印结果 status = get_system_status() for name, output in status.items(): print(f"===== {name.upper()} =====") print(output) print("\n") ``` #### 代码解释: 1. **多命令批量执行** 通过字典结构一次性获取多个系统状态指标,包括: - 版本信息 (`version`) - 系统概要状态 (`status`) - 通道总数 (`show channels count`) - 内存使用 (`show memory`) 2. **输出格式化** 使用分隔线清晰展示不同命令的输出结果,便于阅读 3. **连接管理** 建立单一连接执行多个命令,减少连接开销 #### 典型输出示例: ``` ===== VERSION ===== FreeSWITCH Version 1.10.7-release-21... ===== STATUS ===== UP 0 years, 2 days, 3 hours, 12 minutes... 3 session(s) since startup 0 session(s) - peak 3 ===== CHANNELS_COUNT ===== total 3 channels ===== MEMORY ===== mem: 156M resident, 212M virtual ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值