我正在学习如何使用FreeSWITCH的作者编写的FreeSWITCH 1.2书籍来使用FreeSWITCH。
在第7章中,介绍了如何使用Lua脚本以及连接数据库。但是,我觉得这本书是在FS 1.2.5出来之前编写的,并没有考虑到PostgreSQL的原生支持。结果是令人困惑的非工作示例代码。 这是本书的过时部分:http://books.google.ca/books?id=uISv9J6wt88C&lpg=PT295&dq=Freeswitch%20Connecting%20to%20a%20database%20with%20LuaSQL&pg=PT293#v=onepage&q&f=false
我想了解如何使用Lua将FreeSWITCH与某种数据库连接,但我找不到任何相关的论坛帖子或资源。
有人能指出我正确的方向吗?
干杯!
答案 0 :(得分:2)
自从我为fs写成lua以来已经有几个月了。但是,我明确记得无法轻松获得本机postgresql支持。我选择了一个odbc连接器并从freeswitch的脚本目录运行lua脚本。我在CentOS 6.4上获得lua脚本支持的步骤如下(其他* nix环境应该非常相似) 这假设你有一个完全功能的freeswitch安装并运行mod_lua。
1)安装postgresql-odbc.x86_64(或等效的)
2)在/ etc目录中创建/修改两个文件,如下所示,第一个是odbc.ini,第二个是odbcinst.ini
ODBC.INI:
[freeswitch]
Driver=/usr/lib64/psqlodbcw.so
Description=Connection to LDAP/POSTGRESQL
Servername=<ENTER SERVER IP HERE>
Port=5432
Protocol=6.4
FetchBufferSize=99
Username=<ENTER USERNAME HERE>
Password=<ENTER PASSWORD HERE>
Database=<ENTER DATABASE NAME HERE>
ReadOnly=no
Debug=1
CommLog=1
ODBCINST.INI:
[PostgreSQL]
Description = PostgreSQL driver for Linux & Win32
Driver = /usr/lib64/psqlodbcw.so
您可能必须确保您的驱动程序指向正确的目录,然后您应该能够在“freeswitch”目录下的“scripts”下创建一个lua脚本,这是一个示例脚本,请确保替换并使用您的以下示例中的db凭据:
local dbh = freeswitch.Dbh("odbc://freeswitch:<DB USERNAME>:<DB PASSWORD>") -- connect to ODBC database
assert(dbh:connected()) -- exits the script if we didn't connect properly
local sqluuid = env:getHeader("uuid")
local sqlani = env:getHeader("sip_from_user")
local sqldni = env:getHeader("sip_req_user")
local sqlstart = env:getHeader("start_stamp")
local sqlstop = env:getHeader("end_stamp")
local sqlpid = env:getHeader("presence_id")
local myquery = string.format("INSERT INTO cdr (uuid, ani, destination_number, start_stamp, end_stamp, presence_id) VALUES ('%s', '%s', '%s', TIMESTAMP '%s', TIMESTAMP '%s', '%s')",
sqluuid, sqlani, sqldni, sqlstart, sqlstop, sqlpid)
dbh:query(myquery)
dbh:release() -- optional
然后使用以下方法从拨号方案中调用此脚本:
<action application="set" data="session_in_hangup_hook=true"/>
<action application="lua" data="someluascript.lua"/>
如果您遇到任何问题,请告诉我,我会尝试进一步协助。