2

我正在学习如何使用 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 与某种数据库连接,但我找不到任何相关的论坛线程或资源。

谁能指出我正确的方向?

干杯!

4

1 回答 1

3

自从我为 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 目录中创建一个 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-11T23:59:52.587 回答