使用FreeSWITCH本地的PostgreSQL支持编写Lua脚本?

我正在使用FreeSWITCH 1.2书籍学习如何使用FreeSWITCH,该书是由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进行交互,但我找不到任何相关的论坛帖子或资源。

有人能指点我方向吗?

干杯!

点赞
用户2872813
用户2872813

几个月以来,我已经没有写过针对fs的Lua代码了。然而,我确切地记得不能轻松地获得本地的postgresql支持。我选择使用ODBC连接器以及从FS脚本目录运行Lua脚本。我的步骤如下,以在CentOS 6.4上启用Lua脚本支持(其他*nix环境应该类似)。

这假设你已经安装并运行了具有mod_lua启用的完全功能的freeswitch。

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

您可能必须确保您的驱动程序指向正确的目录,然后您应该能够在“scripts”下在根freeswitch目录中制作一个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"/>

如果遇到任何问题,请告诉我,我会尽力提供帮助。

2013-10-11 23:59:52