我的目标:客户端(SIP电话,我使用3CX电话)拨到星号服务器,星号然后连接到外部关系数据库(与星号服务器不在同一位置),如果数据库响应了什么,星号服务器会向响应客户端播放一个语音文件(预定义的.gsm文件)。
我已经有了:我已经在VirtualBox中安装了asterisk Now作为星号服务器,客户端正在使用软电话连接SIP通道中的asterisk服务器。当客户端拨号到星号服务器时,服务器可以执行拨号计划。
我的问题是:如果我想让星号服务器建立到外部数据库的连接,例如MySQL。并访问请求数据,我是否需要让dialplan调用AGI脚本来执行此操作?如果是这样的话,使用PHP创建AGI脚本会更容易实现吗?如果没有,应该如何连接mysql?使用ODBC?
是否可以使用拨号计划而不是使用其他编程语言来操作星号服务器中的数据?但拨号计划似乎不像其他编程语言那样有完整的语法支持?
您可以在星号上使用ODBC
。甚至可以将星号连接到Microsoft SQL Server
。如果要将日志数据保存在星号上,可以使用CEL
或CDR
,也可以通过AMI
接收事件。但如果您想强制星号执行特殊任务(动态),最好使用AGI
。我希望它能有所帮助。
Asterisk可以使用MySQL或其他数据库来存储计费信息,但对于您的任务——播放各种副文件——您应该使用AGI。AGI非常灵活,因为您可以使用所需的各种语言和库。我的AGI脚本使用Python,但其他脚本使用C、Perl和Java。您可以在Asterisk wiki上找到这些语言的示例:http://www.voip-info.org/wiki/view/Asterisk+AGI-
当然,通过AGI程序,您可以连接到数据库或使用HTTP/SOAP/REST与其他软件集成。
不,您不需要AGI脚本。
最简单的方法是在dialplan中使用func_odbc(通过odbc用户定义的sql函数)。
顺便说一句,dialplan是一种完整的语言,就像任何其他编程语言一样。任何事情都只能通过拨号计划完成。但并不是所有的事情都是有效的,需要大量的经验。