扩展Asterisk1.8.7 AMI接口教程

需积分: 0 1 下载量 43 浏览量 更新于2024-08-05 收藏 197KB PDF 举报
"这篇文章主要介绍了如何扩展Asterisk 1.8.7版本的AMI(Asterisk Manager Interface)接口,包括新增自定义函数并实现功能。" 在Asterisk PBX系统中,AMI接口是用于与外部应用程序交互的重要部分,它提供了控制Asterisk服务器的能力,如创建呼叫、挂断呼叫、监控通道等。本文主要关注的是如何自定义扩展这个接口,以增加新的功能。 首先,我们来看扩展AMI接口的第一步:**函数注册**。在Asterisk源码的`main/manager.c`文件中,我们需要在`int __init_manager(int reload)`函数中注册新的接口。在这个例子中,作者添加了一个名为`myOriginate`的接口。通过调用`ast_manager_register_xml()`函数,将新接口的名字("myOriginate")、事件标志(EVENT_FLAG_ORIGINATE)和处理函数(`action_myOriginate`)传入,完成注册过程。 接下来是**功能实现**的部分。`action_myOriginate`是刚刚注册的接口对应的处理函数,它的任务是根据接收到的参数发起一个新的呼叫。在函数中,我们可以看到通过`astman_get_header(m, "HeaderName")`来获取来自管理接口的消息头,这些头信息包括了发起呼叫所需的参数,如: 1. `Channel`: 要拨打的通道名。 2. `Exten`: 拨号计划中的扩展号。 3. `Context`: 扩展号所在的上下文。 4. `Priority`: 呼叫优先级。 5. `Timeout`: 呼叫超时时间。 6. `CallerID`: 主叫ID。 这里还注释掉了其他可能的参数,例如`Account`、`Application`、`Data`、`Async`、`ActionID`、`Codecs`等,这些参数可以根据实际需求进行使用。 在`action_myOriginate`函数内部,作者创建了一个临时字符串`tmp`,用来组合一个唯一标识符,由当前时间戳和`name`(通道名)组成,确保每次呼叫都有唯一的`ActionID`。这个标识符对于跟踪和管理呼叫非常有用。 最后,文章虽然没有给出完整的代码实现,但可以看出接下来的逻辑应该是使用这些参数通过Asterisk的API发起一个呼叫。这通常会涉及到调用如`ast_channel_new()`、`ast_channel ANSWER()`、`ast_format_string()`等Asterisk API函数。 通过扩展Asterisk的AMI接口,开发者可以创建定制化的PBX功能,比如自定义的呼叫路由策略、高级呼叫控制或者集成第三方应用。这种灵活性使得Asterisk成为一个强大且可定制的VoIP解决方案。 总结来说,本文提供的方法为Asterisk 1.8.7版本的AMI接口扩展提供了一个实例,展示了如何注册新接口和实现特定功能,这对于熟悉C语言和Asterisk API的开发者来说是非常有价值的参考资料。