asterisk下自动寻呼系统设计文档
需积分: 0 16 浏览量
更新于2012-03-13
收藏 160KB DOC 举报
### asterisk下自动寻呼系统设计文档
#### 一、功能说明
自动寻呼系统是基于Asterisk IP电话平台构建的一个子系统,主要用于管理IP话机之间的呼叫逻辑。该系统能够实现以下功能:
1. **通话逻辑判别**:
- 当用户A通过按键或者AM(Asterisk Management Interface)输入另一个用户B的号码时,系统会根据B的状态决定呼叫逻辑。
- 如果B正在通话中,系统将向A播放提示音:“对方忙,请输入其他号码”。
- 如果B处于空闲状态,系统会尝试建立A与B之间的通话。
- 如果系统中不存在B这个用户,将提示A:“您拨的是空号,请重新输入其他号码”。
2. **话机优先级**:
- Asterisk平台支持多线程操作,当多个话机同时执行MSQLDial应用时,只有优先级最高的话机能同时使用按键和AMI方式进行拨号。
- 如果同时有按键和AMI两种方式输入,优先使用按键方式输入的号码。
- 其他话机仅能通过按键方式拨号。
- 每个话机的优先级预先存储在MySQL数据库中,可以通过查询数据库获得每个话机的优先级值。
- 当当前优先级最高的话机挂断后,系统会从剩余的话机中选择优先级最高的一个,并赋予其AMI方式拨号的权限。
#### 二、运行环境
- **操作系统**:Fedora12
- **IP电话平台**:Asterisk-1.6.2.11
- **数据库**:MySQL
- **代码编辑器**:Source Insight
#### 三、系统框架
1. **注册话机**:
- 主要实现函数为`static int chan_reg(struct ast_channel *chan)`。
- 功能包括将新注册的话机加入全局链表的尾部,并更新最高优先级(Goptimum)值。
- 全局链表使用`struct chan_list`来维护当前正在执行MSQLDial应用的话机列表。
- `struct chan_list`结构体包含:
- `char name[20]`:用于记录话机的名称,例如SIP/2000。
- `struct ast_channel *lis_chan`:用于记录话机所在的channel信息。
- `int id_priority`:用于记录该话机对应的优先级值。
- `int lvalid`:标识该话机是否拥有AMI方式拨号的权限。
- `struct chan_list *next`:指向下一个`chan_list`指针。
- `*lbackends`变量作为链表的头指针。
- `Goptimum`变量记录优先级值最大的`chan_list`变量。
- 数据库连接、查询及结果集的操作如下:
```c
mysql_init(&mysql);
mysql_options(&mysql, MYSQL_OPT_RECONNECT, &my_bool_true);
mysql_real_connect(&mysql, "localhost", "asterisk", "123456", "CHDIAL", 3306, NULL, 0);
mysql_query(&mysql, sql);
result = mysql_store_result(&mysql);
row = mysql_fetch_row(result);
mysql_free_result(result);
mysql_close(&mysql);
```
- `CHDIAL`数据库需事先建立,话机的优先级值需事先设定并存入数据库中,当话机注册时,通过访问数据库获取优先级值。
2. **执行(被)呼叫**:
- 主要实现函数为`static void* func_call(struct ast_channel *chan)`。
- **拨号方案**:
- 按键输入:使用`ast_readstring(chan, s, sizeof(s) - 1, 8200, 30000, "#")`读取按键输入,以“#”号结束。
- AMI输入:使用`pbx_builtin_getvar_helper(chan, "DIALEDPEERNUMBER")`获取AMI方式的输入值。
- **呼叫话机**:
- 当被呼叫方已经摘机时,系统会检查被呼叫方的状态,并根据状态决定是否建立通话连接。
- 如果被呼叫方空闲,系统将尝试建立呼叫。
- 如果被呼叫方正在通话,系统将播放提示音给呼叫方。
- 如果被呼叫方不存在,系统同样播放相应的提示音给呼叫方。
3. **注销话机**:
- 注销话机的功能是为了释放资源并确保系统稳定运行。
- 在话机注销时,需要从全局链表中移除该话机,并更新最高优先级值(Goptimum)。
#### 四、核心模块介绍
1. **主函数**:
- 负责初始化系统,加载配置信息,启动各个服务模块。
2. **呼叫、等待呼叫**:
- 实现了自动寻呼系统的呼叫逻辑处理。
- 根据话机状态判断是否可以建立呼叫,并播放相应的提示音。
3. **全局链表维护**:
- 维护全局链表的完整性,确保话机的正确注册与注销。
- 更新优先级信息,以便在话机挂断后能够正确地重新分配权限。
#### 五、系统的可扩展性
- 系统采用模块化设计,易于添加新的功能模块。
- 支持多线程操作,可以在不影响现有呼叫的情况下添加新的话机。
- 可以轻松集成其他通信协议或接口,如SIP、PRI等。
#### 六、系统源代码
- 系统源代码包括所有核心模块的实现,以及与数据库交互的部分。
- 使用C语言编写,利用Asterisk提供的API实现功能。
- 源代码遵循特定的编码规范,便于维护和扩展。
### 总结
通过以上分析可以看出,asterisk下的自动寻呼系统是一个高度可定制化的通信解决方案。它不仅能够满足基本的呼叫需求,还具备一定的智能管理和扩展能力。通过对话机优先级的控制和灵活的呼叫逻辑设置,系统能够在多种场景下高效运行。此外,系统的模块化设计也为未来的技术升级和功能拓展提供了便利。

ysy593
- 粉丝: 1
- 资源: 5
最新资源
- 基于 3D 卷积神经网络(CNN)的阿尔兹海默智能诊断 Web 应用实践源码+说明.zip
- 基于 OpenCV 将实体文本转换并归档为虚拟小册,支持红蓝双色荧光笔的「覆盖」和「切割」识别.zip
- 基于永磁同步模型的转矩预测控制:三矢量法与计算最优矢量策略-实现高效率与低电流谐波的优化研究,永磁同步模型下三矢量转矩预测控制策略:计算最优矢量减少周期计算量与电流谐波分析,永磁同步模型转矩预测控制
- 基于 PaddleFL 框架的联邦学习医疗影像识别 GUI新版源码+说明.zip
- Mac(操作系统15以上) M1-4芯片可以使用的Nacos-Server-2.2.0
- 基于JSON、CSV、XML和YAML格式的全球国家数据设计源码
- 基于Flask框架的图书借阅系统设计源码
- 基于Vue+TypeScript的二手书交易平台前端设计源码
- 基于Python的室内环境监测软件服务端WebView设计源码
- 基于LCD1602显示的51单片机直流电机PWM控制系统:C程序设计、Proteus仿真及功能演示,基于LCD1602显示的51单片机直流电机PWM控制系统设计与仿真演示视频,51单片机直流电机160
- 深入Comsol仿真:复现官网感应测井案例的实践与探索,深入探究Comsol仿真感应测井技术:复现官网感应测井案例,Comsol仿真感应测井 复现官网感应测井案例 ,Comsol仿真; 感应测井; 复
- MATLAB与CarSim软件下的魔术轮胎模型验证:轮胎力、滑移率与侧偏角关系的三维图解与初学者指南,MATLAB中基于Carsim 175 70 R13魔术轮胎的力与滑移率、侧偏角关系验证研究报告
- 基于西门子S7-200 PLC与MCGS组态的自动售货机智能控制系统解决方案No.623,基于西门子S7-200 PLC与MCGS组态的自动售货机控制系统No.623-智能化、高效能的自动化管理解决
- 基于transformer模型的电池温度滚动预测Python源码
- 基于Simulink的永磁风机储能同步机一次调频技术仿真研究:离散模型下的性能对比与风机控制策略探讨,Simulink永磁风机储能同步机的一次调频与离散模型仿真研究:快速仿真,显著对比效果,同步机类型
- COMSOL仿真二维光子晶体缺陷模BIC的分析:孤立兼并点与缺陷模频率match点的应用探索,COMSOL计算二维光子晶体缺陷模BIC:孤立兼并点与缺陷模频率分析,comsol二维光子晶体计算 缺陷模